对于在step函数中执行的lambda,我有点期望我可以从lambda上下文中获取当前步骤的名称,但它似乎并不那么简单。
有没有办法获得在步骤函数中执行的lambda中当前步骤的名称?
答案 0 :(得分:15)
看起来你是对的,目前的步骤并没有通过context
变量公开。
因此,允许您识别状态机当前所处的阶段的信息应该从上一步(即从前一个lambda)传递。这似乎是最正确的选择。
或者,作为解决方法,您可以尝试在调用lambda函数之前插入pass
状态,以传递可帮助您识别当前阶段的ID。
假设您的状态机中有两个步骤:
"Step1Test": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxx:function:step1test",
"Next": "Step2Test"
},
"Step2Test": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxx:function:step2test",
"End": true
}
以下是如何使用通过event.stepId
传递的当前步骤id为lambda函数提供的方法"Step1TestEnter": {
"Type": "Pass",
"Next": "Step1Test",
"Result": "Step1Test",
"ResultPath": "$.stepId"
},
"Step1Test": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxx:function:step1test",
"Next": "Step2TestEnter"
},
"Step2TestEnter": {
"Type": "Pass",
"Next": "Step2Test",
"Result": "Step2Test",
"ResultPath": "$.stepId"
},
"Step2Test": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxx:function:step2test",
"End": true
}
答案 1 :(得分:2)
基于 documentation,我使用 Parameters
和 $$
将 step 函数上下文对象传递到我的 lambda 函数中。为了测试并查看它是否有效,我想我可以转到 step function 控制台,开始新的执行并查看上下文对象被传递到“Step Input”选项卡上的 step 函数。令我沮丧的是,它没有显示在那里。我向 lambda 函数添加了一些诊断日志记录,将输入序列化为 JSON 并注销到 CloudWatch。 Cloudwatch 日志显示正在传入上下文对象。
无论如何,我想我会在这里发布这个,也许可以帮助别人避免我花时间试图解决这个问题。它被传入,只是没有显示在步进函数控制台中。
答案 2 :(得分:1)
在使用步进功能在步进功能配置中指定某种键时,我强烈建议。对于我的脚步功能,我总是提供:
"ResultPath": "$",
"Parameters": {
"source": "StepFunction",
"type": "LAMBDA_METHOD_SWITCH_VALUE",
"payload.$": "$"
},
并让每个对lambda的调用使用type
字段来确定要调用的代码。我发现这更容易实现。
答案 3 :(得分:1)
AWS Step Functions发布了Context Object,您可以在其中访问有关执行的信息。
您可以使用它将执行信息发送到lambda。
https://docs.aws.amazon.com/step-functions/latest/dg/input-output-contextobject.html