AWS Lambda から他の Lambda を呼び出す(Python)

Tech Knowledge
公開: 2023-04-05

概要

Lambda から他の Lambda を呼び出すには lambda:InvokeFunctionアクションを実行できる権限が必要。
大きく分けると以下の手順のいずれか

  1. Lambda 作成時に自動生成されたロールに紐づいてるポリシー(このポリシーも自動生成されたもの)に lambda:InvokeFunctionアクション を追加
  2. lambda:InvokeFunctionアクション の権限を付与したポリシー AWSLambdaRole が存在するので、Lambda 作成時に自動生成されたロールに AWSLambdaRole ポリシーをアタッチ
  3. 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'}

参考

PythonであるLambda関数から別のLambda関数を呼び出す