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

时间:2019-03-27 16:53:07

标签: amazon-web-services aws-lambda aws-step-functions

我正在尝试从状态机将参数传递给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
    }

我希望状态机第二部分中的'Parameters'参数将解析来自第一lambda的输出,并且仅将第一部分(即“ A”)传递给第二lambda。但是事实并非如此。第二个lambda的输出是:

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

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

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

我一定在这里错过了一个把戏吗?如果有人知道这会对您有很大帮助?

p.s。我确信我可以处理并行化部分,只需解析参数,然后将其传递给我正在苦苦挣扎的下游函数即可。

1 个答案:

答案 0 :(得分:1)

第一个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"
}

是错字吗?