ResultWriter - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

ResultWriter

ResultWriter字段是一个 JSON 对象,用于指定 Step Functions 写入由分布式地图状态启动的子工作流程执行结果的 Amazon S3 位置。默认情况下,Step Functions 不导出这些结果。

重要

确保您用于导出 Map Run 结果的 Amazon S3 存储桶与您的状态机位于同一Amazon Web Services 账户和Amazon Web Services 区域下。否则,你的状态机执行将因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" } } }
提示

在 Workflow Studio 中,您可以通过选择将地图状态结果导出到 Amazon S3 来导出子工作流程执行结果。然后,提供要将结果导出到的 Amazon S3 存储桶的名称和前缀。

Step Functions 需要相应的权限才能访问要导出结果的存储桶和文件夹。有关所需的 IAM 策略的信息,请参阅适用于 ResultWriter 的 IAM 策略

如果您导出子工作流程执行结果,分布式地图状态执行将按以下格式返回 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 以及有关结果文件的信息。

  • 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" } }, ... ]

适用于 ResultWriter 的 IAM 策略

当您使用 Step Functions 控制台创建工作流程时,Step Functions 可以根据您的工作流程定义中的资源自动生成 IAM 策略。这些策略包括允许状态机角色调用 Distributed Map 状态StartExecution的 API 操作所需的最低权限。这些策略还包括访问Amazon资源(例如 Amazon S3 存储桶和对象以及 Lambda 函数)所需的最低权限。我们强烈建议您仅在 IAM 策略中包含必要的权限。例如,如果您的工作流程包含分布式模式下的Map状态,则将您的策略范围缩小到包含您的数据集的特定 Amazon S3 存储桶和文件夹。

重要

如果您在分布式地图状态输入中指定 Amazon S3 存储桶和对象或前缀以及指向现有键值对的引用路径,请确保更新工作流程的 IAM 策略。将策略范围缩小到运行时路径解析到的存储段和对象名称。

以下 IAM 策略示例授予使用 PutObject API 操作将子工作流程执行结果写入 Amazon S3 存储桶中名为 CSV Jobs 的文件夹所需的最低权限。

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

如果您正在向其写入子工作流程执行结果的 Amazon S3 存储桶使用Amazon Key Management Service(Amazon KMS)密钥加密,则必须在 IAM 策略中包含必要的Amazon KMS权限。有关更多信息,请参阅 Amazon KMS key加密的 Amazon S3 存储桶的 IAM 权限