如何从 Fargate 上的 Amazon ECS 任务连接到数据库?

上次更新日期:2022 年 7 月 18 日

我想要从 AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 任务连接到数据库。

解决方法

在完成以下步骤之前,请确认您在 Fargate 上运行了 Amazon ECS 集群和 Amazon Relational Database Service (Amazon RDS) 数据库。如果 Amazon ECS 在与 Amazon RDS 通信时遇到问题,请参阅如何排查我的 Amazon EC2 启动类型的 Amazon ECS 任务与 Amazon RDS 数据库之间的连接问题?

注意:以下解决方法将 MySQL 用作引擎类型。

将任务连接到数据库

1.    创建链接到 MySQL 数据库的 Python 脚本。

以下示例 rds.py 脚本将数据库连接的结果输出到 Amazon CloudWatch 中:

import pymysql
import os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
    print("Connecting to "+Database_endpoint)
    db = pymysql.connect(Database_endpoint,Username,Password)
    print ("Connection successful to "+Database_endpoint)
except Exception as e:
    print ("Connection unsuccessful due to "+str(e))

注意:ENDPOINTUSERPASS 替换为您的数据库值。

2.    创建一个包含组合映像所需命令的 Dockerfile。例如:

FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]

重要提示:务必将您的 rds.py 脚本和 Dockerfile 放在相同的文件夹中。

3.    创建 Amazon ECR 存储库,然后将 Docker 映像推送到该存储库。

4.    创建任务定义,然后将步骤 2 中的 Docker 映像作为容器映像添加。例如:

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-app",
    "image": "YOUR-ECR-Repository-URL",
    "essential": true
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-app"
}

注意:在您的任务定义中,设置 ENDPOINTUSERPASS 环境变量的值。您可以将这些值作为环境变量直接传递,也可以在 AWS Secrets Manager 中从密钥中检索它们。有关更多信息,请参阅如何将机密或敏感信息安全地传递给 Amazon ECS 任务中的容器?

5.    打开 Amazon ECS 控制台,然后从导航窗格中选择 Task Definitions(任务定义)。

6.    选择任务定义,选择 Actions(操作),然后选择 Run Task(运行任务)。

7.    对于 Launch type(启动类型),选择 FARGATE

8.    对于 Cluster(集群),选择您的任务定义的集群。

9.    对于 Number of tasks(任务数量),输入您想要复制的任务数量。

10.    在 VPC and security groups(VPC 和安全组)部分中,对于 Cluster VPC(集群 VPC),选择您的 Amazon Virtual Private Cloud (Amazon VPC)。

11.    对于 Subnets(子网),选择您的子网。

12.    对于 Security groups(安全组),至少选择一个安全组。

13.    选择 Run Task(运行任务)。

rds.py 脚本停止任务并返回以下消息:

Essential container in task exited.

确认您的任务已连接到数据库

1.    打开 Amazon ECS 控制台

2.    从导航菜单中,选择 Clusters(集群),然后选择您的集群。

3.    选择 Tasks(任务)选项卡。

4.    对于 Desired task status(所需的任务状态),选择 Stopped(已停止)以查看已停止任务的列表。

5.    选择已停止的任务。

6.    在已停止任务的 Details(详细信息)选项卡的 Containers(容器)部分中,选择展开图标。

7.    选择 View logs in CloudWatch(在 CloudWatch 中查看日志)。

您应在 Amazon CloudWatch 控制台中看到以下消息:

Connection successful to [Your Endpoint]

这篇文章对您有帮助吗?


您是否需要账单或技术支持?