AWS Stepfunction & ApiGateway 动态路径(路径参数)

时间:2021-02-17 13:36:34

标签: amazon-web-services aws-api-gateway state-machine aws-step-functions

在我的 api 上,我有一个带有路径参数的路由:api.com/item/{id} 我无法直接从 stpefunction 生成路径。我尝试使用 intriseque 函数连接静态部分和动态部分,但出现此错误:Reference path didn't start with '$' 并且我没有找到任何参数以在文档中输入路径参数

{
  "Comment": "Stepfunction",
  "StartAt": "Generate random ID",
  "States": {
    "Generate random ID": {
      "Type": "Task",
      "Resource": "${GetRandomFunctionArn}",
      "ResultPath": "$",
      "Next": "Get item"
    },
    "Get item": {
      "Type": "Task",
      "Resource": "arn:aws:states:::apigateway:invoke",
      "Parameters": {
        "ApiEndpoint": "${APIBaseUrl}",
        "Method": "GET",
        "RequestBody": {},
        "AuthType": "NO_AUTH",
        "Stage": "${APIStage}",
        "Path": "States.Format(${EndpointProductAvailability}/{}, $.item_id)"
      },
      "End": "True"
    }
  }
}

stepfunctin 是 sam 应用程序的一部分。

如何使用一部分作为输入变量而其余部分由前一个任务生成的 api 调用?

1 个答案:

答案 0 :(得分:0)

你的路径应该是这样的:

根据此AWS Step Functions adds updates to ‘choice’ state, global access to context object, dynamic timeouts, result selection, and intrinsic functions to Amazon States Language

<块引用>

"Path.$": "States.Format('{}', $.item_id)"

以上对我有用。

{
  "Parameters": {
    "foo.$": "States.Format('Hello, {} {}', $.firstName, $.lastName)"
  }
}

因此,当您共享 URL 路径时,它类似于 api.com/item/{id}

<块引用>

"Path.$": "States.Format('item/{}', $.item_id)"

应该也可以。

我看到的另一个是这样的,Generate random ID 生成如下输出:

{
 "apipath": "item/",
 "item_id": "1213"
}
"Path.$": "States.Format($.apipath, $.item_id)"

Intrinsic functions