疑難排解服務整 - AWS Step Functions

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

疑難排解服務整

我的工作已在下游服務中完成,但在「步驟函數」中,任務狀態仍為「進行中」或其完成延遲。

對於.sync服務整合模式,Step Functions 會使用EventBridge規則、下游 API 或兩者的組合來偵測下游工作狀態。對於某些服務,步驟函數不會建立要監視的EventBridge規則。例如,對於AWS Glue服務整合,而不是使用EventBridge規則,步驟函數會進行glue:GetJobRun呼叫。由於 API 呼叫的頻率,下游工作完成與「步驟函式」工作完成時間之間存在差異。Step Functions 需要 IAM 許可才能管理EventBridge規則並呼叫下游服務。如需執行角色權限不足會如何影響工作完成的詳細資訊,請參閱使用執行作業模式的 Job 的其他權限

我想從嵌套狀態機執行返回 JSON 輸出。

步驟函數有兩種步驟函數同步服務整合:startExecution.syncstartExecution.sync:2。兩者都等待嵌套狀態機完成,但它們返回不同的Output格式。您可以使startExecution.sync:2用在下返回 JSON 輸出Output

我無法從另一個帳戶叫用 Lambda 函數。

透過跨帳戶支援存取 Lambda 函數

如果您的區域中可以跨帳戶存取AWS資源,請使用下列方法從另一個帳戶叫用 Lambda 函數。

若要在工作流程中叫用跨帳號資源,請執行下列動作:

  1. 在包含資源的目標帳戶中建立 IAM 角色。此角色會授與包含狀態機器的來源帳戶存取目標帳戶資源的權限。

  2. Task州的定義中,指定狀態機器在叫用跨帳戶資源之前要採用的目標 IAM 角色。

  3. 修改目標 IAM 角色中的信任政策,以允許來源帳戶暫時擔任此角色。信任政策必須包含來源帳戶中定義之狀態機器的 Amazon 資源名稱 (ARN)。此外,請在目標 IAM 角色中定義適當的許可,以呼叫AWS資源。

  4. 更新來源帳戶的執行角色,以包含假設目標 IAM 角色所需的權限。

如需範例,請參閱 教學課程:存取跨帳戶 AWS 資源

注意

您可以將狀態機設定為擔任 IAM 角色,以便從多個存取資源AWS 帳戶。但是,狀態機器在給定時間只能承擔一個 IAM 角色。

如需指定跨帳號資源的Task狀態定義範例,請參閱作業狀態的證明資料欄位範例

存取 Lambda 函數,而不需要跨帳戶支援

如果您的區域無法跨帳戶存取AWS資源,請使用下列方法從其他帳戶叫用 Lambda 函數。

Task州/省的Resource字段中,使用arn:aws:states:::lambda:invoke並傳遞 FunctionArn in 參數。與狀態機器相關聯的 IAM 角色必須具有正確的許可才能叫用跨帳戶 Lambda 函數:lambda:invokeFunction

{ "StartAt":"CallLambda", "States":{ "CallLambda":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-west-2:123456789012:function:my-function" }, "End":true } } }

我無法看到從.waitForTaskToken州傳遞的任務令牌。

Task州/省的Parameters字段中,您必須傳遞任務令牌。例如,您可以使用類似下列程式碼的項目。

{ "StartAt":"taskToken", "States":{ "taskToken":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken", "Parameters":{ "FunctionName":"get-model-review-decision", "Payload":{ "token.$":"$$.Task.Token" }, }, "End":true } } }
注意

您可以嘗試使.waitForTaskToken用任何 API 動作。但是,某些 API 沒有任何合適的參數。