ResultWriter - AWS Step Functions

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

ResultWriter

ResultWriter欄位是 JSON 物件,用於指定 Amazon S3 位置,其中 Step Functions 會寫入由分散式地圖狀態開始的子工作流程執行結果。依預設,Step Functions 不會匯出這些結果。

重要

確保用於匯出 Map Run 結果的 Amazon S3 儲存貯體與您的狀態機器處於相AWS 區域同AWS 帳戶的狀態機器下。否則,您的狀態機執行將失敗並顯示States.ResultWriterFailed錯誤。

如果您的輸出承載大小超過 256 KB,將結果匯出到 Amazon S3 儲存貯體會很有幫助。Step Functions 會合併所有子工作流程執行資料,例如執行輸入與輸出、ARN 以及執行狀態。然後,它會將具有相同狀態的執行匯出到指定 Amazon S3 位置的個別檔案。下列範例顯示匯出子工作流程執行結果時ResultWriter欄位的語法。在此範例中,您會將結果儲存在名為的前置字元myOutputBucket內名稱的值區中csvProcessJobs

{ "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "myOutputBucket", "Prefix": "csvProcessJobs" } } }
提示

在工作流程 Studio 中,您可以選取將地圖狀態結果匯出至 Amazon S3,以匯出子工作流程執行結果。然後,提供您要將結果匯出到的 Amazon S3 儲存貯體的名稱和前置詞。

Step Functions 需要適當的權限,才能存取您要匯出結果的值區和資料夾。如需所需 IAM 政策的相關資訊,請參閱的 IAM 政策 ResultWriter

如果您匯出子工作流程執行結果,分散式地圖狀態執行會以下列格式傳回 Map Run ARN 和 Amazon S3 匯出位置的相關資料:

{ "MapRunArn": "arn:aws:states:us-east-2:123456789012:mapRun:csvProcess/Map:ad9b5f27-090b-3ac6-9beb-243cd77144a7", "ResultWriterDetails": { "Bucket": "myOutputBucket", "Key": "csvProcessJobs/ad9b5f27-090b-3ac6-9beb-243cd77144a7/manifest.json" } }

Step Functions 將具有相同狀態的執行導出到各自的文件中。例如,如果子工作流程執行導致 500 次成功和 200 個失敗結果,則 Step Functions 會在指定的 Amazon S3 位置建立兩個檔案,以取得成功和失敗結果。在此範例中,成功結果檔案包含 500 個成功結果,而失敗結果檔案則包含 200 個失敗結果。

對於指定的執行嘗試,Step Functions 會根據您的執行輸出,在指定的 Amazon S3 位置建立下列檔案:

  • manifest.json— 包含 Map Run 中繼資料,例如匯出位置、Map Run ARN 以及結果檔案的相關資訊。

    如果您redriven有 Map Run,則該manifest.json文件包含對 Map Run 的所有嘗試中所有成功的子工作流程執行的引用。但是,此檔案包含特定redrive失敗和擱置執行的參考。

  • SUCCEEDED_n.json— 包含所有成功子工作流程執行的合併資料。 n 表示檔案的索引號碼。索引編號從 0 開始。例如 SUCCEEDED_1.json

  • FAILED_n.json— 包含所有失敗、逾時和中止子工作流程執行的合併資料。使用此檔案從失敗的執行中復原。 n 表示文件的索引。索引編號從 0 開始。例如 FAILED_1.json

  • PENDING_n.json— 包含因 Map Run 失敗或中止而未啟動的所有子工作流程執行的合併資料。 n 表示文件的索引。索引編號從 0 開始。例如 PENDING_1.json

Step Functions 支援多達 5 GB 的個別結果檔案。如果檔案大小超過 5 GB,Step Functions 會建立另一個檔案來寫入剩餘的執行結果,並將索引號碼附加至檔案名稱。例如,如果Succeeded_0.json檔案的大小超過 5 GB,「Step Functions」會建立Succeeded_1.json檔案以記錄剩餘的結果。

如果您未指定匯出子工作流程執行結果,狀態機器執行會傳回子工作流程執行結果陣列,如下列範例所示:

注意

如果傳回的輸出大小超過 256 KB,則狀態機器執行失敗並傳回States.DataLimitExceeded錯誤。

[ { "statusCode": 200, "inputReceived": { "show_id": "s1", "release_year": "2020", "rating": "PG-13", "type": "Movie" } }, { "statusCode": 200, "inputReceived": { "show_id": "s2", "release_year": "2021", "rating": "TV-MA", "type": "TV Show" } }, ... ]

的 IAM 政策 ResultWriter

使用 Step Functions 主控台建立工作流程時,Step Functions 可以根據工作流程定義中的資源自動產生 IAM 政策。這些原則包括允許狀態機器角色呼叫分散式對應狀態的 StartExecution API 動作所需的最低權限。這些政策還包括存取AWS資源所需的最低權限 Step Functions,例如 Amazon S3 儲存貯體和物件以及 Lambda 函數。我們強烈建議您僅在 IAM 政策中加入必要的許可。例如,如果您的工作流程包含分散式模式的Map狀態,請將您的政策範圍縮減到包含資料集的特定 Amazon S3 儲存貯體和資料夾。

重要

如果您指定 Amazon S3 儲存貯體和物件或前置詞,其中包含分散式地圖狀態輸入中現有鍵值組的參考路徑,請確定您已更新工作流程的 IAM 政策。將政策範圍縮小到值區和路徑在執行時期解析為的物件名稱。

下列 IAM 政策範例授予使用 PutObject API 動作將子工作流程執行結果寫入 Amazon S3 儲存貯體中名為 CSVJobs 的資料夾所需的最低權限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::resultBucket/csvJobs/*" ] } ] }

如果您要寫入子工作流程執行結果的 Amazon S3 儲存貯體使用AWS Key Management Service(AWS KMS)金鑰加密,您必須在 IAM 政策中包含必要的AWS KMS許可。如需詳細資訊,請參閱 AWS KMS key 加密 Amazon S3 儲存貯體的 IAM 許可