AWS ECS 任务无法连接到 RDS 数据库

AWS ECS Task can't connect to RDS Database

我是 AWS 的新用户,今天我在处理示例项目时遇到了困难。我成功创建了一个 docker 容器,它运行一个简单的 R 脚本,该脚本连接到我的 AWS RDS MySQL 数据库,并创建并向其中写入一些基本文件。我构建了一个 public ECR 存储库,将我的 docker 图像推送到那里,并构建了一个 ECS 集群和任务,选择 Fargate 并使用我的存储库中的容器图像。我的任务 运行 并且在我查看日志时可以看到正在执行的 R 代码,但它永远无法连接到 SQL 数据库并随后退出。

我必须在 RDS 数据库的安全组中将我自己的 IP 地址列入白名单,以便我可以连接到它,所以我知道我可能必须为我的 ECS 任务这样做才能建立该连接也。但是,该 IP 地址不会因为执行任务的 Fargate 服务器没有静态 IP 而不断变化吗?我想继续使用免费套餐,所以我不确定是否要为此服务器设置弹性 IP 地址。

这两篇文章即使不是我遇到的同一个问题,看起来也很接近,但我想不出解决方案。我还没有找到任何其他信息。

https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-task-database-connection/

https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-static-elastic-ip-address/

最终目标是在预定的固定时间间隔内 运行 成功获得此示例项目,然后 运行 那里的实际脚本可帮助实现自动化并让我的生活更轻松,因此此示例项目是朝着这个方向迈出的第一步。任何有关我遇到的问题的帮助或信息将不胜感激!

是的,您的任务是临时的(无论您是手动启动它还是作为 ECS 服务的一部分启动它)并且它的 private/public IP 地址如果被替换可能会随着时间的推移而改变。您要遵守连接规则的方法是为任务分配一个安全组(我假设您可能需要在特定端口上进行入站访问,并且对所有内容进行出站访问)并将另一个安全组分配给具有您分配给任务的安全组在端口 3306 上的入站访问(这是技巧,SG 不会更改并且您告诉 RDS 允许访问来自该 SG 的所有流量)。我看到你发表的第一篇文章没有谈到这部分(应该)。