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" } } }
提示

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

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

如果您导出子工作流程执行结果,则分布式地图状态执行将按以下格式返回地图运行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策略。这些策略包括允许状态机角色调用分布式地图状态StartExecutionAPI操作所需的最低权限。这些策略还包括 Step Functions 访问 AWS 资源(例如 Amazon S3 存储桶和对象以及 Lambda 函数)所需的最低权限。我们强烈建议您在IAM策略中仅包含必要的权限。例如,如果您的工作流包含分布式模式下的 Map 状态,则将策略范围缩小到包含您的数据集的特定 Amazon S3 存储桶和文件夹。

重要

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

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

{ "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 权限。有关更多信息,请参阅 IAM AWS KMS key 加密的 Amazon S3 存储桶的权限