В этом модуле описано, как использовать 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 Elastic Container Service не взимается. Вы платите за ресурсы AWS (например, инстансы Amazon 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 to Amazon S3» (Загрузить шаблон на Amazon S3) и выберите файл 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. Нажмите «Next» (Далее).
    6. Другие параметры на этой странице менять не обязательно. Нажмите «Next» (Далее).
    7. Поставьте флажок в нижней части следующей страницы и нажмите кнопку «Create» (Создать). Напротив стека отобразится оранжевая надпись «CREATE_IN_PROGRESS» (Идет процесс создания). Для проверки прогресса можно нажать кнопку обновления в верхнем правом углу экрана. Обычно этот процесс занимает менее 5 минут.
    создание стека

    ⚐ ПРИМЕЧАНИЕ. Для развертывания стеков AWS CloudFormation можно также использовать AWS CLI. Просто добавьте в этот код свой регион и запустите в терминале из папки amazon-ecs-nodejs-microservices/3-microservices на своем компьютере.

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

    проверка кластера
    • Щелкните по кластеру, выберите вкладку «Tasks» (Задачи); запущенных задач не будет.
    задачи
    • Выберите вкладку «ECS Instances» (Инстансы ECS), на которой увидите два инстанса EC2, созданных по шаблонам AWS CloudFormation.
    Инстансы ECS
  • Шаг 3. Запись определения задачи

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

    • Перейдите в меню «Task Definitions» (Определения задач) в левой части консоли Amazon ECS.
    • Выберите «Create new Task Definition» (Создать новое определение задачи).
    • «Task Definition Name» (Имя определения задачи) = «api».
    • Выберите «Add Container» (Добавить контейнер).
    • Укажите следующие параметры.
      • Если параметр не определен, оставьте его пустым или со значением по умолчанию: «Container name» (Имя контейнера) = «api», «image» (образ) = «[идентификатор_аккаунта].dkr.ecr.[регион].amazonaws.com/api:v1» (это URL-адрес вашего образа репозитория ECR из предыдущего шага).
      • Убедитесь, что тег «:v1» совпадает со значением, которое вы использовали в модуле 1, и добавьте образ. «Memory» (Память) = «Hard limit: 256» (Жесткое ограничение: 256); «Port mappings» (Привязки порта) = «Host port:0» (Порт хоста: 0), «Container port:3000» (Порт контейнера: 3000); «CPU units» (Модули ЦП) = «256».
    • Нажмите кнопку «Add» (Добавить).
    • Выберите «Create» (Создать).
    • Теперь в консоли появится ваше определение задачи.
    определение задачи
  • Шаг 4. Настройка целевой группы в Application Load Balancer

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

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

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

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

    • Перейдите в раздел «Target Group» (Целевая группа) консоли EC2.
    • Выберите «Create target group» (Создать целевую группу).
    • Настройте целевую группу (не изменяйте значения параметров, которые не указаны ниже):
      • «Name» (Имя) = «api»;
      • «Protocol» (Протокол) = «HTTP»;
      • «Port» (Порт) = «80»;
      • «VPC» = выберите облако VPC, которое соответствует вашему балансировщику нагрузки из предыдущего шага. Скорее всего, это НЕ VPC по умолчанию.
      • Расширенные параметры проверки работоспособности: «Healthy threshold» (Порог работоспособности) = «2», «Unhealthy threshold» (Порог неработоспособности) = «2», «Timeout» (Время ожидания) = «5», «Interval» (Интервал) = «6».
    • Выберите «Create» (Создать).
    создание целевых групп
  • Шаг 5. Настройка прослушивателя в Application Load Balancer

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

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

    • Перейдите в раздел «Load Balancer» (Балансировщик нагрузки) в консоли EC2.
    • Должен отобразиться уже существующий балансировщик нагрузки с именем demo.
    • Установите флажок, чтобы увидеть сведения об этом балансировщике.
    • Выберите вкладку «Listeners» (Прослушиватели).
    • Выберите «Create Listener» (Создать прослушиватель):
      • «Protocol» (Протокол) = «HTTP»;
      • «Port» (Порт) = «80»;
      • «Default target group» (Целевая группа по умолчанию) = «api».
    • Нажмите кнопку «Create» (Создать).
    прослушиватель в ALB
  • Шаг 6. Развертывание монолитного приложения в виде сервиса

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

    • Перейдите в меню «Clusters» (Кластеры) в левой части консоли Amazon ECS.
    • Выберите свой кластер: BreakTheMonolith-Demo-ECSCluster.
    • На вкладке сервисов выберите «Create» (Создать).
    • Настройте сервис (не изменяйте значения по умолчанию): «Service name» (Имя сервиса) = «api», «Number of tasks» (Количество задач) = «1».
    • Выберите «Configure ELB» (Настроить ELB):
      • «ELB Type» (Тип ELB) = «Application Load Balancer».
      • Для роли IAM выберите значение «BreakTheMonolith-Demo-ECSServiceRole».
      • Укажите «Load Balancer ELB name» (Имя ELB для балансировщика нагрузки) = «demo».
      • Нажмите кнопку «Add to ELB» (Добавить в ELB).
    • Добавьте сервис в целевую группу:
      • «Listener port» (Порт прослушивателя) = «80:HTTP»;
      • «Target group name» (Имя целевой группы) = «выберите свою группу: api».
    • Выберите «Save» (Сохранить).
    развертывание сервиса
    • Выберите «Create Service» (Создать сервис).
    • Выберите «View Service» (Просмотреть сервис).
    дополнительные конфигурации

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

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

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

    Чтобы найти URL-адрес своего сервиса:

    • Перейдите в раздел «Load Balancer» (Балансировщик нагрузки) в консоли EC2.
    • Выберите балансировщик нагрузки «demo».
    • Скопируйте и вставьте значение имени 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.

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