如何基于AWS 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}} /

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

解决方法

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

,

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

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

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