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

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

ResultWriter (地图)

管理状态和转换数据

Step Functions 最近添加了变量JSONata,用于管理状态和转换数据。

了解如何使用变量传递数据使用转换数据JSONata

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

重要

确保您用于导出 Map Run 结果的 Amazon S3 存储桶 Amazon Web Services 账户 与 Amazon Web Services 区域 您的状态机相同。否则,您的状态机执行将因 States.ResultWriterFailed 错误而失败。

如果您的输出负载大小超过 256 KiB,则将结果导出到 Amazon S3 存储桶会很有帮助。Step Functions 整合了所有子工作流程执行数据,例如执行输入和输出以及执行状态。ARN然后,它将状态相同的执行导出到指定 Amazon S3 位置的相应文件中。

以下示例使用JSONPath显示了Parameters用于导出子工作流程执行结果的ResultWriter字段的语法。在此示例中,您将结果存储在名为 amzn-s3-demo-destination-bucket 存储桶种,该存储桶位于名为 csvProcessJobs 的前缀中。

{ "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "amzn-s3-demo-destination-bucket", "Prefix": "csvProcessJobs" } } }

对于JSONata州,Parameters将替换为Arguments

{ "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Arguments": { "Bucket": "amzn-s3-demo-destination-bucket", "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": "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 元数据,例如导出位置、Map Run ARN 以及有关结果文件的信息。

    如果你有 redrivenMap 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 KiB,则状态机执行失败并返回错误。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 访问 Amazon 资源(例如 Amazon S3 存储桶和对象以及 Lambda 函数)所需的最低权限。我们强烈建议您在IAM策略中仅包含必要的权限。例如,如果您的工作流包含分布式模式下的 Map 状态,则将策略范围缩小到包含您的数据集的特定 Amazon S3 存储桶和文件夹。

重要

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

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

{ "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 存储桶是使用加密的 Amazon Key Management Service (Amazon KMS) key,您必须在IAM策略中包含必要的 Amazon KMS 权限。有关更多信息,请参阅 Amazon KMS key 加密 Amazon S3 存储桶的 IAM 权限