提问人:DBtake3 提问时间:8/11/2023 更新时间:8/11/2023 访问量:41
如何获取调用的 StepFunction 的别名(从 step 函数中)?
How to obtain the Alias of an invoked StepFunction (from within the step function)?
问:
我有一个别名的 Step Function(很高兴最近添加了该支持),其中 Step 函数逻辑需要知道别名,例如 Prod 或 Dev。我可以通过别名调用 step 函数,但上下文对象显示没有别名的 arn。
具体来说,我调用了 的 arn 和 context 对象包含;"arn:aws:states:us-west-2:************:stateMachine:UpdateLocation:Development"
{
"Execution": {
"Id": "arn:aws:states:us-west-2:**********:express:UpdateLocation:57154f70-22c4-440a-9b3a-cf8445bea4ff:33e2e32e-db05-48f1-abe5-ff2d7b6a5d44",
"Input": {
"here": "there"
},
"Name": "57154f70-22c4-440a-9b3a-cf8445bea4ff",
"RoleArn": "arn:aws:iam::**********:role/stepfunction-function-role",
"StartTime": "2023-08-10T18:19:36.028Z"
},
"StateMachine": {
"Id": "arn:aws:states:us-west-2:**********:stateMachine:UpdateLocation",
"Name": "UpdateLocation"
},
"State": {
"Name": "Pass (1)",
"EnteredTime": "2023-08-10T18:19:36.033Z"
}
}
最终,我从 API 网关调用一个 Step 函数(通过 POST),并使用以下 VTL 来调用 step 函数。
"input": "$util.escapeJavaScript($input.json('$'))",
"stateMachineArn": "arn:aws:states:us-west-2:**********:stateMachine:UpdateLocation:Development"
}
我以为我可以将 API Gateway 阶段添加到输入有效负载中,但我无法做到这一点。我正在尝试以下操作
#set ($newInput=$input.json('$'))
#set($newInput.Environment='Development')
"input": "$util.escapeJavaScript($newInput)",
"stateMachineArn": "arn:aws:states:us-west-2:*:stateMachine:UpdateLocation:Development"
}
但是我在这里有问题,因为当我通过 API Gateway 测试它时,它似乎忽略了我更新输入选项的尝试。它记录;
Thu Aug 10 18:28:47 UTC 2023 : Endpoint request body after transformations: {
"input": "{\"here\":\"there\"}",
"stateMachineArn": "arn:aws:states:us-west-2:**********:stateMachine:UpdateLocation:Development"
}
有没有人对如何获取别名或如何向输入对象添加新的键/值有任何建议?
谢谢!
答:
2赞
Eliot
8/11/2023
#1
状态机版本和别名当前在上下文对象中不可用。所以,你能想到的唯一选择是:
- 在执行本身中调用 DescribeExecution 以获取版本和/或别名 ARN
- 将版本和/或别名 ARN 作为输入传递给执行
评论
0赞
DBtake3
8/14/2023
感谢您的确认。考虑到您可以获取 Lambda 函数的别名,这似乎在 SFN 中实现别名支持时是一个相当大的遗漏。
评论