【问题标题】:how to pass an argument into an aws lambda from an aws state machine/step function如何将参数从 aws 状态机/步进函数传递到 aws lambda
【发布时间】:2019-08-18 08:08:18
【问题描述】:

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

我一定是在这里错过了一个技巧?如果有人知道这将是一个很大的帮助?

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

【问题讨论】:

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


    【解决方案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"
    }
    

    是不是打错字了?

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2017-12-30
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多