【问题标题】:How to set integration endpoint dynamically based on request header in AWS API Gateway?如何根据 AWS API Gateway 中的请求标头动态设置集成端点?
【发布时间】:2021-01-17 06:11:14
【问题描述】:

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

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

例如:

如果标头值为 brand-id: abc 那么请求应该被代理到 abc.test.com

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

我在“端点 URL”值中期待这样的内容: http://${stageVariables.${method.request.header.brand-id}}/

我们将不胜感激。

【问题讨论】:

  • 你弄明白了吗?我正在寻找类似的东西,也想避免使用 Lambda。
  • API 网关没有开箱即用的支持。我必须使用 lambda 代理函数。
  • 可能有点晚了,但也许请求参数映射会有所帮助。在控制台中转到集成 -> 管理集成。然后创建一个参数映射: - 要修改的参数:路径 - 修改类型:覆盖 - 值:类似于 http://${stageVariables.${method.request.header.brand-id}}/
  • @SatishGadhave 如果可以,请您提供您的解决方案或解决方法。谢谢你。这将有助于其他尝试这样做的人。
  • @RaviMCA 如上所述,我使用了 lambda 代理集成。我找到了基于 nodeJS 的代理代码。您可以在单独的文件(模块)中维护端点的映射。参考:stackoverflow.com/a/63602976/1197013

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


【解决方案1】:

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

【讨论】:

  • 我想避免 Lambda 的参与,只使用 API 网关。
【解决方案2】:

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

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

您可以使用 python 的适配器模式或字符串参数格式化来避免 if 和 else 条件的混乱。您也可以考虑通过RequestResponseinvoke 直接从您的代理 Lambda 调用 Lambda,这可能会为您节省一些由于 API Gateway 的额外层而导致的时间。

【讨论】:

  • 我想避免 Lambda 的参与,只使用 API 网关。
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 2021-07-29
  • 2020-05-08
  • 2019-09-18
  • 2019-07-09
  • 2022-08-18
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多