本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ResultWriter (地圖)
該ResultWriter
欄位是一個JSON物件,用於指定 Amazon S3 位置,Step Functions 會在其中寫入由分散式地圖狀態開始的子工作流程執行結果。依預設,Step Functions 不會匯出這些結果。
重要
確定您用來匯出地圖執行結果的 Amazon S3 儲存貯體是相同的 AWS 帳戶 以及 AWS 區域 作為你的狀態機。否則,您的狀態機執行將失敗並顯示States.ResultWriterFailed
錯誤。
如果您的輸出承載大小超過 256 KB,將結果匯出到 Amazon S3 儲存貯體會很有幫助。Step Functions 會合併所有子工作流程執行資料,例如執行輸入與輸出ARN,以及執行狀態。然後,它會將具有相同狀態的執行匯出到指定 Amazon S3 位置的個別檔案。下列範例顯示匯出子工作流程執行結果時ResultWriter
欄位的語法。在此範例中,您會將結果儲存在名為的前置字元amzn-s3-demo-destination-bucket
內名稱的值區中csvProcessJobs
。
{
"ResultWriter": {
"Resource": "arn:aws:states:::s3:putObject",
"Parameters": {
"Bucket": "amzn-s3-demo-destination-bucket
",
"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": "amzn-s3-demo-destination-bucket
",
"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 中繼資料,例如匯出位置、地圖執行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動作所需的最低權限。這些原則也包含存取所需的最低權限 Step Functions AWS 資源,例如 Amazon S3 儲存貯體和物件,以及 Lambda 函數。我們強烈建議您僅在IAM原則中加入必要的權限。例如,如果您的工作流程包含分散式模式的Map
狀態,請將您的政策範圍縮減到包含資料集的特定 Amazon S3 儲存貯體和資料夾。
重要
如果您指定 Amazon S3 儲存貯體和物件或前綴,其中包含指向分散式地圖狀態輸入中現有鍵值組的參考路徑,請確定您已更新工作流程的IAM政策。將政策範圍縮小到值區和路徑在執行時期解析為的物件名稱。
下列IAM原則範例授與將子工作流程執行結果寫入名為的資料夾所需的最低權限 csvJobs
在 Amazon S3 存儲桶中使用該PutObject
API操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-destination-bucket
/csvJobs
/*" ] } ] }
如果您要寫入子工作流程執行結果的 Amazon S3 儲存貯體使用 AWS Key Management Service (AWS KMS) 鍵,你必須包括必要的 AWS KMS 您的IAM政策中的權限。如需詳細資訊,請參閱IAM權限 AWS KMS key 加密 Amazon S3 存儲桶。