如何排查我的 Amazon EC2 启动类型的 Amazon ECS 任务与 Amazon RDS 数据库之间的连接问题?

1 分钟阅读
0

我的应用程序作为 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.    检查附加的安全组是否允许访问 RDS 数据库。您可以使用 DescribeInstances API 调用,也可以在 Amazon EC2 控制台中使用所选实例 ID 的 Description(描述)选项卡。

注意:桥接主机联网模式下,附加到容器实例的安全组将会控制对数据库的访问权限。在 awsvpc 联网模式下,则由在服务或任务启动期间关联的安全组来控制访问权限。

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

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

验证数据库连接参数

1.    在容器定义的 environment(环境)部分中,安全地传递环境变量。为了安全地传递,请参考 AWS Systems Manager 参数存储或 AWS Secrets Manager 中的环境变量

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

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

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

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


AWS 官方
AWS 官方已更新 4 年前