AWS Lambda から他の Lambda を呼び出す(Python)
Tech Knowledge
公開: 2023-04-05
目次
概要
Lambda から他の Lambda を呼び出すには lambda:InvokeFunctionアクションを実行できる権限が必要。
大きく分けると以下の手順のいずれか
- Lambda 作成時に自動生成されたロールに紐づいてるポリシー(このポリシーも自動生成されたもの)に lambda:InvokeFunctionアクション を追加
- lambda:InvokeFunctionアクション の権限を付与したポリシー AWSLambdaRole が存在するので、Lambda 作成時に自動生成されたロールに AWSLambdaRole ポリシーをアタッチ
- AWSLambdaRole ポリシーを付与/追加したロールをあらかじめ作成しておき、Lambda の実行ロールとして設定
lambda:InvokeFunctionアクション 権限の追加
1. Lambda の実行ロールに紐づいているポリシーに「lambda:InvokeFunctionアクション」を追加
- Lambda > 関数 > 該当Lambda
- 設定 > 実行ロール > 「ロール名」をクリック
- ポリシー名の + 記号をクリックして展開し、「編集」ボタンを押下
- JSONタブをクリックし、Statementの下に以下の設定を追記
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:*:[AWSアカウントID]:function:*"
}
- ポリシーの確認ボタンを押下
- 変更の保存ボタンを押下
2. Lambda の実行ロールにポリシー AWSLambdaRole を追加
- Lambda > 関数 > 該当Lambda
- 設定 > 実行ロール > 「ロール名」をクリック
- 許可を追加 > ポリシーをアタッチ
- 検索欄に「AWSLambdaRole 」を入力しEnter
- 表示された一覧の AWSLambdaRole をチェックし、許可を追加
3. AWSLambdaRole ポリシーを付与したロールを作成し、Lambda の実行ロールとして設定
STK-83 AWS Lambda から RDS(PostgreSQL)にアクセスする
の「RDSがパブリック公開されていない場合」の手順と同じ
最小コード
testFunction01(Lambda を呼び出す側) boto3 を使用して他の Lambda を呼び出す
import boto3
def lambda_handler(event, context):
print('[testFunction01] testFunction01')
# 別Lambda関数の呼び出し
response = boto3.client('lambda').invoke(
FunctionName = 'testFunction02',
InvocationType='RequestResponse'
)
print(response)
testFunction02(Lambda から呼び出される側)
def lambda_handler(event, context):
print('[testFunction02] Called by testFunction01')
return {'message': 'called by testFunction01'}