amazon-web-services - AWS API 网关 - 使用 HTTP API 的参数映射路径(覆盖 :path)

标签 amazon-web-services aws-api-gateway aws-http-api

我开始考虑使用 AWS HTTP API 作为一些与 ECS 一起运行的微服务的单一入口点。
一个微服务在服务器内部有如下路由:

/sessions/{session_id}/topics
我在 HTTP API 中定义了完全相同的路由,并使用 CloudMap 和 VPC 链接到达我的 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

最佳答案

您可以尝试使用括号。正式符号而不是速记符号。
覆盖:路径:“/sessions/${request.path.sessionId}/topics”
对于复杂的映射,它对我来说效果很好。
映射模板是用速度模板语言 (VTL) 表示的脚本

关于amazon-web-services - AWS API 网关 - 使用 HTTP API 的参数映射路径(覆盖 :path),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65619664/

相关文章:

postgresql - 从查询更新 Redshift 表

amazon-web-services - Amazon Beanstalk 上 is_leader 标志的确切行为是什么?

amazon-web-services - 使用 Python 为 AWS API Gateway 发出签名的 IAM AUTH 请求

amazon-web-services - AWS SAM - 具有 Lambda 函数集成的 HttpApi 的简单示例

aws-lambda - 本地启动 API 时未设置 AWS SAM APIGatewayProxyRequestEvent HttpMethod

aws-lambda - HTTPApi + 无服务器框架 + API 网关 CORS 不工作

amazon-web-services - 更改 AWS 自定义资源的默认超时

php - Amazon Linux 上的多个 PHP-FPM 版本加载相同的配置

aws-lambda - AWS SAM/Cloudformation "Malformed integration at path' 错误

amazon-web-services - 从 AWS ApiGateway 重定向到公共(public) ELB