如何基于AWS API Gateway中的请求标头动态设置集成端点?

时间:2020-10-01 13:48:13

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

我想根据请求中收到的请求标头将传入的请求代理到不同的端点。

在AWS API网关中,我可以将不同的端点设置为单独的阶段变量,但是在集成>>端点URL设置中,我想根据请求标头值的值来选择阶段变量。

例如:

如果标头值是brand-id:abc,则请求应代理到abc.test.com

如果标头值是brand-id:pqr,则请求应代理到pqr.test.com

我希望在“端点URL”值中有类似这样的内容: http:// $ {stageVariables。$ {method.request.header.brand-id}} /

任何帮助实现这一目标的方法将不胜感激。

2 个答案:

答案 0 :(得分:0)

AFAIK在API网关级别上是不可能的。选项是在lambda集成级别上进行映射。

答案 1 :(得分:0)

您可以使用Lambda代理集成来实现类似的行为:

  • 创建所需的API集。
  • 创建一个代理端点,它将所有内容传递给Lambda函数。
  • 在Lambda函数内部,根据标头决定调用相应的端点,并从获得的有效负载中传递所需的数据。
  • 直接从您调用的API返回响应。

您可以使用python的适配器模式或字符串参数格式来避免if和else条件的混乱。您还可以考虑通过RequestResponse调用直接从代理Lambda调用Lambda,这可以节省一些时间,这是由API网关的额外层引起的。