我想通过 AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 任务连接到数据库。
解决方法
先决条件:
**注意:**以下解决办法使用 MySQL 数据库引擎。有关如何连接到使用其他引擎类型的数据库的更多信息,请参阅 Amazon RDS 入门。
将任务连接到数据库
完成以下步骤:
-
创建一个连接到 MySQL 数据库的 Python 脚本。以下示例 rds.py 脚本将与数据库连接的结果发送到 Amazon CloudWatch:
import pymysql
import os
DATABASE_ENDPOINT = os.environ['example_endpoint']
USERNAME = os.environ['example_username']
PASSWORD = os.environ['example_password']
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))
**注意:**将 example_endpoint 替换为您的数据库端点。将 example_username 替换为您的用户名。将 example_password 替换为您的密码。
-
要组装映像,请创建一个包含所需命令的 Dockerfile。以下示例文件包含必要的命令:
FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
-
创建一个 Amazon Elastic Container Registry (Amazon ECR) 存储库,然后将 Docker 映像推送到该存储库。
-
创建任务定义,然后将 Docker 映像添加为容器映像:
{ "executionRoleArn": "arn:aws:iam::example_account_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "example_app",
"image": "example_repository_URL",
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "example_app"
}
**注意:**将 example_account_ID 替换为您的 AWS 账户 ID。将 example_app 替换为您的应用程序名称。将 example_repository_URL 替换为您的 Amazon ECR 存储库的 URL。最佳做法是在任务定义中设置 ENDPOINT、USER 和 PASS 环境变量的值。可以将这些值作为环境变量直接传递,也可以使用 AWS Secrets Manager 从密钥中检索这些值。有关详细信息,请参阅如何将密钥或敏感信息安全传递到 Amazon ECS 任务中的容器?
-
打开 Amazon ECS 控制台。
-
在导航窗格中,选择 Task Definitions(任务定义)。
-
选择您的任务定义,选择 Actions(操作),然后选择 Run Task(运行任务)。
-
对于 Launch type(启动类型),选择 FARGATE。
-
对于 Cluster(集群),选择任务定义的集群。
-
对于 Number of tasks(任务数量),输入要运行的任务数量。
-
在 VPC and security groups(VPC 和安全组)部分中,对于 Cluster VPC(集群 VPC),选择您的 Amazon Virtual Private Cloud (Amazon VPC)。
-
对于 Subnets(子网),选择您的子网。
-
对于 Security groups(安全组),至少选择一个安全组。
-
选择 Run Task(运行任务)。
当您的任务连接到数据库时,rds.py 脚本会停止任务并显示以下消息:
"Essential container in task exited."
确认您已将任务连接到数据库
完成以下步骤:
- 打开 Amazon ECS 控制台。
- 在导航窗格中,选择 Clusters(集群),然后选择您的集群。
- 选择 Tasks(任务)选项卡。
- 对于 Desired task status(预期任务状态),要查看已停止任务的列表,请选择 Stopped(已停止)。
- 选择已停止的任务。
- 在已停止任务的 Details(详细信息)选项卡上,展开 Containers(容器)部分。
- 然后,选择 View logs in CloudWatch(在 CloudWatch 中查看日志)。
如果您成功将任务连接到数据库,则 CloudWatch 控制台中将显示以下消息:
“成功连接到 [您的端点]”