如何将我的 Amazon RDS 数据库连接到 Amazon EC2 实例上的 Amazon ECS 任务?

上次更新时间:2020 年 5 月 14 日

我的应用程序作为 Amazon Elastic Container Service (Amazon ECS) 在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上启动的一组任务运行。我的应用程序无法与 Amazon Relational Database Service (Amazon RDS) 数据库通信。

解决方法

验证您的网络配置

要验证容器实例是否可以建立到数据库的连接,请为基于 Linux 或 Windows 的容器实例完成以下步骤:

基于 Linux 的容器实例:

1.    使用 SSH 连接到放置您的任务的容器实例

2.    要连接到您的 RDS 数据库,请运行以下命令:

 $ telnet test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306

注意:将您的数据库终端节点替换为 test.ab12cde3fg4.us-east-1.rds.amazonaws.com。将您的数据库端口替换为 3306

输出应与以下类似:

> Trying 172.31.122.28
 > Connected to test.ab12cde3fg4.us-east-1.rds.amazonaws.com
 > Escape character is '^]'.

重要提示:Amazon ECS 优化的 Amazon 系统映像 (AMI) 并未预装 Telnet。要安装 Telnet,请运行 sudo yum install telnet -y 命令。

基于 Windows 的容器实例:

1.    使用远程桌面协议 (RDP) 连接到放置您的任务的容器实例

2.    要连接到您的 RDS 数据库,请使用 Windows 命令提示符或 Windows PowerShell 运行以下命令:

$ telnet test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306

注意:将您的数据库终端节点替换为 test.ab12cde3fg4.us-east-1.rds.amazonaws.com。将您的数据库端口替换为 3306

重要提示:Amazon ECS 优化的 Windows AMI 并未预装 Telnet。要安装 Telnet,请使用 PowerShell 以管理员身份运行 Install-WindowsFeature -Name Telnet-Client 命令。

如果成功建立连接,将会显示一个空白页面。

如果未建立连接并且收到“连接超时”或“连接失败”错误,则请完成以下步骤:

1.    通过 DescribeInstances API 调用或在 Amazon EC2 控制台中选择所选实例 ID 的描述选项卡,检查您附加的安全组是否允许访问该 RDS 数据库。

注意:桥接主机联网模式下,附加到容器实例的安全组将会控制对数据库的访问权限。在 awsvpc 联网模式下,则由在服务或任务启动期间关联的安全组来控制访问权限。不论采用哪种联网模式,Amazon ECS 任务都会共享属于该容器实例的子网。

提示:最佳实践是创建一个安全组以允许来自该数据库端口的入站流量。然后将该安全组关联到该数据库和容器实例,或者将该安全组关联到基于 awsvpc 的任务。

2.    检查与该子网关联的网络访问控制列表(网络 ACL)和路由表是否允许访问该数据库

验证数据库连接参数

1.    在容器定义的环境部分,将您的环境变量作为纯文本传递,或者从 AWS Systems Manager 参数仓库或 AWS Secrets Manager 引用它们

注意:应用程序使用参数(如数据库终端节点、数据库端口和数据库访问凭证)来建立到数据库的连接。这些参数通常将以环境变量的形式传递到任务。

2.    如果您的任务中的容器可以与数据库建立连接,但由于连接参数(如数据库用户名或数据库密码)不正确而无法通过身份验证,则重置您的数据库密码

3.    删除连接参数中的任何前导或结尾空格。

注意:语法错误可能会导致容器与 RDS 数据库之间的连接失败。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?