LoginSignup
0
0

はじめに

本記事ではLambdaから別のLambdaを同期的に呼び出す方法について備忘録も兼ねてまとめたものになります。

環境

  • python: 3.12

関数を呼び出す側のLambda

Lambda > 関数 > 関数の作成から呼び出す側のLambdaを作成します。
今回は名前をcall_lambdaとしています。

image.png

別のLambda関数を呼び出すのにデフォルトのロールだけだと権限が足りないので追加します。
設定タブ > アクセス権限 > ロール名をクリックしIAMに移ります。
IAM側では許可を追加 > インラインポリシーを作成します。

image.png

別のLambda関数を呼べるようにポリシーを修正します。

json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"lambda:InvokeFunction"
			],
			"Resource": [
				"*"
			]
		}
	]
}

Lambdaのソース(呼び出す側)

下記のソースで別のLambda関数(今回はcalled_lambda)を呼び出します。

lambda_function.py
import boto3
import json

def lambda_handler(event, context):
    client = boto3.client('lambda')
    
    item1 = event['item1']
    item2 = event['item2']
    
    payload = {'item1':item1, 'item2':item2}
    
    response = client.invoke(
        FunctionName='called_lambda',
        InvocationType='RequestResponse',
        Payload=json.dumps(payload)
    )
    
    response_payload = json.loads(response['Payload'].read())
    
    return response_payload
イベントJSON
イベントJSON
{
  "item1": "apple",
  "item2": "banana"
}

InvocationTypeについて

  • 同期的に呼び出す場合:RequestResponse
  • 非同期の場合:Event

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda/client/invoke.html

呼び出される側のLambda

Lambda > 関数 > 関数の作成から呼び出される側のLambdaを作成します。
今回は名前をcalled_lambdaとしています。

image.png

Lambdaのソース(呼び出される側)

この関数(今回はcalled_lambda)が呼ばれた際には、以下のようにレスポンスを作成します。

lambda_function.py
import json

def lambda_handler(event, context):
    item1 = event.get('item1')
    item2 = event.get('item2')
    
    response = f'レスポンス:called_lambda関数に{item1}{item2} は正常に渡されました'
    
    return response

実行 & 結果確認

関数を呼び出す側のLambda(call_lambda)においてイベントJSONを設定後にテスト実行します。
結果を確認すると、呼び出される側のLambda(called_lambda)で設定した文言が返ってきている事が確認できました。

Response
"レスポンス:called_lambda関数にappleとbanana は正常に渡されました"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0