翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions で Lambda を呼び出す
Step Functions AWS は特定のサービスを Amazon ステートメント言語 (ASL) から直接制御できます。AWS Step Functions との協働および統合の詳細については、以下を参照してください。
Optimized Lambda 統合と Lambda AWS SDK 統合との違い
-
レスポンスの
Payload
フィールドは、エスケープされた Json から Json に解析されます。 -
FunctionError
レスポンスにフィールドが含まれているか、Lambda 関数内で例外が発生した場合、タスクは失敗します。
状態の出入力および結果の管理については、Step Functions の入出力処理 を参照してください。
サポートされている AWS Lambda API:
以下には、Lambda 関数を呼び出す Task
状態が含まれます。
{
"StartAt":"CallLambda",
"States":{
"CallLambda":{
"Type":"Task",
"Resource":"arn:aws:states:::lambda:invoke",
"Parameters":{
"FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:MyFunction
"
},
"End":true
}
}
}
以下には、コールバックサービス統合パターンを実行する Task
の状態が含まれます。
{
"StartAt":"GetManualReview",
"States":{
"GetManualReview":{
"Type":"Task",
"Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
"Parameters":{
"FunctionName":"arn:aws:lambda:us-east-1:123456789012:function:get-model-review-decision
",
"Payload":{
"model.$":"$.new_model",
"token.$":"$$.Task.Token"
},
"Qualifier":"prod-v1"
},
"End":true
}
}
}
Lambda 関数を呼び出すと、実行は関数の完了を待ちます。コールバックタスクで Lambda 関数を呼び出す場合、Lambda 関数の実行が完了して結果を返すまで、ハートビートタイムアウトのカウントは開始されません。Lambda 関数が実行されている限り、ハートビートタイムアウトは適用されません。
次の例のように、InvocationType
パラメータを使用して Lambda を非同期で呼び出すこともできます。
注記
Lambda 関数の非同期呼び出しでは、ハートビートタイムアウト期間がすぐに開始されます。
{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "Hello",
"States": {
"Hello": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:echo
",
"InvocationType": "Event"
},
"End": true
}
}
}
ときに Task
の結果が返されると、関数の出力はメタデータのディクショナリ内にネストされます。例:
{ "ExecutedVersion":"$LATEST", "Payload":"
FUNCTION OUTPUT
", "SdkHttpMetadata":{ "HttpHeaders":{ "Connection":"keep-alive", "Content-Length":"4", "Content-Type":"application/json", "Date":"Fri, 26 Mar 2021 07:42:02 GMT", "X-Amz-Executed-Version":"$LATEST", "x-amzn-Remapped-Content-Length":"0", "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010", "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0" }, "HttpStatusCode":200 }, "SdkResponseMetadata":{ "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3" }, "StatusCode":200 }
または、「リソース」フィールドに関数 ARN を直接指定して Lambda 関数を呼び出せます。この方法で Lambda 関数を呼び出す場合、.waitForTaskToken
を指定することはできず、タスク結果には関数の出力のみが含まれます。
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
",
"End": true
}
}
}
Lambda 関数の特定バージョンまたはエイリアスを呼び出すには、Resource
フィールドの ARN でそれらのオプションを指定します。Lambda ドキュメントで以下を参照してください。
他の AWS サービスで Step Functions を使用して IAM を設定する方法については、「統合サービスの IAM ポリシー」を参照してください。