如何将参数从 AWS 状态机/步骤函数传递到 AWS Lambda



我正在尝试将参数从状态机传递到aws python lambda中。我编写了以下函数:

{
  "Comment": "test lambda execution with state machine",
  "StartAt": "testPassInArgs",
  "States": {
    "testPassInArgs": {
      "Type": "Task",
      "Resource":"arn:aws:lambda:....function:testPassInArgs",
      "Next": "testRecieveArgs"
    },
    "testRecieveArgs": {
      "Type": "Task",
      "InputPath": "$.a",
      "Parameters": {
      "InputPath": "$.a"},
      "Resource": "arn:aws:lambda:....:function:testRecieveArgs",
      "End": true
    }
  }
}

以下是 lambda 函数testPassInArgs:

import json
def lambda_handler(event, context):        
    stations={}
    stations['a']='A'
    stations['b']='B'
    stations['c']='C'    
    return  {
        'a':stations['a'],
        'b':stations['b'],
        'c':stations['c']
    }

另一个lambda 'testRecieveArgs:

import json
def lambda_handler(event, context):
    # TODO implement
    out={}
    if type(event) == dict:
        for item in event:
            out[item+item] = event[item]+event[item]
            print(item)
            print(event[item])

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!'),
        'event': out
    }

我本以为状态机第二部分中的"参数"参数会解析第一个 lambda 的输出,并仅将第一部分(即"A"(传递给第二个 lambda。然而,事实并非如此。第二个 lambda 的输出为:

"InputPathInputPath": "$.a$.a"

第二个 lambda 的输入只是第一个 lambda 的输出。

我想解析第一个 lambda 的输出,并将每个部分并行发送到下游的不同 lambda。

我这里一定少了一招?如果有人知道这将是一个很大的帮助?

附言我相信我可以处理并行化部分,它只是解析参数,然后将它们传递给我正在努力的下游函数。

第一个 Lambda 函数的输出是

{
  "a": "A",
  "b": "B",
  "c": "C"
}

如果第二个任务定义是:

    "testRecieveArgs": {
      "Type": "Task",
      "InputPath": "$.a",
      "Resource": "arn:aws:lambda:....:function:testRecieveArgs",
      "End": true
    }

第二个 Lambda 将接收"A"作为其输入。但是,您添加了此内容

      "Parameters": {
        "InputPath": "$.a"
      },

到第二个任务定义,这将覆盖输入 JSON

{
  "InputPath": "$.a"
}

是错别字吗?

最新更新