繁体   English   中英

使用 ECS-CLI 将多容器 Docker 应用程序部署到 AWS ECS Fargate

[英]Deploying multi-container docker application to AWS ECS Fargate using ECS-CLI

我需要在 AWS ECS 上部署这个项目(最好是 Fargate 或 EC2 最坏的情况)。 查看我尝试使用单个容器部署的文档,但它适用于多个容器,由于 ecs-cli 的限制,我无法直接从项目中使用 docker-compose.yml,因此我将 docker 图像上传到 ECR,然后创建一个新的 docker-compose 与相应容器的摘要。

这是原始docker-compose.yml的链接。 这是我的 docker-compose 在将图像上传到 ECR 后的样子:

version: "3.0"
services:
    postgres:
        image: postgres:12  
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker

    db:
        image: sha256:123123123123123213213213213
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker   

    traefik:
        image: sha256:123123123123123213213213213
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker

    queue:
        image: sha256:123123123123123213213213213
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker
    
    flower:
        image: sha256:123123123123123213213213213
        env_file: 
            - .env
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker

    backend:
        image: sha256:123123123123123213213213213
        env_file: 
            - .env
        environment:
            - SERVER_NAME=${DOMAIN?Variable not set}
            - SERVER_HOST=https://${DOMAIN?Variable not set}
            - SMTP_HOST=${SMTP_HOST}
        ports:
            - "80:80"
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker

    celeryworker:
        image: sha256:123123123123123213213213213
        env_file:
            - .env
        environment:
            - SERVER_NAME=${DOMAIN?Variable not set}
            - SERVER_HOST=https://${DOMAIN?Variable not set}
            # Allow explicit env var override for tests
            - SMTP_HOST=${SMTP_HOST?Variable not set}
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker
    

    frontend:
        image: sha256:123123123123123213213213213
        logging:
            driver: awslogs
            options: 
                awslogs-group: aws-ecs-docker-test
                awslogs-region: ap-south-1
                awslogs-stream-prefix: docker
    
volumes:
  app-db-data:

这是 ecs-params.yml:

version: 1
task_definition:
  task_execution_role: ecsTaskExecutionRole
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - subnet-123123123
        - subnet-123123123
      security_groups:
        - sg-123123123
      assign_public_ip: ENABLED

ecsTaskExecutionRole 拥有对 ECS、ECR 和 Cloudwatch 日志的所有访问权限。 但是,每当我部署时,ecs 都会创建一些任务定义,然后超时:

Deployment has not completed: Running count has not changed for 5.00 minutes

即使我将超时延长到 30 分钟,它也不会改变输出。 日志没有输出任何内容,因此我对可能存在的潜在问题一无所知。 我是 Devops 和 Docker 的新手,所以我不确定我实际上缺少什么。

我最终能够解决这个问题。 问题在于 traefik 图像以及缺乏授予 IAM 角色的 Cloudwatch 权限。

作为 ecs-cli 的替代方案,我建议使用ECS Compose-X ,它允许您即插即用到现有网络 (VPC) 并处理所有其他问题(IAM、安全组等)。 此外,如果您想将您的服务链接到其他 AWS 资源,您可以使用它来发现这些资源(如果已经存在)或创建新资源,同样,与 IAM 和安全性有关的一切都将为您处理。

如果您创建了一个 kinesis 流,那么您的容器也将通过 env var 自动获得流的 ARN 和名称,因此您永远不需要命名您的资源,您总是有一个指向它的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM