本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 許可。