我需要部署 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/