使用 Step AWS Lambda Functions 叫用 函數 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Step AWS Lambda Functions 叫用 函數

了解如何使用 Step Functions 同步或非同步叫用 Lambda 函數,做為事件驅動的無伺服器應用程式的一部分。

若要了解如何在 Step Functions 中整合 AWS 服務,請參閱 整合 服務將參數傳遞至 Step Functions API中的服務

Optimized 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 } } }

您可以在 ARN Resource 欄位中指定這些選項,以叫用特定的 Lambda 函數版本或別名。請參閱 Lambda 文件中的下列內容:

IAM 用於呼叫 的政策 AWS Lambda

下列範例範本顯示 如何根據您狀態機器定義中的資源 AWS Step Functions 產生IAM政策。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則探索 Step Functions 中的服務整合模式

AWS Step Functions 會根據您的狀態機器定義產生IAM政策。對於具有兩個呼叫 function1和 AWS Lambda 任務狀態的狀態機器function2,必須使用具有兩個函數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]]" ] } ] }