AWS Step Function中的lambda可以知道它所在步骤的名称吗?

时间:2017-05-11 23:27:44

标签: aws-lambda aws-step-functions

对于在step函数中执行的lambda,我有点期望我可以从lambda上下文中获取当前步骤的名称,但它似乎并不那么简单。

有没有办法获得在步骤函数中执行的lambda中当前步骤的名称?

4 个答案:

答案 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