如何解决使用ECS-CLI将多容器Docker应用程序部署到AWS ECS Fargate
我需要在AWS ECS上部署this project(最好是Fargate或EC2最坏的情况)。 查看documentation时,我尝试使用单个容器进行部署,并且可以使用多个容器,但由于ecs-cli的限制,我无法直接从项目使用docker-compose.yml,因此我将docker映像上传到ECR,然后使用各个conatiner的摘要创建一个新的docker-compose。
这里是原始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权限。
,作为 ecs-cli 的替代方案,我建议使用 ECS Compose-X,它允许您即插即用到您现有的网络 (VPC) 并处理所有其他问题(IAM、安全组等)。 此外,如果您想将您的服务链接到其他 AWS 资源,您可以使用它来发现这些资源(如果已经存在)或创建新资源,同样,与 IAM 和安全性有关的一切都将为您处理。
如果您创建了一个 kinesis 流,那么您的容器也将通过 env var 自动获得流的 ARN 和名称,因此您永远不需要命名您的资源,您总是有一个指向它的指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。