微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可从 Internet 访问的 AWS Lambda HTTP,但无法从同一账户上的 EC2 访问

如何解决可从 Internet 访问的 AWS Lambda HTTP,但无法从同一账户上的 EC2 访问

我有一个 lambda 函数,它附加了一个 API 网关。它有一个可公开访问的 IP 地址和一个域名(由无服务器框架创建)。我可以通过广泛的互联网、我自己的浏览器(和其他设备)访问它。

问题是,我账户上的其他服务似乎无法访问它,例如 EC2 实例。在上述实例中,curl google.com 工作并返回响应,但 curl mylink.com 超时。

我认为这与 VPC 设置有关,但我无法理解。这里可能有什么问题?

更新:使用 curl --verbose,我发现从其他任何地方访问时,API 网关指向的 IP 与从我的 AWS 账户中访问时不同。 VPC 似乎无关紧要,我创建了一个新的 VPC,在其中创建了一个 EC2 实例,它仍然这样做。

解决方法

基于评论。

该问题是由默认 VPC 中 API Gateway 的 VPC interface endpoint 引起的。 API 网关的 VPC 接口端点用于 private API,而不是用于 OP 的公共 API。随后,对公共 API 端点的调用失败,如AWS blog 中所述:

当它们被配置为私有时,公共网络将无法使用来路由您的 API。相反,您的 API 只能使用您配置的接口端点访问。

有两种方法可以解决这个问题:

在 OP 的情况下,第二个选项用于解决问题。

,

EC2 实例可能位于没有公共互联网访问权限的 VPC 中(或可能但通过负载均衡器、堡垒主机或任何其他选项)。

您需要找出 EC2 实例所在的 VPC,并确保您的 lambda 函数可以访问它。您可以按照 the documentation

向 VPC 添加函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。