无法连接到公共可访问的 AWS RDS

dan*_*nca 5 subnet amazon-web-services amazon-rds amazon-vpc aws-lambda

我在 VPC 内的 lambda 上运行无服务器 Web 应用程序,并连接到 Aurora-MySQL RDS 实例,并使用入站规则允许来自 lambda 安全组的流量 连接工作正常,但是 lambda 经常冷开始给了我一个暂停。经过一番研究,我发现在 VPC 上运行 lambda 会带来额外的启动成本,并且我在不止 1 个地方看到了避免在 VPC 上使用 lambda 的建议,除非您严格需要访问 VPC 中的某些资源。

因此,我决定将 RDS 移至可公开访问的实例,以便我的 lambda 可以通过互联网访问它并从 VPC 中删除 lambda。

因此,我将 RDSPublic accessibility选项更改为Yes并编辑安全组以允许来自任何 IP 的入站连接。我还从 lambda 中删除了 VPC,因此 lambda 不再在 VPC 上运行,我认为这已经足够了。

但后来我的 lambda 开始无法连接到我尝试使用本地客户端连接的数据库,再次失败

尝试 ping 主机名,请求超时

经过深入研究后,我发现我的数据库实例子网组具有一些私有子网可能是一个问题(?)因此,我创建了一个仅包含公有子网的新子网组,并尝试将我的数据库实例移动到新的子网组子网组...但收到此消息:

You cannot move DB instance my-instance to subnet group my-new-group. The specified DB subnet group and DB instance are in the same VPC.
Run Code Online (Sandbox Code Playgroud)

好吧,看来我无法移动到同一个 VPC 中的不同子网,我开始尝试创建一个新的 VPC,但它似乎不正确,我确信这里还缺少其他东西。

我还阅读了有关网络 ACL 的内容,并认为这可能是问题所在,但我的规则似乎很好,默认规则允许任何流量(规则 * 为拒绝)

ALL Traffic ALL ALL 0.0.0.0/0 ALLOW

我的 RDS 网络设置

Subnet group
default

Subnets
subnet-11111111
subnet-22222222
subnet-33333333
subnet-44444444
subnet-55555555
subnet-66666666

Security
VPC security groups
default (sg-111111)
( active )

Public accessibility
Yes
Run Code Online (Sandbox Code Playgroud)

我的安全组入站规则

Type Protocol Port range    Source  Description - optional
All traffic All All 0.0.0.0/0   -
All traffic All All ::/0    -
Run Code Online (Sandbox Code Playgroud)

仍然无法连接,无法连接到我的本地客户端,甚至无法 ping 通它:

通过我的本地客户端连接

Can't connect to MySQL server on 'my-instance.xxxxxxxxxx.us-east-1.rds.amazonaws.com' 
Run Code Online (Sandbox Code Playgroud)
ping my-instance.xxxxxxx.us-east-1.rds.amazonaws.com
PING ec2-xx-xx-xx-xx.compute-1.amazonaws.com (xx.xx.xx.xx): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Run Code Online (Sandbox Code Playgroud)

知道我在这里缺少什么吗?

更新

我的 VPC 可以访问互联网(我可以从中访问互联网服务,这不是问题),我有一个互联网网关和 NAT 网关。

我正在使用 Zappa 进行 lambda 部署,它负责创建一个保温函数...但是,我知道并发请求仍然可能是一个问题

lambda 中 VPC 的问题是它可以在冷启动时增加 10 秒,这对于我的一些用例来说是无用的: https ://www.freecodecamp.org/news/lambda-vpc-cold-starts- a-延迟杀手-5408323278dd/

avi*_*006 1

你需要做的是:

  • 使用默认 VPC 创建新子网组
  • 为可用区分配两个子网
  • 然后修改您的RDS实例
  • 将子网组更改为新创建的组
  • 将“公开可访问性”标记为“是”。
  • 检查您的 VPC 是否正在使用互联网网关。

检查 lambda 安全组是否对数据库端口不可用的出站连接开放。

无需为RDS创建不同的VPC。使用默认 VPC。

正如 @stargazer 建议的那样,尽量不要公开或在 VPC 之外公开。它在 VPC 内运行良好。