翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions を使用して AWS Lambda 関数を呼び出す
Step Functions を使用して、イベント駆動型サーバーレスアプリケーションの一部として同期的にまたは非同期的に Lambda 関数を呼び出す方法について説明します。
Step Functions での AWS サービスとの統合については、 サービスとの統合「」および「」を参照してくださいStep Functions でサービス API にパラメータを渡す。
最適化された Lambda 統合の主な機能
-
レスポンスの
Payload
フィールドは、エスケープされた Json から Json に解析されます。 -
レスポンスにフィールド
FunctionError
が含まれている場合、または Lambda 関数内で例外が発生した場合、タスクは失敗します。
状態の出入力および結果の管理については、Step Functions の入力および出力処理 を参照してください。
最適化された Lambda APIs
ワークフローの例
以下には、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 ドキュメントで以下を参照してください。
を呼び出すための IAM ポリシー AWS Lambda
次のサンプルテンプレートは、 がステートマシン定義のリソースに基づいて IAM ポリシー AWS Step Functions を生成する方法を示しています。詳細については、Step Functions が統合サービスの IAM ポリシーを生成する方法およびStep Functions でサービス統合パターンを検出するを参照してください。
AWS Step Functions は、ステートマシンの定義に基づいて IAM ポリシーを生成します。function1
と を呼び出す 2 つの AWS Lambda タスク状態を持つステートマシンの場合function2
、2 つの関数に対するlambda:Invoke
アクセス許可を持つポリシーを使用する必要があります。
以下の例ではこれを示しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:[[region]]
:[[accountId]]
:function:[[function1]]
",
"arn:aws:lambda:[[region]]
:[[accountId]]
:function:[[function2]]
"
]
}
]
}