翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions で AWS Lambda 関数を呼び出す
Step Functions を使用して、イベント駆動型サーバーレスアプリケーションの一部として同期または非同期で Lambda 関数を呼び出す方法について説明します。
Step Functions は、 Amazon ステートメント言語 () から直接特定の AWS サービスを制御できますASL。詳細については、「他のサービスの統合」および「Step Functions APIのサービスへのパラメータの受け渡し」を参照してください。
最適化された Lambda 統合と Lambda AWS SDK 統合の違い
-
レスポンスの
Payload
フィールドは、エスケープされた Json から Json に解析されます。 -
レスポンスにフィールド
FunctionError
が含まれている場合、または Lambda 関数内で例外が発生した場合、タスクは失敗します。
状態の出入力および結果の管理については、Step Functions での入力と出力の処理 を参照してください。
サポートされている AWS Lambda APIs:
のパラメータStep Functionsは で表されます。 PascalCase
API アクション camelCaseなどのネイティブサービスAPIが にある場合でもstartSyncExecution
、 には PascalCaseなどのパラメータを指定しますStateMachineArn
。
以下には、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アクセス許可を設定する方法については、「」を参照してくださいStep Functions が統合サービスのIAMポリシーを生成する方法。