如何获取调用的 StepFunction 的别名(从步骤函数内)?

问题描述 投票:0回答:1

我有一个别名 Step Function(很高兴最近添加了该支持),其中 Step Function 逻辑需要知道别名,例如 Prod 或 Dev。我可以通过别名调用步骤函数,但上下文对象显示没有别名的 arn。 具体来说,我调用

"arn:aws:states:us-west-2:************:stateMachine:UpdateLocation:Development"
的 arn 并且上下文对象包含;

{
      "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 Gateway 调用 Step Function(通过 POST),并使用以下 VTL 来调用 Step Function。

    "input": "$util.escapeJavaScript($input.json('$'))",
    "stateMachineArn": "arn:aws:states:us-west-2:**********:stateMachine:UpdateLocation:Development"
}

我想我可以将 API 网关阶段添加到输入负载中,但我无法做到这一点。我正在尝试以下

    #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"
}

有人对如何获取别名或如何向输入对象添加新的键/值有任何建议吗?

谢谢!

velocity aws-step-functions
1个回答
0
投票

状态机版本和别名当前在上下文对象中不可用。所以,我能想到的你唯一的选择是:

  1. 在执行中调用DescribeExecution以获取版本和/或别名ARN
  2. 将版本和/或别名 ARN 作为输入传递给执行
© www.soinside.com 2019 - 2024. All rights reserved.