本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
工作流程狀態
Task
狀態 ("Type": "Task"
) 代表狀態機器執行的一個工作單位。工作透過使用活動或 AWS Lambda 功能,通過與其他支持的集成 AWS 服務,或者通過調用第三方API,例如 Stripe。
Amazon 州語言代表任務,方法是將州的類型設定為,Task
並提供活動的 Amazon 資源名稱 (ARN)、Lambda 函數或第三方API端點。下列工作狀態定義會叫用名為
的 Lambda 函數。HelloFunction
"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 服務 用來執行工作,且可以是下列其中一個值: -
region
就是 AWS Step Functions 函數活動或狀態機器類型、Lambda 函數或任何其他所在的區域代碼 AWS 資源已建立。 -
account
就是 AWS 帳戶 您已在其中定義資源的 ID。 -
task_type
是要執行的任務類型。它可能是以下其中一個數值:-
activity
— 一項活動。 -
function
-一個 Lambda 函數。 -
— 支援的連線服務的名稱 (請參閱整合服務與 Step Functions)。servicename
-
-
name
是已註冊的資源名稱 (活動名稱、Lambda 函數名稱或服務API動作)。
注意
Step Functions 不支援ARNs跨分割區或區域的參考。例如,不aws-cn
能調用aws
分區中的任務,反之亦然。
下列各節會提供每個任務類型的詳細資訊。
活動
活動代表由您實作和託管並可執行特定任務的工作者 (程序或執行緒)。活動僅受到標準工作流程支援,不受快速工作流程支持。
活動Resource
ARNs使用以下語法。
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
欄位中指定服務和動作。
連接的服務Resource
ARNs使用以下語法。
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 中的資源。 -
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
態不能同時包含TimeoutSeconds
和TimeoutSecondsPath
。HTTP工作逾時最多有 60 秒,即使TimeoutSecondsPath
值超過該限制也是如此。 -
HeartbeatSeconds
(選用) -
決定活動 Worker 在執行任務期間傳送的活動訊號頻率。活動訊號表示工作仍在執行中,需要更多時間才能完成。活動訊號可防止活動或工作在持續時
TimeoutSeconds
間內逾時。HeartbeatSeconds
必須是小於欄位值的正非零整數TimeoutSeconds
值。預設值為99999999
。如果工作的活動訊號之間經過的時間超過指定秒數,則工作狀態會失敗並顯示錯誤。States.Timeout對於活動,計數會在
GetActivityTask
收到權杖時開始計數,並ActivityStarted
記錄在執行事件歷程記錄中。 -
HeartbeatSecondsPath
(選用) -
如果您想要使用參考路徑從狀態輸入動態提供活動訊號值,請使用
HeartbeatSecondsPath
。解析後,參考路徑必須選取值為正整數的欄位。注意
狀
Task
態不能同時包含HeartbeatSeconds
和HeartbeatSecondsPath
。
如果狀態結束執行,則 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)"
},
...
}
}
}