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

2 分钟阅读
0

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

解决方法

完成以下步骤之前,请确认您有在 Fargate 上运行的 Amazon ECS 集群和 Amazon Relational Database Service (Amazon RDS) 数据库。Amazon ECS 和 Amazon RDS 可能存在通信问题。有关更多信息,请参阅如何解决 Amazon EC2 启动类型和 Amazon RDS 数据库的 Amazon ECS 任务之间的连接问题?

**注意:**以下解决办法使用 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(host = Database_endpoint, user = Username, password = Password)
  print("Connection successful to " + Database_endpoint)
db.close()
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 控制台,然后从导航窗格中选择任务定义

6.    选择您的任务定义,选择操作,然后选择运行任务

7.    在启动类型处,选择 FARGFATE

8.    在集群处,选择您任务定义的集群。

9.    在任务数量处,输入您要复制的任务数量。

10.    在 VPC 和安全组部分中的集群 VPC处,选择您的 Amazon Virtual Private Cloud (Amazon VPC)。

11.    在子网处,选择您的子网。

12.    在安全组处,至少选择一个安全组。

13.    选择运行任务

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

Essential container in task exited.

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

1.    打开 Amazon ECS 控制台

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

3.    选择任务选项卡。

4.    在预期任务状态处,选择已停止以查看已停止任务的列表。

5.    选择您已停止的任务。

6.    在您已停止任务的详细信息选项卡上,找到容器部分,选择展开图标。

7.    选择查看 CloudWatch 中的警报

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

Connection successful to [Your Endpoint]
AWS 官方
AWS 官方已更新 1 年前