本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
調用 AWS Lambda 具有 Step Functions 的功能
了解如何使用 Step Functions,以同步或非同步方式叫用 Lambda 函數,做為事件導向無伺服器應用程式的一部分。
若要瞭解如何整合 AWS 服務在 Step Functions 中,請參閱整合 服務和。將參數傳遞給 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
下面的示例模板顯示如何 AWS Step Functions 根據狀態機器定義中的資源產生IAM策略。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則 和 探索 Step Functions 中的服務整合模式。
AWS Step Functions 根據您的狀態機器定義產生IAM原則。對於具有兩個的狀態機 AWS Lambda 任務指出調用function2
,function1
並且必須使用具有這兩個函數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]]
"
]
}
]
}