有没有办法从 AWS Step Function 读取 S3 文件的内容?

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)


Den*_*aub 0

一种解决方案是将项目存储在 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的更多信息。