aws-lambda - AWS 步骤函数 - 嵌套映射类型

标签 aws-lambda aws-step-functions

我是 AWS 步骤函数的新手,我正在尝试嵌套多个 Map 类型的 Lambda 任务。不过,我的方法遇到了意想不到的行为。 get_item_list 输出要输入到 get_item_pages 映射中的项目列表。 get_item_pages Map 遍历 get_info。然后我想将 get_info 的每个输出传递给另一个 Map 类型 get_more_info。我使用 Map 函数的原因是我可以利用扇出功能。第一个 Map 类型 get_item_pages 按预期散开。在 Lambda CloudWatch 日志中,我可以看到 10 多个日志流开始。 get_more_info 状态似乎并没有以同样的方式散开。我经常在 Lambda CloudWatch 中看到嵌套 map 状态的单个日志流。

我是否在实现过程中遗漏了一些明显的东西,或者我是否以完全错误的方式进行了处理?

{
  "Comment": "A nested map example",
  "StartAt": "get_item_list",
  "States": {
    "get_item_list": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...",
      "Next": "get_item_pages",
      "ResultPath": "$.data"
    },
    "get_item_pages": {
      "Type": "Map",
      "ItemsPath": "$.data.all_items",
      "MaxConcurrency": 100,
      "Iterator": {
        "StartAt": "get_info",
        "States": {
          "get_info": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:...",
            "ResultPath": "$.data",
            "Next": "get_more_info"
          },
          "get_more_info": {
            "Type": "Map",
            "ItemsPath": "$.data.all_data",
            "MaxConcurrency": 100,
            "Iterator": {
              "StartAt": "get_detailed_info",
              "States": {
                "get_detailed_info": {
                  "Type": "Task",
                  "Resource": "arn:aws:lambda:...",
                  "End": true
                }
              }
            },
            "End": true
          }
        }
      },
      "End": true
    }
  }
}

最佳答案

这是一个老问题,但我想我会为其他人回答。我不能肯定地说,但您似乎正在经历这种情况,因为 "End": true (表示 map 已完成)应该处于任务级别,而不是 map 级别。将 "End": true 放在映射级别表示状态机结束。

确切的结果可能是不确定的,因为 AWS 不会确切地告诉您迭代将如何流经 map ,只是会根据您设置的并发数(即 100)来完成。即便如此,所有迭代 (最多 100 个)不能保证同时在 map 中移动。

因此,可能发生的情况是第一次迭代流经 get_more_info(嵌套)映射,然后触发“End”:true,从而结束整个状态机。

关于aws-lambda - AWS 步骤函数 - 嵌套映射类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60152112/

相关文章:

amazon-web-services - 如何简化 Step Functions 的复杂并行分支相互依赖关系

jsonpath - 如何使用jsonpath连接常量字符串

amazon-web-services - 如何使用 API 网关调用 AWS 步骤函数?

git - 如何在 Terraform 中使用 git 存储库作为 AWS Lambda 源?

aws-lambda - 如何将 Serverless 应用到现有的 Lambda

amazon-web-services - 如何在 CDK 中获取 lambda 函数的 ARN

android - 无法在 s3 中获取更新的对象?

amazon-web-services - 一次仅执行一项 Glue 作业/顺序执行 Glue 作业

json - AWS 步骤函数 : Transform a state array output to an object with keys

aws-lambda - AWS Step Function - 等到事件发生