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返回的数组取决于您将MaxKeys设置为的数字。

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

应该是。。。

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

最后,因为我只打算一次处理一个文件,所以我修改了代码以返回键遍历。文件

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

最新更新