В этом модуле описано, как использовать Amazon Elastic Container Service (Amazon ECS) для создания управляемого кластера вычислительных инстансов EC2 и развертывания в этом кластере существующего образа в виде контейнера. Начать разработку

обзор архитектуры

a. Клиент
Клиент совершает запросы к балансировщику нагрузки через порт 80.

b. Балансировщик нагрузки
Балансировщик нагрузки распределяет запросы по всем доступным портам.

c. Целевые группы
Инстансы зарегистрированы в целевых группах приложения.

d. Порты контейнера
В каждом контейнере выполняется один процесс приложения, который связывает родительский объект кластера node.js с портом 80 в пределах своего пространства имен.

e. Контейнеризированное монолитное приложение node.js
Родительский объект кластера node.js отвечает за распределение трафика по исполнителям внутри монолитного приложения. Эта архитектура является контейнеризированной, но по-прежнему монолитной, так как каждый контейнер выполняет одни и те же функции.

Amazon Elastic Container Service (Amazon ECS) – это высокопроизводительный сервис управления контейнерами с широкими возможностями масштабирования, который поддерживает контейнеры Docker и позволяет с легкостью запускать приложения в управляемом кластере инстансов Amazon EC2. С помощью простых вызовов API вы сможете запускать и останавливать контейнерные приложения Docker, получать данные о состоянии всего кластера и пользоваться многими привычными возможностями, например группами безопасности, Elastic Load Balancing, томами EBS и ролями IAM.

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

Дополнительная плата за использование Amazon ECS не взимается. Оплате подлежат ресурсы AWS (например инстансы EC2 или тома EBS), которые создаются для хранения и запуска приложения.

Время выполнения: 30 минут

Используемые сервисы:


Разверните приложение node.js с использованием сервиса Amazon ECS, выполнив приведенные ниже пошаговые инструкции. Щелчком по номеру шага можно развертывать соответствующие разделы.

break-the-monolith
  • Шаг 1. Запуск кластера ECS с помощью AWS CloudFormation

    Создайте кластер Amazon ECS, развернутый за Application Load Balancer.

    1. Перейдите в консоль AWS CloudFormation.
    2. Выберите Create stack.
    3. Щелкните Upload a template file и выберите файл ecs.yml из проекта GitHub по адресу amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml, а затем щелкните Next.
    4. В качестве имени стека введите BreakTheMonolith-Demo. Убедитесь, что остальные параметры имеют указанные ниже значения.
      1. Desired Capacity = 2
      2. InstanceType = t2.micro
      3. MaxSize = 2
    5. Нажмите Далее.
    6. На странице Configure stack options сохраните значения по умолчанию, прокрутите содержимое экрана вниз и нажмите кнопку Next.
    7. На странице Review BreakTheMonolith-Demo прокрутите содержимое экрана до нижней части страницы, подтвердите выражение Capabilities соответствующим флажком и щелкните Create stack.

    Вы увидите созданный стек с состоянием CREATE_IN_PROGRESS. Ход выполнения операции можно контролировать, нажимая кнопку обновления в правом верхнем углу экрана. Обычно этот процесс занимает не более 5 минут.

    создание стека

    ⚐ ПРИМЕЧАНИЕ. Развертывать стеки AWS CloudFormation можно также с помощью интерфейса командной строки AWS (AWS CLI). Выполните указанный ниже код в терминале, предварительно перейдя в папку amazon-ecs-nodejs-microservices/3-microservices и заменив заполнитель [region] названием своего региона AWS.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Шаг 2. Проверка работы кластера

    Amazon ECS. Проверка кластера
    • Выберите кластер BreakTheMonolith-Demo, перейдите на вкладку Tasks и убедитесь, что не выполняется ни одна задача.
    Amazon ECS. Задачи кластера
    • Перейдите на вкладку ECS Instances и убедитесь, что на ней есть два инстанса Amazon EC2, созданные шаблоном AWS CloudFormation.
      **⚐ Примечание. Если вы получите сообщение о том, что агент ECS устарел, щелкните пункт Learn more, чтобы отобразить инструкции по обновлению агента ECS.
    Amazon ECS. Инстансы
  • Шаг 3. Создание определения задачи

    Определения задач указывают, каким образом сервис Amazon ECS должен развертывать контейнеры приложений в кластере.

    • В расположенном слева меню навигации Amazon ECS выберите пункт Task Definitions.
    • Щелкните Create new Task Definition.
    • На странице Select launch type compatibility выберите вариант EC2 и щелкните Next step.
    • На странице Configure task and container definitions выполните указанные ниже действия.
      • В поле Task Definition Name введите строку api.
      • Прокрутите вниз до пункта Container Definitions и выберите Add container.
      • В окне Add container выполните указанные ниже действия.
        • Параметры, которые не определены, можно не заполнять либо сохранить в них значения по умолчанию.
        • В поле Container name введите api.
        • В поле Image введите [account-ID].dkr.ecr.[region].amazonaws.com/api:v1.
          Замените заполнители [account-ID] и [region] соответствующими данными. Убедитесь, что тег v1 соответствует значению, которое вы использовали в модуле 1 в качестве тега образа при его отправке. Это URL-адрес вашего образа в репозитории ECR, который вы создали в предыдущем модуле.
        • Убедитесь, что в поле Memory Limits выбран вариант Hard limit, и введите значение 256.
        • В разделе Port mappings укажите значения Host port = 0 и Container port = 3000.
        • Прокрутите содержимое экрана до пункта ENVIRONMENT и задайте для параметра CPU units значение 256.
    • Выберите Add (Добавить).
      Вы вернетесь на страницу Configure task and container definitions.
    • Прокрутите вниз до края страницы и нажмите кнопку Create.

    Теперь определение задачи будет отображаться в консоли.

    определение задачи
  • Шаг 4. Настройка Application Load Balancer: целевая группа

    Application Load Balancer (ALB) дает вашему сервису возможность принимать входящий трафик. ALB автоматически направляет трафик к работающим в кластере инстансам контейнеров, используя их в качестве целевой группы.

    Проверьте имя VPC: если вы используете этот аккаунт AWS не в первый раз, у вас, возможно, уже есть несколько VPC. Важно указать для целевой группы правильное значение VPC.

    • Перейдите в раздел балансировщика нагрузки в консоли EC2.
    • Найдите Load Balancer с именем demo.
    • Установите флажок рядом с элементом demo, чтобы отобразить сведения об этом балансировщике нагрузки.
    • На вкладке Description найдите атрибут VPC (он имеет формат «vpc-xxxxxxxxxxxxxxxxx»).
      ⚐ Примечание. Атрибут VPC потребуется вам на следующем шаге, когда вы будете настраивать целевую группу ALB.
    атрибут vpc

    Настройка целевой группы ALB

    • Перейдите в раздел Target Group в консоли EC2.
    • Выберите пункт Create target group.
    • Настройте указанные ниже параметры целевой группы (если какие-либо параметры не указаны в списке ниже, сохраните для них значения по умолчанию).
      • Для параметра Target group name введите значение api.
      • Для параметра Protocol выберите HTTP.
      • Для параметра Port введите значение 80.
      • Для VPC выберите значение, которое соответствует значению в описании Load Balancer. Вероятнее всего это НЕ ТОТ VPC, который используется по умолчанию.
      • Перейдите в раздел Advanced health check settings и при необходимости измените указанные ниже параметры. 
        • Для параметра Healthy threshold введите значение 2.
        • Для параметра Unhealthy threshold введите значение 2.
        • Для параметра Timeout введите значение 5.
        • Для параметра Interval введите значение 6.
    • Выберите Создать.
    создание целевых групп
  • Шаг 5. Настройка Application Load Balancer: прослушиватель

    Прослушиватель ALB проверяет наличие входящих запросов на подключение к этому ALB.

    Добавление прослушивателя к ALB

    • Перейдите в раздел балансировщика нагрузки в консоли EC2.
    • Установите флажок рядом с элементом demo, чтобы отобразить сведения об этом балансировщике нагрузки.
    • Перейдите на вкладку Прослушиватели.
    • Выберите Add listener и при необходимости измените следующие параметры:
      • Для параметра Protocol:port выберите вариант HTTP и введите значение 80.
      • Для параметра Default action(s) выберите вариант Forward to и введите в поле Target group значение api.
    • Нажмите кнопку Сохранить.
    прослушиватель для ALB
  • Шаг 6. Развертывание монолитного приложения в качестве сервиса

    Разверните монолитное приложение как сервис в кластере.

    • Перейдите в консоль Amazon ECS и в строке меню слева выберите пункт Clusters.
    • Выберите кластер BreakTheMonolith-Demo, перейдите на вкладку Сервисы и выберите пункт Создать
    • На странице Настройка сервиса измените указанные ниже параметры (а для параметров, не указанных ниже, оставьте значения, используемые по умолчанию). 
      • Для параметра Тип запуска выберите значение EC2.
      • Для параметра Service name введите значение api
      • Для параметра Number of tasks введите значение 1.
      • Нажмите Next step.
    • На странице Configure network в разделе Load balancing выберите Application Load Balancer.
      Отобразятся дополнительные параметры Service IAM role и Load balancer name.
      • Для параметра Роль IAM сервиса выберите значение BreakTheMonolith-Demo-ECSServiceRole.
      • Убедитесь, что для параметра Имя балансировщика нагрузки выбрано значение demo.
    • В разделе Container to load balance выберите Add to load balancer.
      Отобразится дополнительная информация с меткой api:3000.
    • В разделе api:3000 выполните указанные ниже действия.
      • В поле Production listener port выберите 80:HTTP.
      • Для параметра Target group name выберите нужную группу: api.
      • Нажмите Next step.
    • На странице Set Auto Scaling оставьте значения, используемые по умолчанию, и нажмите Next step.
    • На странице Review проверьте параметры и выберите пункт Create Service.
    • После того как сервис будет создан, выберите пункт View Service.
    API сервисов Amazon ECS

    Отличная работа! Теперь у вас есть работающий сервис. На то, чтобы контейнер был зарегистрирован как работоспособный и начал принимать трафик, может потребоваться около минуты.

  • Шаг 7. Тестирование монолитного приложения

    Протестируйте развертывание, проверив доступность сервиса из Интернета и выполнив команду проверки связи.

    Чтобы найти URL-адрес сервиса, выполните указанные ниже действия.

    • Перейдите в раздел Load Balancers консоли EC2.
    • Выберите балансировщик нагрузки с именем demo.
    • На вкладке Description скопируйте DNS-имя и вставьте его в новую вкладку или окно браузера.
    • Должно отобразиться сообщение Ready to receive requests.


    Просмотр каждой части сервиса:
    приложение node.js направляет трафик к каждому исполнителю на основе URL-адресов. Чтобы отобразить исполнитель, просто добавьте его имя api/[имя_исполнителя] в конец DNS-имени, как показано ниже.

    • http://[DNS-имя]/api/users
    • http://[DNS-имя]/api/threads
    • http://[DNS-имя]/api/posts

    Вы также можете добавить номер записи в конец URL-адреса, чтобы проанализировать конкретную запись. Например, http://[DNS-имя]/api/posts/1 или http://[DNS-имя]/api/users/2

    демонстрация пользователя