我想通过 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))
**注意:**将 ENDPOINT、USER 和 PASS 替换为您的数据库值。
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"
}
**注意:**在任务定义中,设置 ENDPOINT、USER 和 PASS 环境变量的值。您可以将这些值作为环境变量直接传递,也可以在 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]