CDK 将映射模板添加到 LambdaIntegration

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

我有一个 Lambda 函数,可以通过 api 网关访问。

如何让 CDK 添加映射模板,如下屏幕截图所示:

我尝试了多种变体:

....

const restApi = new apigateway.LambdaRestApi(this, "dyndns-api", {
  handler: dyndnsLambda,
  proxy: false,
  domainName: {
    domainName: siteDomain,
    certificate: certificate,
    endpointType: apigateway.EndpointType.REGIONAL
  }
});

const methodResponse: apigateway.MethodResponse = {
  statusCode: "200", 
  responseModels: {"application/json": apigateway.Model.EMPTY_MODEL}
}

const requestTemplate = {
  "execution_mode" : "$input.params('mode')",
  "source_ip" : "$context.identity.sourceIp",
  "set_hostname" : "$input.params('hostname')",
  "validation_hash" : "$input.params('hash')"
}

const dnydnsIntegration = new apigateway.LambdaIntegration(dyndnsLambda, {
  allowTestInvoke: true,
  passthroughBehavior: apigateway.PassthroughBehavior.WHEN_NO_TEMPLATES,
  requestTemplates: { "application/json": JSON.stringify(requestTemplate) },
});

restApi.root.addMethod("GET", dnydnsIntegration, {
  methodResponses: [methodResponse]
});

但是没有效果,它似乎没有像我预期的那样到达控制台。

amazon-web-services aws-api-gateway aws-cdk
2个回答
5
投票

这样解决: 需要向restApi添加代理设置,以便requestTemplate被接受。还需要集成响应。

const restApi = new apigateway.LambdaRestApi(this, "dyndns-api", {
  handler: dyndnsLambda,
  proxy: false,
  domainName: {
    securityPolicy: apigateway.SecurityPolicy.TLS_1_2,
    domainName: siteDomain,
    certificate: certificate,
    endpointType: apigateway.EndpointType.REGIONAL
  }
});

const methodResponse: apigateway.MethodResponse = {
  statusCode: "200", 
  responseModels: {"application/json": apigateway.Model.EMPTY_MODEL}
}

const integrationResponse: apigateway.IntegrationResponse = {
  statusCode: "200",
  contentHandling: apigateway.ContentHandling.CONVERT_TO_TEXT
}

const requestTemplate = {
  "execution_mode" : "$input.params('mode')",
  "source_ip" : "$context.identity.sourceIp",
  "set_hostname" : "$input.params('hostname')",
  "validation_hash" : "$input.params('hash')"
}

const dnydnsIntegration = new apigateway.LambdaIntegration(dyndnsLambda, {
  allowTestInvoke: true,
  proxy: false,
  integrationResponses: [integrationResponse],
  passthroughBehavior: apigateway.PassthroughBehavior.WHEN_NO_TEMPLATES,
  requestTemplates: { "application/json": JSON.stringify(requestTemplate) },
});

restApi.root.addMethod("GET", dnydnsIntegration, {
  methodResponses: [methodResponse]
});

0
投票

同上阿桑所问的。我们如何添加以

#
开头的 VTL 命令?

© www.soinside.com 2019 - 2024. All rights reserved.