跳至内容

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

2 分钟阅读
0

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

解决方法

先决条件:

**注意:**以下解决办法使用 MySQL 数据库引擎。有关如何连接到使用其他引擎类型的数据库的更多信息,请参阅 Amazon RDS 入门

将任务连接到数据库

完成以下步骤:

  1. 创建一个连接到 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 替换为您的密码。

  2. 要组装映像,请创建一个包含所需命令的 Dockerfile。以下示例文件包含必要的命令:

    FROM python
    RUN pip install pymysql cryptography
    COPY rds.py /
    CMD [ "python", "/rds.py" ]
  3. 创建一个 Amazon Elastic Container Registry (Amazon ECR) 存储库,然后将 Docker 映像推送到该存储库。

  4. 创建任务定义,然后将 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。最佳做法是在任务定义中设置 ENDPOINTUSERPASS 环境变量的值。可以将这些值作为环境变量直接传递,也可以使用 AWS Secrets Manager 从密钥中检索这些值。有关详细信息,请参阅如何将密钥或敏感信息安全传递到 Amazon ECS 任务中的容器?

  5. 打开 Amazon ECS 控制台

  6. 在导航窗格中,选择 Task Definitions(任务定义)。

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

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

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

  10. 对于 Number of tasks(任务数量),输入要运行的任务数量。

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

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

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

  14. 选择 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 中查看日志)。

如果您成功将任务连接到数据库,则 CloudWatch 控制台中将显示以下消息:

“成功连接到 [您的端点]”

AWS 官方已更新 6 个月前