连接 AWS Api Gateway 和私有 ALB
Posted
技术标签:
【中文标题】连接 AWS Api Gateway 和私有 ALB【英文标题】:Connecting AWS Api Gateway and private ALB 【发布时间】:2018-11-19 19:25:30 【问题描述】:我的任务是配置 API Gateway 以将流量路由到 Lambda 或负载均衡器(内部,在 VPC 下)。我认为可以使用简单的 HTTP 集成或 AWS 服务为 ALB 创建简单的集成。但经过一段时间的谷歌搜索后,我发现只有一种解决方案——配置 NLB,然后使用VPC_Link integration。在这种情况下,一切看起来都正常。
但我还是发现了一些像 this one 这样的文章,人们在其中描述了如何在没有 VPC_links 的情况下集成 Api Gateway 和 LB。在我的情况下,将我的内部 ALB 与我的 apigateway 集成时,我总是看到 invalid endpoint address
错误。我想这仅适用于公共资源(面向互联网的 LB)?
问题的第二部分。当我配置 VPC_link 时,我仍然需要为证书检查和其他东西提供一些集成端点。但看起来这个端点仍然必须是可公开访问的?问题是我在 ALB 下的服务有多个端点,我需要在这个 Endpoint URL
中提供到这个端点的路径,并且这个端点应该是公共的,正如我现在看到的那样。因此,出于测试原因,我提供了我们需要执行的公共资源的 url 和端点路径。这可行,但对我来说看起来太丑了。可能有什么漂亮的解决方案。
【问题讨论】:
您可以从 API Gateway 调用 Lambda,后者又可以调用内部 VPC 资源(需要一些额外配置)。 @aleksei-bulgak 你找到解决办法了吗? 嗨@gis_wild。很不幸的是,不行。结果,我创建了 NLB 并将其连接到同一个自动缩放组。但是我听说现在 AWS 提供了在私有 VPC 中创建 API 网关的能力,所以他们可能也提供了连接到私有 ALB 的能力 “所以可能它们也提供连接到私有 ALB 的能力”,遗憾的是它们没有 【参考方案1】:标记为正确的答案已过时。现在可以使用 VPC 链接通过 HTTP 私有集成将 API 网关与面向内部的 ALB 集成。 请参阅https://***.com/a/67413951/2948212 了解分步配置。
【讨论】:
接受的评论中究竟有什么过时的?对于 REST API,APIGW 和 ALB 之间仍然无法直接集成。是的,它应该适用于 HTTP API,官方文档中对此进行了概述:docs.aws.amazon.com/apigateway/latest/developerguide/… 这个问题不是关于 REST API 集成,而是关于 HTTP。它已经过时了,因为它不是问题的正确答案(也许我应该说无效而不是过时,抱歉)。正确答案是完全可以通过 HTTP 将 API Gateway 与面向内部的 ALB 集成。也许你对 REST 集成的看法是正确的,我不知道。【参考方案2】:我也一直在为此苦苦挣扎。对于 REST API,您可以创建指向 NLB 的 VPC 链接,但不能创建 ALB(这是您一直看到的 invalid endpoint address
问题)。可以将 HTTP API 直接连接到 API 网关(大约一个月前发布 - API Gateway offers private integrations with AWS ELB and AWS CloudMap as part of HTTP APIs GA release)。这很令人沮丧,我希望他们能够为 REST API 的 VPC 链接添加 ALB 支持,但现在这是不可能的。
至于你问题的第二部分,我不确定你所说的“端点集成”是什么意思,所以我恐怕无法帮助你。
【讨论】:
我也在调查这个。看过有关私有集成的博客文章后,我希望它可以与 REST API 一起使用,但可惜它仅适用于 Api Gateway 上较新的 HTTP API。我将向我的 AWS SA 发送一些反馈,以了解这是否在路线图上。 这有什么更新吗?我们还有限制吗?不想让我们共享的 ALB 面向互联网。 @nish1013 - 不,当我这样做时,我必须创建一个 NLB,然后使用 VPC Link 将其连接到我的 API 网关。如果我有时间,我可以尝试发布一个我所做的基本示例,但它分布在多个模块中,因此需要一段时间来编写。 还是这样吗?以下示例github.com/aws-samples/aws-apigw-http-api-private--integrations 展示了 API 网关通过私有 VPC 链接连接到 ALB 的场景。 @diegosasw 这些是 HTTP API 不是 REST API。以上是关于连接 AWS Api Gateway 和私有 ALB的主要内容,如果未能解决你的问题,请参考以下文章
尝试连接到 AWS Gateway 私有 API 时出现 UnknownHostException
使用 Cognito 在 AWS Api Gateway 中验证用户
通过 HTTP 集成从 AWS Api Gateway 中的 websocket 提取 websocket 连接 ID 和其他详细信息