AWS 状态机选择通配符
AWS State Machine Choice Wildcards
我正在遍历所有对象的 s3 存储桶。我需要处理前缀中任意位置具有 .json 扩展名的所有文件。例如;
- /x/
- /x/1.json
- /x/2.json
- /x/y/
- /x/y/1.json
- /x/y/2.json
- /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"
},
我正在遍历所有对象的 s3 存储桶。我需要处理前缀中任意位置具有 .json 扩展名的所有文件。例如;
- /x/
- /x/1.json
- /x/2.json
- /x/y/
- /x/y/1.json
- /x/y/2.json
- /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"
},