将多个输入传递到 AWS Step Function 中的 Map State

Pass multiple inputs into Map State in AWS Step Function

我正在尝试使用 AWS Step Functions 通过 Lambda 触发对非常大的 S3 文件的操作。为此,我调用了一个阶跃函数,其输入包含文件的 S3 键和该文件的字节范围(每个并行迭代将对文件的不同部分进行操作)。输入看起来像

    {
      "job-spec": {
        "file": "some_s3_key",
        "array": [
          "0-100",
          "101-200",
          "201-300", ...
        ]
      }
    }

我的 Step 函数非常简单,获取该输入并将其映射出来,但是我似乎无法同时将文件和数组作为我的 lambda 的输入。这是我的步进函数定义

    {
      "Comment": "An example of the Amazon States Language using a map state to process elements of an array with a max concurrency of 2.",
      "StartAt": "Map",
      "States": {
        "Map": {
          "Type": "Map",
          "ItemsPath": "$.job-spec",
          "ResultPath": "$.array",
          "MaxConcurrency": 2,
          "Next": "Final State",
          "Iterator": {
            "StartAt": "My Stage",
            "States": {
              "My Stage": {
                "Type": "Task",
                "Resource": "arn:aws:states:::lambda:invoke",
                "Parameters": {
                  "FunctionName": "arn:aws:lambda:us-east-1:<>:function:some-lambda:$LATEST",
                  "Payload": {
                    "Input.$": "$.array"
                  }
                },
                "End": true
              }
            }
          }
        },
        "Final State": {
          "Type": "Pass",
          "End": true
        }
      }
    }

如上所述,它抱怨说 job-spec 不是 ItemsPath 的数组。如果我将其更改为 $.job-spec.array,我会得到我在 lambda 中寻找的 array,但缺少 key。我尝试用 | 将两者连接在一起,但我在 Step Functions

中遇到了可以传递多少数据的限制

本质上我希望每个 python lambda 获取文件密钥,并从数组中获取一个条目

看起来 Parameters 值可以用于此,但我不太理解语法的正确性

终于能够正确地使用语法。

"ItemsPath": "$.job-spec.array",
"Parameters": {
  "byte_array.$": "$$.Map.Item.Value",
  "file.$": "$.job-spec.file"
},

似乎 Parameters 可用于为每个阶段创建自定义输入。 $$ 正在访问舞台的上下文,而不是实际的输入。似乎 ItemsPath 获取数组并将其放入稍后可以使用的上下文中。