本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ResultWriter (地图)
管理状态和转换数据
Step Functions 最近添加了变量JSONata,用于管理状态和转换数据。
了解如何使用变量传递数据和使用转换数据JSONata。
该ResultWriter
字段是一个JSON对象,用于指定 Amazon S3 位置,Step Functions 将在该位置写入由分布式地图状态启动的子工作流程执行的结果。默认情况下,Step Functions 不会导出这些结果。
重要
确保您用于导出 Map Run 结果的 Amazon S3 存储桶 AWS 账户 与 AWS 区域 您的状态机相同。否则,您的状态机执行将因 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策略。这些策略包括允许状态机角色调用分布式地图状态的StartExecution
API操作所需的最低权限。这些策略还包括 Step Functions 访问 AWS 资源(例如 Amazon S3 存储桶和对象以及 Lambda 函数)所需的最低权限。我们强烈建议您在IAM策略中仅包含必要的权限。例如,如果您的工作流包含分布式模式下的 Map
状态,则将策略范围缩小到包含您的数据集的特定 Amazon S3 存储桶和文件夹。
重要
如果您在分布式地图状态输入中指定 Amazon S3 存储桶和对象(或前缀),以及指向现有键值对的参考路径,请务必更新工作流程的IAM策略。将策略范围缩小到运行时该路径解析到的存储桶和对象名称。
以下IAM策略示例授予使用操作将子工作流程执行结果写入 Amazon S3 存储桶csvJobs
中名为的文件夹所需的最低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) key,您必须在IAM策略中包含必要的 AWS KMS 权限。有关更多信息,请参阅 AWS KMS key 加密 Amazon S3 存储桶的 IAM 权限。