2016-07-28 31 views
2

如何创建API网关一个模拟的整合采取了要求:AWS API网关:使用模拟集成重定向

/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链接。

+0

API网关的超时时间不再是10秒,它已增加到29秒(停留在30秒的CloudFront超时) –

回答

1

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

编辑:使用lambda功能呼应

设置lambda函数呼应有效载荷解决方法。接着查询字符串映射到请求体像这样:

模板:

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

假设lambda函数回声相同的有效载荷后面,你将设置标头映射源中的集成响应为:

integration.response.body.q 
+0

我的方法请求和响应设置正确,但它是集成响应I'有麻烦用。正如您所建议的,我无法为标头使用静态值,因为我想根据请求查询字符串在标头中设置路径。 为了澄清我的问题,我可以在集成请求模板中设置一些变量并在集成响应头中访问它们吗? – Eric

+0

不幸的是,您目前无法直接将请求参数映射到响应参数。如果你没有使用MOCK集成,那么你可以通过后端回应查询字符串参数,然后将响应有效载荷的值映射到响应头来解决这个问题。我会将其添加到我们的待办事项中以直接探索映射。否则,如果您设置一个简单的Lambda函数来回显参数,则可以实现该功能。 –

+0

这个@JackKohn的任何更新? – anarnold