【问题标题】:AWS API Gateway: Use mock integration to redirectAWS API Gateway:使用模拟集成重定向
【发布时间】:2016-12-03 07:49:59
【问题描述】:

如何在 API Gateway 中创建模拟集成以接收请求:

/products/{product}/bigFile.zip?platform={platform}&version={version}

并以重定向响应:

http://xyz.cloudfront.net/{product}/{platform}/{version}.zip

我尝试更改请求和响应映射模板,但我不确定它们是如何连接的,因为关于模拟集成的 AWS 文档非常少。我可以更改 HTTP 状态代码,但无法根据查询参数填充 Location 标头。

更广泛的背景(如果我已经提交了 XY 问题)是我正在使用 AWS API Gateway 构建 API。其中一个 API 端点提供的大文件无法满足 API 网关 10 秒的响应时间限制,因此我想重定向到另一个 CDN 链接。

【问题讨论】:

  • API 网关的超时不再是 10 秒,而是增加到 29 秒(保持在 30 秒 CloudFront 超时以下)

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


【解决方案1】:

对于 MOCK 集成,请考虑将状态代码(例如 {"statusCode": 200})定义为后端的模拟状态代码的集成请求模板。除了这方面,其他组件是相同的。您必须为重定向 3xx 状态代码定义一个方法响应,并在响应中包含您要发送的任何标头。然后在集成响应页面上,您可以使用单引号将标头的值设置为静态值。所以这将是您使用任何重定向 URL 定义 Location 标头的地方,例如'https://other.endpoint.com'

编辑:使用 Lambda 函数回显的解决方法

设置 Lambda 函数以回显有效负载。接下来将查询字符串映射到请求正文,如下所示:

模板:

{
  "q": $input.params('foo')
}

假设 Lambda 函数回显相同的负载,您可以将集成响应中的标头映射源设置为:

integration.response.body.q

【讨论】:

  • 我的方法请求和响应设置正确,但我遇到了集成响应问题。我不能按照您的建议对标头使用静态值,因为我想根据请求查询字符串在标头中设置路径。为了澄清我的问题,我可以在集成请求模板中设置一些变量并在集成响应标头中访问它们吗?
  • 很遗憾,您目前无法将请求参数直接映射到响应参数。如果您没有使用 MOCK 集成,那么您可以通过后端回显查询字符串参数然后将响应负载中的值映射到响应标头来解决此问题。我将把它添加到我们的待办事项列表中以直接探索映射。否则,如果您设置一个简单的 Lambda 函数来回显参数,则可以实现该功能。
  • @JackKohn-AWS 我们还需要为此使用 lambda 解决方案吗?
  • 是的,但我认为我们很清楚如何通过 MOCK 集成以正确的方式支持这一点。不幸的是,仍然没有 ETA。
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 2021-08-05
  • 2017-02-08
  • 2018-12-25
相关资源
最近更新 更多