4

我开始研究使用 AWS HTTP API 作为一些使用 ECS 运行的微服务的单一入口点。

一个微服务在服务器内部具有以下路由:

/sessions/{session_id}/topics

我在我的 HTTP API 中定义了完全相同的路由,并使用 CloudMap 和 VPC Link 来访问我的 ECS 集群。到目前为止一切顺利,请求可以到达服务器。然而,到达时的路径并不相同。根据 AWS 文档 [1],它将预先添加阶段名称,以便请求在到达时如下所示:

/{stage_name}/sessions/{session_id}/topics

所以我开始研究参数映射,以便我可以更改集成的路径,但我无法让它工作。

对于 requestParameters 我想覆盖下面的路径,但由于某种原因,带有阶段变量的原始路径仍然存在。如果我只是将 overwrite:path 定义为 $request.path.sessionId 我只会得到 ID 作为路径,或者如果我写任何我想要的字符串,它将在我定义它时到达。但是当我混合 $request.path.sessionId 和字符串的其他部分时,它似乎不起作用。

如何正确格式化?

paths:
  /sessions/{sessionId}/topics:
    post:
      responses:
        default:
          description: "Default response for POST /sessions/{sessionId}/topics"
      x-amazon-apigateway-integration:
        requestParameters:
          overwrite:path: "/sessions/$request.path.sessionId/topics"
        payloadFormatVersion: "1.0"
        connectionId: (removed)
        type: "http_proxy"
        httpMethod: "POST"
        uri: (removed)
        connectionType: "VPC_LINK"
        timeoutInMillis: 30000

[1] https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-private.html

4

1 回答 1

0

您可以尝试使用括号。形式符号代替速记符号。

覆盖:路径:“/sessions/${request.path.sessionId}/topics”

它对我来说适用于复杂的映射。

映射模板是用速度模板语言 (VTL) 表示的脚本

于 2021-07-21T16:56:08.720 回答