AWS 状态机选择通配符

AWS State Machine Choice Wildcards

我正在遍历所有对象的 s3 存储桶。我需要处理前缀中任意位置具有 .json 扩展名的所有文件。例如;

  1. /x/
  2. /x/1.json
  3. /x/2.json
  4. /x/y/
  5. /x/y/1.json
  6. /x/y/2.json
  7. /x/y/z/

我试图在我的状态机选择中使用通配符,以便仅在下一个任务是 json 文件时才转到下一个任务进行处理。如果没有,我想移动到下一个迭代,直到我得到一个 json 文件。下面是我在状态机中的“选择”。当 step 函数运行时,它在 TraversalChoice 上变灰,所以我只能想象我在定义通配符时做错了什么。如果有人能指出正确的方向,我将不胜感激。谢谢!

 "Traversal": {
              "Type": "Task",
              "Resource": "arn for lambda that get objects",
              "Parameters": {
                "NextContinuationToken.$": "$.traversal.NextContinuationToken"
              },
              "ResultPath": "$.traversal",
              "Next": "TraversalChoice"
            },
            "TraversalChoice": {
              "Type": "Choice",
              "Choices": [{
                "Not": {
                  "Variable": "$.traversal.Files.Key",
                  "StringMatches": "x/*.json"
                },
                "Next": "Traversal"
              }],
              "Default": "lambdaToProcess"
            },

这里的上下文是检索所有对象的代码。

 let params = {
        Bucket: bucket,
        MaxKeys: 1,
        ContinuationToken: event.NextContinuationToken || null
    };

if (prefix) params.Prefix = prefix;
try {

    let response = await s3.listObjectsV2(params).promise();

    return {
        Files: response.Contents,
        NextContinuationToken: response.NextContinuationToken || ""
    }

你能提供更多关于执行历史的信息吗?在执行历史中,您是否能够为 Choice 状态提供输入?也许存储在那里的值与预期的形式不完全匹配。

我明白了。这对我来说是一个愚蠢的错误。问题是 Files return 根据您将 MaxKeys 设置的数字设置一个数组。

"Variable": "$.traversal.Files.Key"

应该是...

"Variable": "$.traversal.Files[0].Key"

最后,因为我一次只打算处理一个文件,所以我将代码更改为 return 密钥 traversal.File。

 "TraversalChoice": {
              "Type": "Choice",
              "Choices": [{
                "Not": {
                  "Variable": "$.traversal.File",
                  "StringMatches": "*.json"
                },
                "Next": "Traversal"
              }],
              "Default": "lambdaToProcess"
            },