AWS Lambda から Lambda の実行
技術情報
公開: 2023年04月28日
目次
-
- 2.1. 呼び出される側(testFunction02)
- 2.2. 呼び出し側(testFunction01)
-
- 3.1. 1. セキュリティグループを作成
- 3.2. 2. VPC エンドポイントを作成
- 3.3. 3. VPC 内 Lambda の作成
- 3.4. 4. IAMロールの設定
概要
呼び出し元の Lambda が VPC 内にあるかどうかで必要な設定が変わる。
vpc 内 Lambda から Lambda を呼ぶ( invoke する)場合、public subnet や private subnet などのパターン別に呼べるか検証してみた
- 呼び出し元の Lambda が VPC 外: IAMロールの設定(AWSLambdaRole)が必要
- 呼び出し元の Lambda が VPC 内:セキュリティグループの作成、VPC エンドポイントの作成、 IAMロールの設定(AWSLambdaRole、AWSLambdaVPCAccessExecutionRole)が必要
VPC 外 Lambda から Lambda を呼ぶ
呼び出される側(testFunction02)
特に考慮は不要
def lambda_handler(event, context):
print('[testFunction02] Called by testFunction01')
return {'message': 'called by testFunction01'}
呼び出されたログは以下に出力される。 CloudWatch > ロググループ > /aws/lambda/testFunction02
print の出力内容も CloudWatch のログに出力される。
呼び出し側(testFunction01)
最小コード
import boto3
def lambda_handler(event, context):
boto3.client('lambda').invoke(
FunctionName = 'testFunction02',
InvocationType='RequestResponse'
)
IAMロールの設定
- Lambda > 関数 > 作成した Lambda
- 設定 > アクセス権限 > 実行ロール > 編集
- 既存のロールのリンクをクリック
- 許可ポリシーに以下を追加
- AWSLambdaRole
VPC 内 Lambda から Lambda を呼ぶ
1. セキュリティグループを作成
- VPC > セキュリティグループ > 「セキュリティグループを作成」ボタン
- いったん作成し、インバウンドルールを追加
- タイプ: すべてのトラフィック
- ソース: カスタム(自身のセキュリティグループを設定)
2. VPC エンドポイントを作成
- VPC > エンドポイント > 「エンドポイントを作成」ボタン
- エンドポイントを作成
- エンドポイントの設定
- サービスカテゴリ: AWS のサービス
- サービス: com.amazonaws.ap-northeast-1.lambda
- VPC: VPC 内 Lambda の VPC を選択
- サブネット: VPC 内 Lambda の サブネットを選択
- セキュリティグループ: 1. で作成したセキュリティグループ
- 「エンドポイントを作成」ボタン
- エンドポイントの設定
3. VPC 内 Lambda の作成
- Lambda > 「関数の作成」ボタン
- 関数の作成
- 詳細設定
- VPC を有効化にチェック
- VPC: 2. と同じ内容
- サブネット: 2. と同じ内容
- セキュリティグループ: 2. と同じ内容
- 「関数の作成」ボタン
- 詳細設定
4. IAMロールの設定
- Lambda > 関数 > 作成した Lambda
- 設定 > アクセス権限 > 実行ロール > 編集
- 既存のロールのリンクをクリック
- 許可ポリシーに以下を追加
- AWSLambdaRole
- AWSLambdaVPCAccessExecutionRole
参考
VPC エンドポイントを使用する方法
vpc 内 Lambda から Lambda を呼ぶ( invoke する)場合、public subnet や private subnet などのパターン別に呼べるか検証してみた
NAT Gateway を使用する方法(課金注意)
(AWS)Lambda からLambdaの実行
InvocationType のオプション(同期/非同期)
AWS Lambdaのトリガーについて
SQS をトリガーにする例
SQSのキューをトリガーにしてLambdaでメッセージを受信する(Python)
Boto3(AWS SDK for Python)でSQSに送信したメッセージをLambdaでポーリングして受信してみた
Amazon SQS での Lambda の使用