amazon-web-services - 使用 ECS-CLI 将多容器 docker 应用程序部署到 AWS ECS Fargate

标签 amazon-web-services docker docker-compose amazon-ecs amazon-ecr

我需要部署 this project在 AWS ECS 上(最好是 Fargate 或 EC2 最坏情况)。 看着 documentation我尝试使用单个容器进行部署并且它可以工作但是对于多个容器,由于 ecs-cli 的限制我不能直接从项目使用 docker-compose.yml 因此我将 docker 图像上传到 ECR 然后创建一个新的 docker-与各个容器的摘要组成。

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

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 权限上。

关于amazon-web-services - 使用 ECS-CLI 将多容器 docker 应用程序部署到 AWS ECS Fargate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64280604/

相关文章:

docker - 如何在 Docker-Compose 中一起使用主机网络和任何其他用户定义的网络?

使用 gitlab 时 docker Push 由于 "unauthorized: authentication required"失败

amazon-web-services - 使用 CloudFormation 创建 Amazon RDS 快照

docker - 查看 Portainer 运行的命令

docker - NGINX proxy_pass到RabbitMQ管理器仅通过移动设备工作

docker - AWS Sagemaker |如何调试 docker 镜像 |我们传递的参数是什么

amazon-web-services - AWS Redis (v 3.2.6) : HMSET is not working

reactjs - 如何为 AWS 中的嵌套字段设置限制以扩大 DynamoDB 模式?

amazon-web-services - 使用非默认 VPC (aws-sdk-go) 时无法调用 ec2.AuthorizeSecurityGroupIngressInput

docker - 如何控制 docker-compose 构建顺序?