【问题标题】:AWS Lambda HTTP accessible from the internet, but not accessible from an EC2 on the same accountAWS Lambda HTTP 可从 Internet 访问,但不能从同一账户上的 EC2 访问
【发布时间】:2021-06-24 08:02:55
【问题描述】:

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

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

我认为这与 VPC 设置有关,但我无法确定。这可能是什么问题?

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

【问题讨论】:

  • 你有api网关的VPC接口端点吗?
  • 您能否显示该 VPC 的路由表?
  • SO 不允许链接,所以我将描述:172.31.0.0/16 本地活动,0.0.0.0/0 igw-69***** 活动
  • 您是否对默认 VPC 进行了任何修改?
  • @Marcin 所以,这行得通。请您创建一个答案,解释其工作原理和原因,我会奖励您赏金吗?

标签: amazon-web-services aws-lambda amazon-vpc


【解决方案1】:

基于 cmets。

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

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

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

在 OP 的案例中,第二个选项用于解决问题。

【讨论】:

  • 那OP怎么能从互联网通过API网关访问Lambda函数呢?顺便说一句,感谢您的精彩解释。
  • @StefanN 谢谢。问题是相反的。如何从 VPC 中的 lambda 访问公共 API 网关。
  • 好的。但在问题的初始描述(第一段)中,OP 声明他可以从互联网访问 Lambda 函数。如果“公共网络不可用”,为什么会出现这种情况?
  • @StefanN lambda 前面有一个公共 API。无法从 ec2 实例访问 API。这可能是由于 api 网关接口端点可以隐藏 api 网关的公共 dns 名称。
【解决方案2】:

EC2 实例可能位于无法访问公共 Internet 的 VPC 中(或者可能但通过负载均衡器、堡垒主机或任何其他无数选项)。

您需要找出 EC2 实例所在的 VPC,并确保您的 lambda 函数可以访问它。您可以通过关注the documentation向VPC添加函数

【讨论】:

  • 它位于默认 VPC 内,并且可以访问 Internet。奇怪的是,只是无法访问那个特定的 lambda。更有趣的是,就在几天前,它确实可以访问它。不仅仅是停止工作,还有同一 VPC 中的另一台 EC2 机器。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2017-09-02
  • 2019-08-16
  • 2018-04-03
  • 2020-01-18
相关资源
最近更新 更多