You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS中使用迭代功能,通过Step Function遍历Python字典?

需求可行性结论

你的需求完全可以通过AWS Lambda配合Step Function实现,现有代码存在几处问题,修正后即可正常运行。

现有代码问题&修正方案

1. Lambda代码问题

  • 遍历字典时命中第一个匹配项就直接return,不会处理后续键值对,且insert分支错误返回字符串"action"而非"insert",会直接导致Choice分支匹配失败。
  • 多余的序列化/反序列化操作,直接返回对应字符串即可。

如果你单次仅需要处理一个动作(即objects_list每次仅含一个有效键值对),修正后代码如下:

import json

def lambda_handler(event, context):
    objects_list = getActionData(db_connection_dw)
    # 遍历取值返回有效动作
    for value in objects_list.values():
        if value in ("insert", "update", "delete"):
            return value
    # 兜底返回异常值,避免Choice无匹配报错
    return "unknown"

如果你需要处理字典内所有键值对,直接返回完整字典到Step Function,搭配Map状态遍历每个元素单独处理即可。

2. Step Function 定义问题

  • insert customer任务的InputPath设为空字符串,会截断所有输入参数,下游Lambda无法拿到业务数据,需改为你实际需要传递的参数路径。
  • Choice状态缺少Default兜底分支,当Lambda返回非预期值时会直接报错。

修正后的Step Function 配置参考:

"getAssociatedAction":{
        "Type": "Task",
        "Resource": "arn:aws:states:::lambda:invoke",
        "InputPath": "$.preprodResult",
        "ResultPath": "$.dwResult",
        "Next": "Insert update or delete"
      },
      "Insert update or delete":{
        "Type": "Choice",
        "Choices": [
          {
            "Variable": "$.dwResult.Payload",
            "StringEquals": "insert",
            "Next": "insert customer"
          },
          {
            "Variable": "$.dwResult.Payload",
            "StringEquals": "update",
            "Next": "update customer"
          },
          {
            "Variable": "$.dwResult.Payload",
            "StringEquals": "delete",
            "Next": "Delete customer"
          }
        ],
        "Default": "HandleUnknownAction"
      },
      "insert customer":{
        "Type": "Task",
        "Resource": "arn:aws:states:::lambda:invoke",
        "InputPath": "$.preprodResult",
        "ResultPath": "$.insertResult",
        "End": true
      },
      "HandleUnknownAction": {
        "Type": "Fail",
        "Error": "UnknownAction",
        "Cause": "返回的动作类型不在允许范围内"
      }

多元素遍历方案

如果你需要遍历字典内所有键值对逐个执行对应的增删改操作,调整方案如下:

  • Lambda直接返回完整的objects_list字典
  • Step Function中新增Map状态,将Lambda返回的字典转为数组后遍历,每个元素单独走Choice分支处理即可。

内容的提问来源于stack exchange,提问作者Lorena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:06:03