AWS Step Function中的lambda是否可以知道启动它的Step函数的“执行名称”?

Gur*_*pof 5 aws-lambda aws-step-functions

我拥有有时可能会失败的步进功能,我想将此记录在(发电机)数据库中。方便的是,如果我可以创建一个新的错误处理步骤,而那个家伙只是从某个地方(在上下文中找不到它)拿起“执行名称”,并将其记录为失败。

那可能吗?

Ioa*_*kos 5

是的,可以,但是没有您希望的那样简单。

您正确地期望Lambda应该能够获得调用状态机的名称。Lambda在上下文对象中传递,该上下文对象返回有关调用方的信息。但是,当状态机调用您的Lambda时,该对象为null。这意味着两件事。您将不得不更加努力地获得所需的东西,并且将来可能会实现。

现在,我知道实现此目标的唯一方法是从另一个Lambda内部开始执行状态机,并在输入Json中传入名称。这是我的Java代码...

String executionName = //generate a unique name...

StartExecutionRequest startExecutionRequest = new StartExecutionRequest()
.withStateMachineArn(stateMachineArn)
.withInput(" {"executionName" : executionName} ") //make sure you escape the quotes
.withName(executionName);

StartExecutionResult startExecutionResult = sf.startExecution(startExecutionRequest);

String executionArn = startExecutionResult.getExecutionArn();
Run Code Online (Sandbox Code Playgroud)

如果这样做,您现在将在第一步输入JSON中具有执行名称。如果要在其他步骤中使用它,则应该将其传递。

您可能还需要执行ARN,以便可以在活动或任务中调用状态机方法。您可以使用executionName自己构造ARN。

阿尔恩:AWS:美国:美国东1:acountid:执行:statemachinenameexecutionName


小智 5

AWS Step Functions最近发布了一个称为上下文对象的功能。

使用Parameters块内的$$表示法,您可以访问有关执行的信息,包括执行名称,arn,状态机名称,arn等。

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


小智 5

您可以创建一个状态来提取所有其他状态可以访问的上下文详细信息,例如:

{
    "StartAt": "ExtractContextDetails",
    "States": {
      "ExtractContextDetails": {
        "Parameters": {
          "arn.$": "$$.Execution.Id"
        },
        "Type": "Pass",
        "ResultPath": "$.contextDetails",
        "Next": "NextStateName"
      }
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)