AWS Cloudformation: настройка кластера ECS с параметрами - PullRequest
0 голосов
/ 29 августа 2018

Согласно официальной документации CF / ECS , ресурс кластера ECS принимает без параметров (!).

Однако при настройке кластера через консоль AWS есть несколько (и критических!) Параметров, которые определяются (например, нет экземпляров, типов экземпляров и т. Д.)

Как правильно определить кластер через CloudFormation?

Почему такое огромное расхождение между CF и консолью на этом ресурсе?

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

Я согласен, что установка ami, не входящего в «волшебный» дистрибутив Amazon-Linux, - это боль. Хотя следующие фрагменты, которые я придумал, работают с Ubuntu (отступ может быть не на 100% точным).

Эллипсы означают, конечно, что части шаблона отсутствуют, но вы все равно должны получить изображение. Удачи!

Resources: MyCluster: Type: AWS::ECS::Cluster Properties: ClusterName: myCluster MyInstance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: files: # refer to # docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html /etc/ecs/ecs.config: content: !Sub ... ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA=... ... ECS_CLUSTER=${MyCluster} commands: 01_ecs_agent_run: command: !Sub | docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest Properties: ... UserData: Fn::Base64: !Sub | #!/bin/bash ... # install docker here # https://docs.docker.com/install/linux/docker-ce/ubuntu/ ... # follow the steps 1-7 from aws docs # https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html; ... # install aws helpers apt-get install python-pip -y pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz ln -s /usr/local/init/ubuntu/cfn-hup /etc/init.d/cfn-hup systemctl enable cfn-hup /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}

Обновление ответа:

Выше можно достичь с помощью консоли, добавив UserData при запуске экземпляра.

0 голосов
/ 29 августа 2018

Исходя из этого, с учетом некоторых эталонных шаблонов , предоставленных самой AWS, процесс начальной загрузки кластера, когда не выполняется через консоль AWS, очень утомителен, утомителен , подверженный ошибкам, неприемлемый и трудоемкий процесс, основанный на серии cfg-init / user-data сценариев.

0 голосов
/ 29 августа 2018

ECS-кластер является только логическим пространством имен внутри службы ECS. Фактические экземпляры EC2, на которых будут выполняться задачи, не управляются самим ECS, их необходимо создавать отдельно.

Мастер консоли ECS запускает шаблон Cloudformation, который содержит определение кластера ECS и экземпляры EC2. Шаблон содержит параметры, которые вы видите в мастере консоли.

Возможно, вы сможете повторно использовать этот шаблон, в противном случае используйте шаблон Cloudformation, как показано ниже. При этом используется Amazon ECS, оптимизированный для ECS , который содержит все необходимые приложения.

  AppServerLaunchConfig:
   Type: AWS::AutoScaling::LaunchConfiguration
   Properties:
     ImageId: "ami-c91624b0"
     # instance role must have permissions to join ECS cluster
     IamInstanceProfile: !Ref InstanceProfile
     KeyName: !Ref KeyName
     InstanceType: t2.micro
     SecurityGroups: [ !Ref InstanceSecurityGroup ]
     UserData:
       Fn::Base64: !Sub |
         #!/bin/bash
         # join cluster with this name
         echo ECS_CLUSTER=myclustername >> /etc/ecs/ecs.config           

   AppServerGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      MaxSize: 2
      MinSize: 0
      DesiredCapacity: 1
      LaunchConfigurationName: !Ref AppServerLaunchConfig
      VPCZoneIdentifier:
        - !Ref SomeSubnetId

   ECSCluster:
     Type: AWS::ECS::Cluster
     DependsOn: AppServerGroup
     Properties:
       ClusterName: myclustername
0 голосов
/ 29 августа 2018

В CF у вас есть AWS::ECS::TaskDefinition и AWS::ECS::Service, чтобы позаботиться о конфигурации кластера. Помните, что консоль AWS является интерактивным инструментом, а CF предназначен для IaC .

Обновление для устранения некоторых проблем, вызванных OP

Существуют некоторые параметры кластера, которые нельзя настроить с помощью шаблонов CF. Документация CF по AWS::ECS::CLUSTER гласит:

Ресурс AWS :: ECS :: Cluster создает кластер Amazon Elastic Container Service (Amazon ECS). Этот ресурс не имеет свойств; используйте контейнерный агент Amazon ECS для подключения к кластеру. Для получения дополнительной информации см. Контейнерный агент Amazon ECS в Руководстве разработчика по сервису Amazon Elastic Container Service.

...