本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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]]
"
]
}
]
}