我正在构建一个启动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
}
}
}
如果我用硬编码对有效负载进行编码就可以了,但是(显然)硬编码不是目标。感谢您的任何帮助,谢谢。
答案 0 :(得分:1)
如果您未指定ResultPath
,则每个任务输出都会覆盖之前的输入。因此,假设启动实例返回{"instance_id": "xxx"}
,则可能的策略可能是:
"ResultPath": "$.launch_instance.output"
"ResultPath": "$.create_image.output"
"InputPath": "$.launch_instance.output"
现在您可以使用event["instance_id"]