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

Fre*_*ert 11 aws-lambda aws-step-functions

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

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

xtx*_*xtx 15

看起来你是对的,当前步骤不会通过context变量暴露出来.

因此,允许您识别当前状态机状态的信息应该从上一步(即从前一个lambda)传递.这似乎是最正确的选择.

或者,作为一种变通方法,您可以pass在调用lambda函数之前尝试插入状态,以传递可帮助您识别当前阶段的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
}
Run Code Online (Sandbox Code Playgroud)

以下是如何使用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
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答!插入传递状态确实是我一直在做的事情,但由于我想普遍应用它(以便相同的 lambda 可以多次出现,但根据步骤使用不同的配置),它变得非常难看。我会给它一些时间,如果没有其他问题,我会将其标记为最佳答案。 (2认同)

小智 6

AWS Step Functions发布了Context Object,您可以在其中访问有关执行的信息。

您可以使用它将执行信息发送到lambda。

https://docs.aws.amazon.com/step-functions/latest/dg/input-output-contextobject.html

  • 这是否也包含在随事件发送到处理程序函数的“上下文”对象中?(即: def lambda_handler(event, context): )或者我是否必须在状态定义的“参数”部分中显式访问它? (2认同)