如何通过云开发工具包 (CDK) 在 API 网关上为 "Integration Request" 定义 "URL Query String Parameters"

How to define "URL Query String Parameters" for "Integration Request" on API Gateway via Cloud Development Kit (CDK)

我在查找有关如何通过云开发工具包 (CDK) 在 API 网关上为“集成请求”创建“URL 查询字符串参数”的示例时遇到问题。我找到的大多数示例都是针对 lambda(我不需要这个)而不是 REST(我需要这个)的,甚至那些也没有涵盖集成请求。

我正在通过 aws-apigateway.SpecRestAPI 创建 api 定义。

const api = new apiGateway.SpecRestApi(this, 'my-api', {
      apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition),

我什至不确定我是否将集成绑定到 API。

如何将集成绑定到 API 以及如何像通过 GUI 一样映射集成请求?

我试过导出手动配置的 API 网关,但它不包含有关在何处执行转换的任何信息。

让我知道是否需要添加更多信息,提前致谢!

如果使用 ApiDefinition.fromInline,则请求映射进入 OpenAPI 文件。参见 https://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html and https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions-integration-requestParameters.html

“requestParameters”位于 x-amazon-apigateway-integration 节点下。如果您不知道如何获得 OpenAPI 规范,请创建 API 并像通常那样进行集成,然后通过 https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/

导出文件

另外,为了将集成映射到另一个 AWS 服务(在我的例子中是 SNS),我在实例化集成时没有指定 API 对象。下面是一个工作示例。

const api = new apiGateway.SpecRestApi(this, 'my-api', {
      apiDefinition: apiGateway.ApiDefinition.fromInline(openApiDefinition)
)

const snsIntegration = new apiGateway.AwsIntegration(
  api,
  {
    proxy: false,
    service: "sns",
    action: "PutItem",
  }
);

此外,如果您 运行 遇到“指定的映射表达式参数无效”的问题,请确保您在方法请求和集成请求中都定义了参数。

OpenAPI 文件的超级精简版如下:

paths:
  /v1/contact:
    post:
      parameters:
        - name: "TopicArn"
          in: "query"
          required: true
          schema:
            type: "string"
      x-amazon-apigateway-integration:
        requestParameters : {
          integration.request.querystring.TopicArn : "method.request.header.TopicArn",
          integration.request.querystring.Message : "method.request.body",
        }