翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions を使用して AWS Lambda 関数を呼び出す
Step Functions を使用して、イベント駆動型サーバーレスアプリケーションの一部として同期的にまたは非同期的に Lambda 関数を呼び出す方法について説明します。
Step Functions での AWS サービスとの統合については、 サービスとの統合「」および「」を参照してくださいStep Functions でサービス API にパラメータを渡す。
最適化された Lambda 統合の主な機能
-
レスポンスの
Payloadフィールドは、エスケープされた Json から Json に解析されます。 -
Lambda 関数内で例外がスローされた場合、タスクは失敗します。実用的な例については、「Step Functions ステートマシンでのエラー条件の処理」を参照してください。一時的な Lambda サービスの例外を処理するには、「」を参照してくださいLambda サービスの一時的な例外の処理。
最適化された Lambda API
ワークフローの例
以下には、Lambda 関数を呼び出す Task 状態が含まれます。
{
"StartAt":"CallLambda",
"States":{
"CallLambda":{
"Type":"Task",
"Resource":"arn:aws:states:::lambda:invoke",
"Arguments":{
"FunctionName":"arn:aws:lambda:region:account-id:function:MyFunction"
},
"End":true
}
}
}
以下には、コールバックサービス統合パターンを実行する Task の状態が含まれます。
{
"StartAt":"GetManualReview",
"States":{
"GetManualReview":{
"Type":"Task",
"Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
"Arguments":{
"FunctionName":"arn:aws:lambda:region:account-id:function:get-model-review-decision",
"Payload":{
"model":"{% $states.input.my-model %}",
"TaskToken": "{% $states.context.Task.Token %}"
},
"Qualifier":"prod-v1"
},
"End":true
}
}
}
Lambda 関数を呼び出すと、実行は関数の完了を待ちます。コールバックタスクで Lambda 関数を呼び出す場合、Lambda 関数の実行が完了して結果を返すまで、ハートビートタイムアウトのカウントは開始されません。Lambda 関数が実行されている限り、ハートビートタイムアウトは適用されません。
ただし、次の例に示されているとおり、InvocationType パラメータを使って非同期で 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",
"Arguments": {
"FunctionName": "arn:aws:lambda:region:account-id:function:echo",
"InvocationType": "Event"
},
"End": true
}
}
}
注記
Lambda 関数の非同期呼び出しでは、ハートビートタイムアウト期間がすぐに開始されます。
ときに 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:region:account-id:function:HelloFunction",
"End": true
}
}
}
この形式の統合では、関数は成功しても、FunctionError フィールドを含むレスポンスを返すことがあります。このシナリオでは、ワークフロータスクは失敗します。Lambda エラーが Step Functions にどのように伝達されるかの詳細については、「」を参照してくださいStep Functions ワークフローでのエラー処理。
Lambda 関数の特定バージョンまたはエイリアスを呼び出すには、Resource フィールドの ARN でそれらのオプションを指定します。Lambda ドキュメントで以下を参照してください。
を呼び出すための IAM ポリシー AWS Lambda
次のサンプルテンプレートは、 がステートマシン定義のリソースに基づいて IAM ポリシー AWS Step Functions を生成する方法を示しています。詳細については、「Step Functions が統合サービスの IAM ポリシーを生成する方法」および「Step Functions でサービス統合パターンを検出する」を参照してください。
次の例では、2 つの AWS Lambda タスクを持つステートマシンが function1と を呼び出すとfunction2、自動生成されたポリシーには両方の関数に対するlambda:Invokeアクセス許可が含まれます。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:myFn1", "arn:aws:lambda:us-east-1:123456789012:function:myFn2" ] } ] }
注記
Qualifier パラメータを使用するか、 で関数のバージョンまたはエイリアスを指定する場合はFunctionName、IAM ポリシーリソース ARN に 修飾子を含める必要があります。を使用して:*、任意のバージョンまたはエイリアスを許可します。
"arn:aws:lambda:us-east-1:123456789012:function:myFn1:*"非修飾 ARN (:*サフィックスなし) は、特定のバージョンまたはエイリアスを呼び出すアクセス許可を付与せず、呼び出しはアクセス拒否エラーで失敗します。