使用 Step Functions 新增 EventBridge 事件 - AWS Step Functions

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

使用 Step Functions 新增 EventBridge 事件

Step Functions 提供與 API Amazon 整合的服務整合 EventBridge。了解如何直接從 Step Functions 工作流程傳送自訂事件,以建置事件驅動的應用程式。

若要了解如何在 Step Functions 中整合 AWS 服務,請參閱 整合 服務將參數傳遞至 Step Functions API中的服務

Optimized EventBridge 整合的主要功能
  • 執行ARN和狀態機器ARN會自動附加到每個 Resources的欄位PutEventsRequestEntry

  • 如果 的回應PutEvents包含非零,FailedEntryCountTask 狀態會失敗,並顯示錯誤 EventBridge.FailedEntry

若要使用 PutEvents API,您需要在帳戶中建立符合您將傳送之事件特定模式的 EventBridge 規則。例如,您可以:

  • 在您的帳戶中建立 Lambda 函數,該函數會接收並列印符合 EventBridge 規則的事件。

  • 在預設事件匯流排上在您的 帳戶中建立規則,該 EventBridge 匯流排符合特定事件模式並鎖定 Lambda 函數。

如需詳細資訊,請參閱:

下列包含傳送自訂事件Task的 :

{ "Type": "Task", "Resource": "arn:aws:states:::events:putEvents", "Parameters": { "Entries": [ { "Detail": { "Message": "MyMessage" }, "DetailType": "MyDetailType", "EventBusName": "MyEventBus", "Source": "my.source" } ] }, "End": true }
注意

Step Functions 中任務的最大輸入或結果資料大小有配額。當您向另一個 服務傳送或接收資料時,這會限制您將 256 KiB 的資料做為 UTF-8 編碼字串。請參閱 狀態機器執行的相關配額

支援的 EventBridge API

支援的 EventBridge API 和 語法包括:

錯誤處理

PutEvents API 接受項目陣列做為輸入,然後傳回結果項目陣列。只要PutEvents動作成功, PutEvents就會傳回 HTTP 200 個回應,即使一或多個項目失敗。 會PutEvents傳回 FailedEntryCount 欄位中失敗的項目數。

Step Functions 會檢查 FailedEntryCount 是否大於零。如果大於零,Step Functions 會失敗狀態並顯示錯誤 EventBridge.FailedEntry。這可讓您在任務狀態上使用 Step Functions 的內建錯誤處理,以便在項目失敗時擷取或重試,而不需要使用其他狀態FailedEntryCount來分析回應中的 。

注意

如果您已實作等冪,並可以安全地對所有項目重試,您可以使用 Step Functions 的重試邏輯。Step Functions 不會在重試之前從PutEvents輸入陣列移除成功的項目。反之,它會重試原始項目陣列。

IAM 用於呼叫 的政策 EventBridge

下列範例範本顯示 如何根據您狀態機器定義中的資源 AWS Step Functions 產生IAM政策。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則探索 Step Functions 中的服務整合模式

PutEvents

靜態資源

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:event-bus/stepfunctions-sampleproject-eventbus" ], "Effect": "Allow" } ] }

動態資源

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": "arn:aws:events:*:*:event-bus/*" } ] }