谁停止并启动ECS任务?并通知ECS服务

时间:2019-12-29 00:28:40

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-ecs

以下是应用程序的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

在ECS优化的AMI实例(EC2)上启动的

。 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任务开始期间

1 个答案:

答案 0 :(得分:1)

1)是,您的任务定义已配置了适当的ECR存储库版本。群集下的服务负责确保在EC2实例中启动并运行正确的任务。

enter image description here

2)是的,根据您集群的定义,同样在EC2上也是docker容器的amazon / amazon-ecs-agent将确保EC2上正在运行健康的任务(即docker容器)。 / p>

3)并非完全如此,代理只会确保将相关任务定义的Docker容器保留为已在ECR中配置了该服务。并且不要选择任何其他存储库。仅当您更新群集的服务时,它才会更新。

ecs代理负责拉动和运行。但是,假设您的任务定义版本为1。并且,您的任务定义的版本1是使用docker image配置的,例如版本1。您的ECS集群配置了具有任务定义v1的服务。在这种情况下,代理将仅确保任务定义v1的拉动和运行。如果您想由代理管理其他docker映像。您必须相应地更新定义和服务。