是否可以使用 AWS API Gateway HttpIntegration 的 Apache VTL 映射将编码的查询参数转换为路径?

Is it possible to convert an encoded query param to path using a Apache VTL mapping for AWS API Gateway HttpIntegration?

提问人:pac 提问时间:11/15/2023 最后编辑:pac 更新时间:11/15/2023 访问量:47

问:

我需要将一些呼叫从前端代理到后端,但我无法更改它们的实际行为。

下面是一个示例来说明我试图实现的目标:

客户端调用:应重定向到:
https://myApiGateway/myProxy?whereTo=%2Ffoo%2Fv2%2Fbar%3Fbaz%3D1https://partner.com/foo/v2/bar?baz=1

我的第一个想法是将 lambda 集成附加到 API Gateway 终端节点,然后我可以轻松地解码并发送请求,但是:

  1. 我无法让它工作(高延迟,由于某种原因,请求未被合作伙伴摄取)
  2. 我宁愿不必使用 Lambda(额外的延迟、维护、成本等)

因此,在浏览 AWS 文档时,我认为可以使用 API Gateway HttpIntegration 功能。特别是,我找到了一些关于使用 Apache VTL 语言进行模板映射的信息。

有可能真正实现这一点吗?

有什么想法吗?

API Gateway 代理架构

在 AWS 控制台上,我找不到如何创建映射并将其链接到 Integration request > URL 路径参数。只提出了基本映射,没有 VTL 脚本?集成请求> URL 路径参数

最终,我想在 Typescript CDK 中执行此操作,这就是我所在的位置:

const proxyPartnerResource = restApi.root.addResource("myProxy", {
    defaultCorsPreflightOptions: {
        allowMethods: ["POST", "OPTIONS"],
    allowOrigins: apigw.Cors.ALL_ORIGINS,
    },
});

const integration = new apigw.HttpIntegration('https://partner.com', {
    httpMethod: 'POST',
    options: {
        requestTemplates: {
        'application/json': `{
            "path": "$util.urlDecode($input.params('whereTo'))"
        }`
    },
    },
});

proxyPartnerResource.addMethod('POST', integration, {
    requestModels: {
    'application/json': new apigw.Model(this, 'RequestModel', {
        restApi: restApi,
            schema: {},
    }),
    },
});
代理 aws-api-gateway vtl

评论


答: 暂无答案