A.S*_*.S. 6 amazon-s3 amazon-web-services aws-lambda aws-step-functions
我有一个特定的工作流程,我想将 500 个 json 字符串的列表从 lambda 函数传递到步骤函数 ( stepFunction1
),然后迭代该步骤函数的映射状态中的列表。从那里,我想将列表中的每个项目传递给一个单独的步骤函数 ( stepFunction2
),在那里将完成额外的工作。
我的问题是,我的 500 个 json 字符串列表在传递到stepFunction1
. 我尝试将列表分成几个较小的部分,但这会导致多次调用stepFunction1
同时运行,而由于其他限制,我无法这样做。我的下一个想法是尝试将 json 字符串列表存储在 S3 存储桶上,从 访问它stepFunction1
,然后从那里迭代它。有什么办法可以实现这一点吗?是否可以从 AWS 状态机读取 S3 中的文件?我在这里有点困惑。
小智 11
您可以使用 GetObject S3 API。它可以读取存储在 S3 中的 JSON 文件作为状态输出的 Body 实体下的字符串,因此您可以在 ResultSelector 中使用内部函数将其转换为 JSON States.JsonToString
,例如"myJson.$": "States.StringToJson($.Body)"
。
代码示例可以是:
{
"StartAt": "GetObject",
"States": {
"GetObject": {
"Type": "Task",
"Parameters": {
"Bucket": "<YOUR S3 Bucket Name>",
"Key": "<YOUR JSON File Name>"
},
"Resource": "arn:aws:states:::aws-sdk:s3:getObject",
"End": true,
"ResultSelector": {
"myJson.$": "States.StringToJson($.Body)"
}
}
},
"Comment": "S3 -> JSON",
"TimeoutSeconds": 60
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案是将项目存储在 Amazon DynamoDB 表中并直接从 AWS Step Functions 访问它们。
以下是如何从 DynamoDB 检索项目的示例:
"Read Next Message from DynamoDB": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:getItem",
"Parameters": {
"TableName": "MyTable",
"Key": {
"MessageId": {"S.$": "$.List[0]"}
}
},
"ResultPath": "$.DynamoDB",
"Next": "Do something"
}
Run Code Online (Sandbox Code Playgroud)
您可以在文档中找到有关使用 Step Functions 调用 DynamoDB API的更多信息。
归档时间: |
|
查看次数: |
11170 次 |
最近记录: |