工作流程狀態 - AWS Step Functions

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

工作流程狀態

Task 狀態 ("Type": "Task") 代表狀態機器執行的一個工作單位。工作透過使用活動或 AWS Lambda 功能,通過與其他支持的集成 AWS 服務,或者通過調用第三方API,例如 Stripe。

Amazon 州語言代表任務,方法是將州的類型設定為,Task並提供活動的 Amazon 資源名稱 (ARN)、Lambda 函數或第三方API端點。下列工作狀態定義會叫用名為HelloFunction的 Lambda 函數。

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

工作類型

「Step Functions」支援您可在「工作」狀態定義中指定的下列工作類型:

您可以在任務狀態定義的Resource欄位ARN中提供任務類型來指定任務類型。下列範例顯示Resource欄位的語法。除了調用第三方API的任務類型之外的所有任務類型都使用以下語法。如需有關「HTTP工作」語法的資訊,請參閱在 Step Functions 工作流程APIs中呼叫第三方

在 [工作] 狀態定義中,以下列語法取代斜體文字 AWS 資源特定資訊。

arn:partition:service:region:account:task_type:name

下列清單說明此語法中的個別元件:

  • partition就是 AWS Step Functions 分區使用,最常用的aws

  • service表示 AWS 服務 用來執行工作,且可以是下列其中一個值:

    • states對於一項活動

    • lambda對於一個 Lambda 函數。如果您與其他集成 AWS 服務例如,Amazon SNS 或 Amazon DynamoDB,使用sns或. dynamodb

  • region就是 AWS Step Functions 函數活動或狀態機器類型、Lambda 函數或任何其他所在的區域代碼 AWS 資源已建立。

  • account就是 AWS 帳戶 您已在其中定義資源的 ID。

  • task_type 是要執行的任務類型。它可能是以下其中一個數值:

  • name是已註冊的資源名稱 (活動名稱、Lambda 函數名稱或服務API動作)。

注意

Step Functions 不支援ARNs跨分割區或區域的參考。例如,不aws-cn能調用aws分區中的任務,反之亦然。

下列各節會提供每個任務類型的詳細資訊。

活動

活動代表由您實作和託管並可執行特定任務的工作者 (程序或執行緒)。活動僅受到標準工作流程支援,不受快速工作流程支持。

活動ResourceARNs使用以下語法。

arn:partition:states:region:account:activity:name
注意

在第一次使用 Step Functions 之前,您必須使用步驟函數 (使用CreateActivity、API動作或 Step Functions 主控台) 建立活動。

如需建立活動及實作工作者的詳細資訊,請參閱活動

Lambda 函數

使用 Lambda 工作執行函數 AWS Lambda。 若要指定 Lambda 函數,請使ARN用Resource欄位中的 Lambda 函數。

取決於集成的類型(優化集成AWS SDK集成)用於指定 Lambda 函數,Lambda 函數Resource字段的語法各不相同。

下列Resource欄位語法是與 Lambda 函數進行最佳化整合的範例。

"arn:aws:states:::lambda:invoke"

下列Resource欄位語法是 AWS SDK與 Lambda 函數整合。

"arn:aws:states:::aws-sdk:lambda:invoke"

下列Task狀態定義顯示與名為的 Lambda 函數進行最佳化整合的範例HelloWorld

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

Resource欄位中指定的 Lambda 函數完成後,其輸出會傳送至Next欄位 (」NextState「) 中識別的狀態。

一個支持 AWS 服務

當您參考連線的資源時,Step Fun API ctions 會直接呼叫支援服務的動作。在 Resource 欄位中指定服務和動作。

連接的服務ResourceARNs使用以下語法。

arn:partition:states:region:account:servicename:APIname
注意

若要建立與已連線資源的同步連線,.sync請附加至 APIname 中的項目ARN。如需詳細資訊,請參閱整合 服務

例如:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }

工作狀態欄位

除了常見狀態欄位以外,Task 狀態還有下列欄位。

Resource (必要)

AURI,尤其是唯ARN一標識要執行的特定任務。

Parameters (選用)

用於將資訊傳遞給已連線資源的API動作。這些參數可以混合使用靜態JSON和 JsonPath. 如需詳細資訊,請參閱將參數傳遞給 Step Functions 數API中的服務

Credentials (選用)

指定狀態機器的執行角色必須承擔的目標角色,然後再呼叫指Resource定的角色。或者,您也可以指定JSONPath值或內建函數,ARN在執行階段根據執行輸入解析為IAM角色。如果您指定一個JSONPath值,則必須在其前面加上$.符號。

如需在Task狀態中使用此欄位的範例,請參閱作業狀態的證明資料欄位範例。如需使用此欄位存取跨帳戶的範例 AWS 來自狀態機的資源,請參閱存取跨帳戶 AWS Step Functions 中的資源

注意

使用 Lambda 函數和受支援工作類型的欄位支援此欄位 AWS 服務

ResultPath (選用)

指定要將執行 Resource 中所指定任務的結果放置於何處 (在輸入中)。輸入會先依據 OutputPath 欄位 (如果有的話) 所指定篩選,而後做為狀態的輸出。如需詳細資訊,請參閱輸入和輸出處理

ResultSelector (選用)

傳遞鍵值對的集合,其中值是靜態的或從結果中選擇的。如需詳細資訊,請參閱ResultSelector

Retry (選用)

稱為 Retrier 的物件陣列,這類物件可定義狀態發生執行時間錯誤時的重試政策。如需詳細資訊,請參閱使用「重試」和使用 Catch 的狀態機示例

Catch (選用)

稱為 Catcher 的物件陣列,可定義後援狀態。如果狀態遇到執行時間錯誤並且其重試政策耗盡或未定義,則執行此狀態。如需詳細資訊,請參閱備用狀態

TimeoutSeconds (選用)

指定活動或工作在因States.Timeout錯誤而失敗而逾時之前可以執行的時間上限。逾時值必須是正的非零整數。預設值為 99999999

逾時計數會在工作啟LambdaFunctionStarted動後開始,例如,在執行事件歷程記錄中記錄ActivityStarted或事件時。對於活動,計數會在GetActivityTask收到權杖時開始計數,並ActivityStarted記錄在執行事件歷程記錄中。

當任務啟動時,Step Functions 會在指定的TimeoutSeconds持續時間內等待任務或活動 Worker 的成功或失敗回應。如果任務或活動 Worker 無法在此時間內回應,「Step Functions」會將工作流程執行標記為失敗。

注意

HTTP工作逾時最多有 60 秒,即使TimeoutSeconds超過該限制也是如此。請參閱與HTTP工作相關的配額

TimeoutSecondsPath (選用)

如果您想要使用參考路徑從狀態輸入動態提供逾時值,請使用TimeoutSecondsPath。解析後,參考路徑必須選取值為正整數的欄位。

注意

Task態不能同時包含TimeoutSecondsTimeoutSecondsPath。HTTP工作逾時最多有 60 秒,即使TimeoutSecondsPath值超過該限制也是如此。

HeartbeatSeconds (選用)

決定活動 Worker 在執行任務期間傳送的活動訊號頻率。活動訊號表示工作仍在執行中,需要更多時間才能完成。活動訊號可防止活動或工作在持續時TimeoutSeconds間內逾時。

HeartbeatSeconds必須是小於欄位值的正非零整數TimeoutSeconds值。預設值為 99999999。如果工作的活動訊號之間經過的時間超過指定秒數,則工作狀態會失敗並顯示錯誤。States.Timeout

對於活動,計數會在GetActivityTask收到權杖時開始計數,並ActivityStarted記錄在執行事件歷程記錄中。

HeartbeatSecondsPath (選用)

如果您想要使用參考路徑從狀態輸入動態提供活動訊號值,請使用HeartbeatSecondsPath。解析後,參考路徑必須選取值為正整數的欄位。

注意

Task態不能同時包含HeartbeatSecondsHeartbeatSecondsPath

如果狀態結束執行,則 Task 狀態必須將 End 欄位設定為 true,或必須在 Task 狀態完成時於 Next 欄位中提供執行的狀態。

工作狀態定義範例

下列範例顯示如何根據您的需求指定 Task 狀態定義。

工作狀態逾時和活動訊號間隔

這是針對長時間執行的活動設定逾時值和活動訊號間隔的最佳實務。這可以透過指定逾時值和活動訊號值,或透過動態設定來完成。

靜態逾時和活動訊號通知範例

HelloWorld 完成時,將會執行下一個狀態 (這裡稱為 NextState)。

如果這個任務無法在 300 秒內完成,或者未在 60 秒的間隔內傳送活動訊號通知,則任務會被標示為 failed

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

動態工作逾時和活動訊號通知範例

在這個例子中,當 AWS Glue 作業完成後,將執行下一個狀態。

如果此工作無法在動態設定的間隔內完成 AWS Glue 工作,任務被標記為failed

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }

作業狀態的證明資料欄位範例

指定硬式編碼角色 IAM ARN

下列範例會指定狀態機器的執行IAM角色必須假設的目標角色,才能存取名為Echo的跨帳戶 Lambda 函數。在此範例中,目標角色會指定ARN為硬式編碼值。

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo" }, "End": true } } }

指定JSONPath為IAM角色 ARN

下列範例會指定一個JSONPath值,這個值會ARN在執行階段解析為IAM角色。

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "$.roleArn" }, ... } } }

指定一個內在函數作為角色 IAM ARN

下列範例會使用States.Format內建函式,ARN在執行階段解析為IAM角色。

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)" }, ... } } }