Lambda関数からLambda関数を呼びだしてみたので手順をまとめました。
Lambda
呼ぶLmabda(yobu)と呼ばれるLambda(yobareru)を作成します。
呼ぶLmabda(yobu)
呼ばれるLambda(yobareru)に引数を2つ渡します。
Lambda yobu
import boto3
import json
def lambda_handler(event, context):
print('Start Lambda [yobu]')
# 呼び出す関数に渡すペイロード
argslist = {
'args1': 1,
'args2': 2
}
payload = json.dumps(argslist)
# 別の Lambda 関数を呼び出す
response = boto3.client('lambda').invoke(
FunctionName='yobareru',
InvocationType='RequestResponse',
Payload=payload
)
# 応答データを取得
body = json.loads(response['Payload'].read())
print('Response from yobareru:', body)
print('Stop Lambda [yobu]')
呼ばれるLambda(yobareru)
呼ぶLmabda(yobu)から渡された引数を足し合わせて戻り値として返します。
Lambda [yobareru]
import json
def lambda_handler(event, context):
print('Start Lambda [yobareru]')
# event は yobu から渡された JSON データ
args1 = event['args1'] # event のキー 'args1' を取得
args2 = event['args2'] # event のキー 'args2' を取得
response = args1 + args2 # 引数の合計を計算
print('Stop Lambda [yobareru]')
return {
'statusCode': 200,
'body': response # 合計値を返却
}
IAM
lambda:InvokeFunctionアクションを実行できるポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "*"
}
]
}
呼ぶLmabda(yobu)に紐付いているロールに作成したポリシーをアタッチします。
実行
呼ぶLmabda(yobu)を実行します。
実行結果として、ステータスコード200
と引数を足し合わせた戻り値(今回は)3
が表示されていれば成功です。
Start Lambda [yobu]
{'statusCode': 200, 'body': 3}
Stop Lambda [yobu]
[Tips] 非同期処理
呼ばれるLambda(yobareru)を非同期処理で実行する場合はInvocationType
を変更します。
Lambda yobu
# 別の Lambda 関数を呼び出す
response = boto3.client('lambda').invoke(
FunctionName='yobareru',
# InvocationType='RequestResponse', # 同期処理
InvocationType='Event', # 非同期処理
Payload=payload
)
今回はここまでです。