我是 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/