Lambda関連のことを調べてみた

Lambda関連のことを調べてみた
目次

PythonでLINEチャットボットを作る

過去に作ったLINEチャットボットを今風にリメイクしたものを投稿します。

### 環境:
 ローカル、Linux(Ubuntu)、python3.12.6

### 1.LINE Developersアカウントの作成:
https://developers.line.biz/ja/ にアクセスしてアカウントを作成する。
(今回はビジネスアカウントを作成)

### 2.プロバイダーの作成
コンソールにログインし、「新規プロバイダー作成」を選択。

### 3.チャットボット(LINEチャネル)の作成
チャネル設定から MessageAPI を選択して各種設定する
※執筆時点でLINE公式アカウントの作成が必要になっているため、画面の指示に従う。

### 4.Message API設定
LINE公式アカウントを作成して、MessageAPIを有効にする。詳しくは以下を参照。
https://developers.line.biz/ja/docs/messaging-api/getting-started/
有効にしたら、URLとアクセストークンを取得する。
また、Webhookを使う

元記事を表示

AWSのlambdaにデプロイされたイメージをローカルで編集する方法

## 概要
最近途中から参画した案件でawsのlambdaを使うことがあったのですが、今まで経験がなかったため備忘録としてまとめます。
ざっくりした内容としては表題の通り、lambda関数にイメージがデプロイされていた場合、どのような手順で内容を編集し、更新するのかについてとなります。

## 前提
– Dockerの環境構築済み
– AWS CLIの環境構築済み
– 既存のlambda関数、イメージが存在する
– 既存リソースの更新であり、新規作成ではない

## 手順

### ECR, docker のログイン
AWSにおいてイメージはECR(Elastic Container Registry)で管理されます。そのため、外部からイメージを取得するには、ログインしておく必要があります。

“`
aws ecr get-login-password –region YOUR_REGION | docker login –username AWS –password-stdin YOUR_ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com

元記事を表示

SecretManagerからSecretを取得して外部APIを実行させるLambda関数サンプル

# 概要
・OAuth2.0のクライアント認証で使うトークンを取得する。
・SecretManagerにClientSecretとClientIdを保持している
・confidentialを作成してAPI Gateway経由で外部APIを実行し、取得したトークンをAPI Gatewayのステージ変数へ格納する。

“`
import json
import ast
import boto3
import urllib.request
import urllib.parse
import base64
import os
import logging
from botocore.exceptions import ClientError

logging.basicConfig(
format=’%(asctime)-15s %(levelname)s %(message)s’,
level=logging.INFO
)

# AWSクライアント
apigw_client = boto3.client(“apigateway”)

# リージョン取得
region_n

元記事を表示

Pythonで学ぶAWS Lambdaを活用したEC2インスタンス監視とNLBターゲットルールの自動切り替え

## はじめに
AWS Lambda関数を用いて、特定のEC2インスタンスの状態を監視し、両方のインスタンスが停止した際にNLBのリスナーをメンテナンスモードに変更する方法について解説します。

AWS SDK for Python(boto3)を活用して、EC2インスタンスの状態確認とNLBのターゲットグループの変更を行います。

本記事では、各コードの部品を順を追って説明し、全体の流れを把握できるようにします。

## コードの部品紹介
AWS Lambda関数を使用して特定のEC2インスタンスの状態を監視し、両方のインスタンスが停止している場合にNLB(Network Load Balancer)のリスナーをメンテナンスモードに変更する処理を行います。各部分を解説します。

### 1. インポートとクライアントの初期化
“`python
import boto3

def lambda_handler(event, context):
ec2_client = boto3.client(‘ec2’)
elb_client = boto3.client(‘elb

元記事を表示

Pythonで学ぶAWS Lambdaを活用したEC2インスタンス監視とALBルールの自動切り替え

## はじめに
本記事では、AWS Lambda関数を用いたEC2インスタンスの監視と、ALB(Application Load Balancer)のルール切り替えについて解説します。

EC2インスタンスが停止した場合に、ALBをSorryページに切り替える仕組みをコードと共に紹介します。

## コードの部品紹介
Lambda関数のコードを大きなまとまりごとに解説していきます。

### 1. 必要なライブラリとクライアントの準備

“`python
import boto3

def lambda_handler(event, context):
ec2_client = boto3.client(‘ec2’)
elbv2_client = boto3.client(‘elbv2’)
“`

**解説:**
まず、AWS SDK for Python(boto3)をインポートし、EC2とELBv2(Elastic Load Balancing v2)のクライアントオブジェクトを作成します。これにより、Lambda関数内でEC2インスタンスとALBのルール設定

元記事を表示

Error: You must sign in or use a license key with Serverless Framework V.4 and later versions. Please use “serverless login”.の解決方法

Serverless Frameworkをv3系からv4系にアップグレードしたところ、デプロイワークフローで以下のエラーが出たので、解消時の手順を記載します。

“`
$ nest build && sls deploy

✖ Error: You must sign in or use a license key with Serverless Framework V.4 and later versions. Please use “serverless login”.
at Authentication.getAuthenticatedData (file:///home/runner/.serverless/releases/4.4.3/package/dist/sf-core.js:647:10535)
at async Authentication.resolverAuthenticate (file:///home/runner/.serverless/releases/4.4.3/package/dist/sf-core.js:649:20575)

元記事を表示

AWS_LAMBDA_SECURITY_NOTIFICATION への対応

# はじめに

もう少し皆さんも興味が湧くような内容を紹介していきたいと日々考えている [@\_\_\_nix___](https://twitter.com/___nix___) です。

今回もAWSからの通知でお悩みの方向けの記事です。

# 背景

AWSからの通知例

これは、2024 年 7 月 4 日の Lambda GetFunction API 認可の変更についてのご連絡のフォローアップで、お客様の対応が必要となる場合があります。この変更の実施は、以前にお知らせした 2024 年 7 月 27 日から 2024 年 10 月 2 日に延期されました。また、お客様に確認と必要な変更の時間を設けるため、お客様のアカウントを 2024 年 XX 月 XX 日まで例外リストに追加しました。 以前は、ListTags API を明示的に使用する場合にのみ ListTags に対する権限が必要でした。しかし、GetFunction API 権限を持つプリンシパルは、ListTags API が明示的に拒否されている場合でも、G

元記事を表示

【AWS】localhost:3000とAPI Gatewayでやりとりするために必要な設定

どうもこんにちは。

今回は、ローカル環境で動かしているアプリケーションとAPI Gatewayでやりとりするための方法をメモとして残しておきたいと思います。

# 環境

今回使用する環境はこちらです。

– ローカル環境
– Next.js([`Vercel V0`](https://qiita.com/PDC-Kurashinak/items/bc25e63ba406c0e24eef)で作成したアプリケーションを元にしています。)
– AWSサービス
– API Gateway
– Lambda(python3.12)

`Vercel V0`については、以下の記事で紹介しています。

https://qiita.com/PDC-Kurashinak/items/bc25e63ba406c0e24eef

# 前提

今回は、ローカル環境のアプリケーションと`Lambda`関数の作成は省略します。

# API GatewayでAPIを作成

## 1. APIの作成

## 1-1. 作成画面へ

API一覧画面の右上にある「APIの作成」ボタンをクリッ

元記事を表示

ExcelのLAMBDA関数を極める:独自の関数を作成するための完全ガイド

## はじめに

Excelの新機能「LAMBDA関数」について、詳しく解説していきます。この革新的な機能により、Excelの数式言語がより強力になり、ユーザーが独自の関数を定義できるようになりました。以下、15章に分けて、LAMBDAの基礎から応用まで、コード例を交えながら丁寧に説明していきます。

## 第1章:LAMBDA関数の基本

LAMBDA関数は、Excelユーザーが独自の関数を作成できる画期的な機能です。これにより、複雑な計算や繰り返しの多い作業を簡単に行えるようになりました。LAMBDA関数の基本的な構文は以下の通りです:

“`
=LAMBDA(パラメータ1, パラメータ2, …, 計算式)
“`

例えば、2つの数値を足し算する簡単な関数を作成してみましょう:

“`
=LAMBDA(x, y, x + y)
“`

この関数を使用するには、セルに直接入力するか、名前付き関数として定義します。LAMBDA関数を使うことで、Excelの標準関数では実現できなかった複雑な計算も可能になり、作業効率が大幅に向上します。

## 第2章:名前付き関数の作成

元記事を表示

特定のLambdaを指定した時刻に実行する(Node.js)

Lambdaで、自分自身を1分後に呼び出せるようにしてみました。

## 要約
– EventBridge Schedulerを使用
– 2種類のロールを用意する必要がある
1. 実行ロール
1. EventBridgeのスケジュールに付与するロール
– 作成しようとしているスケジュールと同名のスケジュールがあるとエラーになるので、先に削除が必要

## IAMロールの用意
### 1. 実行ロール
Lambdaで実行する場合、Lambdaの実行ロールに下記を含める
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “Statement1”,
“Effect”: “Allow”,
“Action”: [
“scheduler:CreateSchedule”,
“scheduler:DeleteSchedule”,

元記事を表示

「Lambda GetFunction API 認証の変更に関するフォローアップ」に慌てて調べたら原因はAWS管理ポリシーだった

今回は時事ネタというか。。

# Problem

2024/09/29にAWSから次のようなタイトルの警告メールが届きました:

> __[要対応] Lambda GetFunction API 認証の変更__ に関するフォローアップ | [Action Required] Follow up on changes to Lambda GetFunction API authorization [AWS Account: XXXX] [XX-XXXX-X]

本文には以下のようにあって・・・

> ListTags API を明示的に使用する場合にのみ ListTags に対する権限が必要でした。しかし、GetFunction API 権限を持つプリンシパルは、ListTags API が明示的に拒否されている場合でも、GetFunction 呼び出しによって出力されたタグ情報にアクセスできました。 __2024 年 10 月 2 日以降、Lambda は GetFunction API を呼び出すプリンシパルに ListTags API に対する明示的な許可権限が設定されたポリシー

元記事を表示

Pythonで湧き水APIを触ってみる+LambdaでAPIを自作してみる

# はじめに
インターネット上でデータをやり取りする際、APIは非常に便利なツールです。
APIを利用することで、さまざまなデータにアクセスしたり、サービスを実行したりすることができます。
しかし、「APIを自分で使うにはどうすればいいの?」と疑問を持つ方も多いかもしれません。

本記事では、APIの基本的な概念から始め、自分でAPIを実行し、その応答を確認する方法を紹介します。

前半でAPIとは何かを説明した上で、Pythonを使って実際にAPIを呼び出し、データを取得する体験をしてみましょう。
そして後半では、AWS Lambdaを使用して自分で関数(API)を作成しLambda上でのテストとVScodeを使用してPythonで自作API呼び出しまでを行います。

この記事は以下のような人におすすめです。

– APIを実行する方法が知りたい
– AWS Lambdaを使用した関数作成の方法が知りたい

# 記事の構成

**【前半】**
APIとは何か?というところから湧き水APIを呼び出して応答を確認するところまでを行います。
1. APIって何?
1. 湧き水A

元記事を表示

LambdaからLex インテントのサンプル発話を更新しビルドする

# はじめに
本記事では、AWS Lambda のスクリプトからLex Bot のサンプル発話を更新し、DRAFTバージョンをビルドする処理を実装していきます。

# 環境
– Python:3.12
– Lex:v2

# ゴール
Lambda関数から下記の2点を実行する
– Lex Botのサンプル発話の内容を更新する
– Lex BotのDRAFTバージョンをビルドする

LambdaからLexのビルドについては下記の記事に実装しています。

https://qiita.com/enumura1/items/2e1564871f861f2578ac

# Lex
本記事では下記のように6つのインテントのあるLex Botを想定しています。
“`:インテント(初期)
・intent0001(サンプル発話:あああ)
・intent0002(サンプル発話:いいい)
・intent0003(サンプル発話:ううう)
・intent0004(サンプル発話:えええ)
・intent0005(サンプル発話:おおお)
・FallbackIntent
“`
これらLex インテント 6つのう

元記事を表示

「AWS Hands-on for Beginners Serverless #3 AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン」をAWS CLIでやってみる

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-3-2022-reg-event.html?trk=aws_introduction_page

上記、「AWS Hands-on for Beginners Serverless #3 AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン」 をAWS CLIでやってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3297641/de799de6-3293-eb51-4710-8764f7f12825.png)
ハンズオンから引用

# 03 S3 トリガーで Lambda ファンクションを起動する
## S3バケット作成
### 変数
“`bash:コマンド
# バケット名
date_var=$(date +%Y%m%d) \
&& echo ${date_var}

元記事を表示

AWS Lambdaを単体で動かしてみた

## 参考にしたハンズオン
公式で公開されている以下のハンズオンを見ながら自分でやってみました。

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html

このハンズオンのゴールは以下の構成ですが、本記事ではAWS Lambdaを単体で動かしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/a0ef753a-a545-9764-d3df-99f68a0ec025.png)

## やってみる
マネジメントコンソールにアクセスし、Lambdaのページにアクセスします。
「関数の作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/c905d830-ab7f-25c1-710e-f2

元記事を表示

AWS Lambdaでなんちゃってオートスケーリング

現在運用中のELB配下にあるEC2インスタンスの負荷が高くなってきたため、負荷の高い時間帯のみEC2インスタンスを追加してELBに登録させるという処理をLambdaを使って行った際の備忘録です。

※運用中のELBはNLBですが、ALBでもだいたい同じだと思います。

・負荷の高い時間帯になったら:EC2インスタンスの起動>ELBへの登録
・負荷の低い時間帯になったら:ELBから削除>EC2インスタンスの停止

## 1. ポリシーの作成(EC2インスタンスの起動・停止用)
「IAM > ポリシー > ポリシーの作成」に進みます。

サービスからEC2を選択して下記アクションを許可します。
“`
ec2:Describe
ec2:Start
ec2:Stop
“`

“`
ポリシー名:Auto_EC2-Policy
“`
※分かりやすい適当な名前を入力して保存

## 2. ポリシーの作成(ELBへの登録・削除用)
再度「IAM > ポリシー > ポリシーの作成」に進みます。

サービスからELB v2を選択して下記アクションを許可します。
“`
RegisterTarget

元記事を表示

AWS NLBを活用した自動メンテナンスモードの実装: EC2インスタンスの停止時にSorryページを表示する仕組み

## はじめに
本記事では、AWSのNetwork Load Balancer (NLB)を使用して、2台のEC2インスタンスが稼働するサービスにおいて、両方のインスタンスが停止した際に自動的にメンテナンス用の「Sorryページ」を表示する仕組みを解説します。

また、1台でもインスタンスが復旧した際に通常サービスに戻る自動化構成についても紹介します。

このシステムは可用性とメンテナンス性を向上させるために有効ですが、現在は検証を行っていないため、今後自分の環境で実施していく予定です。

## フロー全体の流れ
### 通常時のトラフィックフロー

“`css
クライアント

NLB

通常のターゲットグループ

稼働中のEC2インスタンス (通常サービス)
“`

:::note
**クライアント → NLB**
ユーザーがサービスにアクセスすると、リクエストはNLB(Network Load Balancer)に送信されます。

**NLB → 通常時のターゲットグループ**
NLBは正常に稼働中のEC2インスタンス(通常のターゲットグループ)にト

元記事を表示

Lambdaを使ってDiscordBot(Python)の実行

## はじめに
今回作成したDiscordBot(Python)は、Discordのチャンネルに対してメッセージを書き込むものを作成しました。
また、毎日0:00に書き込んでほしいので、EventBridgeからLambdaを起動して書き込む仕組みにしました。

用途としては、FiveMのガソリンスタンドを経営しており、ガソリンの価格を日々変更したく、一定の範囲のランダム値を投稿するのと、ゲーム内でのX(ツイッター)でポストするためのテンプレート文章をDiscordのチャンネルに投稿するものを作成しました。

## 構成イメージ

EventBridgeからLambdaを起動して、Discrodのチェンネルにメッセージを書き込みます。
【全体の概要構成】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868301/d03f1b86-7eea-e78d-2707-51147cf2ef6b.png)

【EventBridgeとLambdaの構成】
![image.png](https:

元記事を表示

AWSによる自動メンテナンスページ表示の実現: NLBとLambdaを活用した可用性向上の構成案

## はじめに
実務において、ネットワーク負荷分散(NLB)を利用した構成で、システムが停止した際に自動でメンテナンスページ(Sorryページ)を表示させる必要がありました。

特に、EC2インスタンスが停止した際に、その状態を監視して自動的にSorryページへ切り替えるフローの構築が求められ、EventBridgeやLambdaを利用した動的な制御が必要でした。

今回の記事では、この動作を実現するために行った構成案について、考えましたので、検証前の自分への備忘録として整理していきます。

## 前提知識
基本的なAWSに関する知識は以下になります。

:::note
**NLB (Network Load Balancer):**
通常時、クライアントのリクエストはヘルシーなEC2インスタンスへルーティングされます。

**EC2インスタンス:**
ヘルシーな状態であれば、通常のサービスを提供します。

**EventBridge:**
EC2インスタンスの状態(Unhealthyかどうか)を監視します。すべてのインスタンスがUnhealthyになると、イベントを発生させます。

元記事を表示

cargo-lambda + cargo-lambda-cdkでRustで書いたLambdaをAWSにデプロイするハンズオン記事

## はじめに

LambdaをRustで書く機会がありました。
LambdaはRustを標準でサポートしているわけではないので、通常であればカスタムランタイムを使うことになると思います。
一見大変そう…と感じるかもしれませんが、cargo-lambdaとcargo-lambda-cdkを用いることによって、快適に開発を進められました。

今回の記事では簡単なAPIをハンズオンで実装することでそのtipsをお伝えできればと思っています。
本記事では,POSTすることでDynamoDBにレコード追加をするLambda,
GETすることで作成したレコードの一覧を返すLambdaの2つをcargo-lambda, cargo-lambda-cdkを用いて定義・デプロイしたいと思います。

## cargo-lambda, cargo-lambda-cdkとは?

### cargo-lambdaとは

https://github.com/cargo-lambda/cargo-lambda

ひとことで言ってしまえばRust + Lambda開発のためのcargoのサブコマンドです。

元記事を表示

OTHERカテゴリの最新記事