步骤函数将参数向下传递到lambda

时间:2019-08-05 22:44:11

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

我正在构建一个启动EC2实例的状态机。之后,我要操纵EC2实例,但为此,我需要新创建的EC2实例InstanceId,该实例ID在Lambda函数中返回。如何从我的第一个Lambda获取返回值并传递给以下Lambda函数?

我尝试过“ InputPath”,“ OutputPath”和“ ResultPath”,但每次尝试都取消Lambda函数。不知道为什么会这样(也许解决这个问题会解决我的问题)。

{
   "Comment": "My State Machine",
   "StartAt": "Launch Instance",
   "States": {
     "Launch Instance": {
     "Type": "Task",
     "Resource": "Lambda",
     "Parameters": {
      "FunctionName": "My lambda",
      "Payload": {
        "Input": {
           "ImageId": "My Image"
         }
       }
     },
     "Next": "wait_ten_seconds"
       },
       "wait_ten_seconds": {
     "Type": "Wait",
     "Seconds": 10,
     "Next": "Create Image"
   },
     "Create Image":{
       "Type": "Task",
       "Resource": "Lambda",
       "Parameters":{
       "FunctionName": "My Lambda"
     },
       "Next": "Terminate Instance"
     },
      "Terminate Instance": {
        "Type": "Task",
        "Resource": "Lambda",
        "Parameters": {
          "FunctionName": "My lambda"
        },
         "End": true
       }
     }
   }

如果我用硬编码对有效负载进行编码就可以了,但是(显然)硬编码不是目标。感谢您的任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果您未指定ResultPath,则每个任务输出都会覆盖之前的输入。因此,假设启动实例返回{"instance_id": "xxx"},则可能的策略可能是:

  1. 在Luanch实例中,"ResultPath": "$.launch_instance.output"
  2. 在“创建图像”中,"ResultPath": "$.create_image.output"
  3. 在终止实例中,"InputPath": "$.launch_instance.output"

现在您可以使用event["instance_id"]

获取值