はじめに
StepfFunctionsのInvokeを知用し、LambdaA→LambdaBへとパラメータを渡す際に、Aの戻り値以外にも新たなパラメータを追加してLambdaBに渡したい事案が発生した。
その際にどうやるべきかを学んだのでここにまとめる。
ステートマシーン構成図
構成は以下の図の通り。
LambdaA(=Lambda Invoke)、LambdaB(=Lambda Invoke 2)として説明する
ソースコード
[Lambda Invoke]
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': 'Hello from Lambda!',
'count_list': [
{"count":"3"},
{"count":"21"},
{"count":"39"},
{"count":"40"},
{"count":"52"},
{"count":"60"}
]
}
[Lambda Invoke 2]
import json
def lambda_handler(event, context):
print(event)
実装方法
StepFunctionsの機能であるペイロードを設定する
StepFunctionsの設定のペイロードにて[Use state input as payload]を選択すると、前段の戻り値の値をそのままeventで引き継ぐ。しかし今回は新たに値を埋め込みたいので
① Lambda Invoke 2の設定で[Enter payload]を選択する。
② 以下の値を設定する。
{
"sampleKey1": "sampleValue1",
"StateInput.$": "$",
"key3": 100
}
固定値を追加で埋め込む場合は"sampleKey1": "sampleValue1”のようにKey:Valueで記述する。もちろん文字列だけでなく、数値も追加可能。
「StateInput.\$」はLambda Invoke 2がeventで受け取る時のKey名となる。またValueに「”$”」と記述することでLambda Invoke 1での戻り値がここに入る。
実行してログを確認
StepFunctionsを実行してログを確認してみた。
Lambda Invoke 2が受け取ったeventの中身は以下のようになった。
{
"sampleKey1": "sampleValue1",
"key3": 100,
"StateInput": {
"statusCode": 200,
"body": "Hello from Lambda!",
"count_list": [
{
"count": "3"
},
{
"count": "21"
},
{
"count": "39"
},
{
"count": "40"
},
{
"count": "52"
},
{
"count": "60"
}
]
}
}
埋め込んだ値、及び前段の戻り値を後続のLambdaのパラメータとして渡すことができた。