以下是应用程序的ECS任务定义:
SomeappTaskDefinition:
Type: "AWS::ECS::TaskDefinition"
Properties:
ContainerDefinitions:
- Name: someapp
Image: someaccounthub/someapp
Memory: 450
Environment:
- Name: DJANGO_SETTINGS_MODULE
Value: someapp.settings.release
- Name: MYSQL_HOST
Value: { "Fn::GetAtt": ["DbInstance", "Endpoint.Address"] }
- Name: MYSQL_USER
Value: { "Ref": "DbUsername" }
- Name: MYSQL_PASSWORD
Value: { "Ref": "DbPassword" }
MountPoints:
- ContainerPath: /var/www/someapp
SourceVolume: webroot
Command:
- uwsgi
- "--socket /var/www/someapp/someapp.sock"
- "--chmod-socket=666"
- "--module someapp.wsgi"
- "--master"
- "--die-on-term"
- Name: nginx
Image: someaccounthub/someapp-nginx
Memory: 300
PortMappings:
- ContainerPort: "8000"
HostPort: "8000"
MountPoints:
- ContainerPath: /var/www/someapp
SourceVolume: webroot
Volumes:
- Name: webroot
Host:
SourcePath: /ecs/webroot
。 Docker守护程序正在ECS优化的AMI实例(EC2)中运行。
未包含创建ECS服务(AWS::ECS::Service
)和ECS集群(AWS::ECS::Cluster
)的CloudFormation代码,因为此查询不是必需的。
ECS服务-AWS::ECS::Service
资源类型
ECS实例-AWS::EC2::Instance
资源类型
1) ECS服务是否负责将新任务定义部署到 ECS实例?通过与在ECS实例中运行的ECS代理进行交谈。
2)
在 ECS实例中运行的 ECS代理是否负责停止和启动现有的正在运行的ECS任务(SomeappTaskDefinition
)?并告知服务已启动到 ECS服务。.
3)
在 ECS实例中运行的 ECS代理是否负责向在ECS实例中运行的Docker守护进程发出请求,以从Docker存储库中提取Docker映像someaccthub/someapp
?在ECS任务开始期间
答案 0 :(得分:1)
1)是,您的任务定义已配置了适当的ECR存储库版本。群集下的服务负责确保在EC2实例中启动并运行正确的任务。
2)是的,根据您集群的定义,同样在EC2上也是docker容器的amazon / amazon-ecs-agent将确保EC2上正在运行健康的任务(即docker容器)。 / p>
3)并非完全如此,代理只会确保将相关任务定义的Docker容器保留为已在ECR中配置了该服务。并且不要选择任何其他存储库。仅当您更新群集的服务时,它才会更新。
ecs代理负责拉动和运行。但是,假设您的任务定义版本为1。并且,您的任务定义的版本1是使用docker image配置的,例如版本1。您的ECS集群配置了具有任务定义v1的服务。在这种情况下,代理将仅确保任务定义v1的拉动和运行。如果您想由代理管理其他docker映像。您必须相应地更新定义和服务。