Пошаговое руководство с примером проекта

AWS предоставляет более 100 сервисов, и очень важно знать, какой сервис выбрать для своих нужд. Amazon Elastic Container Service (Amazon ECS) - это высокомасштабируемая, быстрая служба управления контейнерами, которая упрощает запуск, остановку и управление контейнерами Docker в кластере инстансов Amazon EC2. Amazon ECS позволяет запускать и останавливать приложения на основе контейнеров с помощью простых вызовов API, позволяет получать информацию о состоянии вашего кластера из централизованной службы и предоставляет доступ ко многим знакомым функциям Amazon EC2.

В этом посте мы собираемся развернуть приложение React в среде nodejs. Сначала мы докерируем наше приложение, отправляем этот образ в Amazon ECR и запускаем это приложение на Amazon ECS.

  • Пример проекта
  • Предварительные требования
  • Dockerize проекта
  • Отправка образа Docker в ECR
  • Развертывание на AWS ECS
  • Доступ к веб-приложению в браузере
  • Очистка
  • Резюме
  • Заключение

Пример проекта

Это простой проект, демонстрирующий разработку и запуск приложения React с помощью NodeJS. У нас есть простое приложение, в котором мы можем добавлять пользователей, подсчитывать и отображать их сбоку, а также извлекать их, когда захотите.

Если вы хотите попрактиковаться, вот ссылка на этот проект на Github. Вы также можете клонировать его и запустить на своем компьютере.

// clone the project
git clone https://github.com/bbachi/react-nodejs-ecs.git
// strat the api 
cd api
npm install
npm run dev
// start the react app
cd my-app
npm install
npm start

Предпосылки

  • Если вы новичок в React, перейдите по приведенной ниже ссылке о том, как разработать и собрать проект React с бэкэндом NodeJS.

Как разработать и создать приложение React с помощью NodeJS

  • Настройка учетной записи AWS: AWS предлагает уровень бесплатного пользования в течение одного года вот ссылка для его настройки.
  • После настройки у вас будет учетная запись root. Не рекомендуется использовать свою учетную запись root для выполнения каких-либо задач, вместо этого вам следует создать группу IAM с разрешениями для доступа администратора, добавить в нее пользователя и войти в систему с этим пользователем.
  • Установить AWS CLI
  • Настройте интерфейс командной строки AWS для пользователя, которого вы только что создали. Вы должны использовать эту команду aws configure, и она запросит идентификатор ключа доступа и секретный ключ.

Dockerize проект

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

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

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

// build the image
docker build -t react-node-image .
// running on Image
docker run -it -p  3080:3080 --name react-node-ui react-node-image
// list the image you just built
docker images
// list the container
docker ps

Отправка образа Docker в ECR

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

Amazon ECS работает с любым реестром Docker, таким как Docker Hub и т. Д. Но в этом посте мы увидим, как мы можем использовать Amazon ECR для хранения наших образов Docker. После того, как вы настроите учетную запись Amazon и создадите пользователя IAM с доступом администратора, первое, что вам нужно, - создать репозиторий Docker.

Вы можете создать свой первый репозиторий либо с помощью консоли AWS, либо с помощью интерфейса командной строки AWS.

Консоль AWS

Создать репозиторий с помощью консоли AWS просто, и все, что вам нужно, это дать имя.

AWS CLI

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

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com

Пришло время создать репозиторий с помощью следующей команды. Если вы уже создали с помощью консоли AWS, этот шаг можно пропустить.

aws ecr create-repository \     
     --repository-name frontend/react-node\     
     --image-scanning-configuration scanOnPush=true \
     --image-tag-mutability IMMUTABLE     
     --region us-east-1

У вас будет такой же результат.

Добавление тегов к локальному образу Docker и отправка

Ранее вы создали образ Docker на своем локальном компьютере. Пришло время пометить это изображение этим URI репозитория на изображении выше.

docker tag react-node-image:latest 032840272187.dkr.ecr.us-east-1.amazonaws.com/frontend/react-node:v1

После того, как вы пометили изображение, пришло время отправить образ Docker в ваш репозиторий.

// list the images
docker images
// push the image
docker push 032840272187.dkr.ecr.us-east-1.amazonaws.com/frontend/react-node:v1

Развертывание на AWS ECS

Amazon ECS упрощает развертывание, управление и масштабирование контейнеров Docker, в которых выполняются приложения, службы и пакетные процессы. Amazon ECS размещает контейнеры в кластере в соответствии с вашими потребностями в ресурсах и интегрирован со знакомыми функциями, такими как эластичная балансировка нагрузки, группы безопасности EC2, тома EBS и роли IAM. Подробнее о документации AWS можно узнать здесь.

Агент контейнера Amazon ECS выполняет вызовы API Amazon ECS от вашего имени. Для экземпляров контейнера, на которых запущен агент, требуется политика и роль IAM, чтобы служба знала, что агент принадлежит вам. Нам нужно добавить политику AmazonEC2ContainerServiceforEC2Role к пользователю, которого мы создали выше.

Это объекты AWS ECS и их взаимосвязь.

Первый шаг - определить информацию, относящуюся к контейнеру. У нас уже есть контейнер, хранящийся в AWS ECR. Давайте определим его с помощью специальной конфигурации.

Здесь нам нужно настроить следующие важные вещи: имя контейнера: вы можете указать любое имя, которое хотите, Изображение: вы должны указать полный URI изображения с правильным тегом изображения, порт: мы знаем, что наше приложение прослушивание порта 3080.

Запускаем на AWS с помощью Fargate. AWS Fargate - это технология, которую можно использовать с Amazon ECS для запуска контейнеров без необходимости управлять серверами или кластерами инстансов Amazon EC2. Благодаря AWS Fargate вам больше не нужно выделять, настраивать или масштабировать кластеры виртуальных машин для запуска контейнеров. Это избавляет от необходимости выбирать типы серверов, решать, когда масштабировать кластеры или оптимизировать упаковку кластеров.

Мы не выбираем балансировщик нагрузки приложений для этого проекта.

Давайте перейдем на последнюю страницу и нажмем «Запуск», и на создание сервиса уйдет некоторое время.

Доступ к веб-приложению в браузере

Поскольку мы используем тип запуска Fargate, нам не нужно вручную определять привязки к сети. Нажмите кнопку просмотра службы и перейдите в раздел «Задачи», где вы увидите желаемое состояние, а последний статус запущен.

Нажмите на конкретную задачу, и вы перейдете на страницу с подробностями. На странице сведений щелкните идентификатор ENI в разделе «Сеть», чтобы перейти на страницу экземпляра EC2.

На странице сведений о EC2 возьмите общедоступный IP-адрес, как показано на следующей диаграмме.

Мы знаем, что наше приложение прослушивает порт 3080. Зайдите в браузер и нажмите этот адрес http://<IPv4 Public IP>:3080

Убираться

Нам нужно очистить все ресурсы, которые мы использовали здесь, если вы не хотите нести дополнительные расходы.

ECS

Нам нужно удалить кластер на ECS.

Резюме

  • Amazon Elastic Container Service (Amazon ECS) - это высокомасштабируемая, быстрая служба управления контейнерами, которая упрощает запуск, остановку и управление контейнерами Docker в кластере инстансов Amazon EC2.
  • Есть два типа запуска: EC2 и Fargate.
  • Благодаря AWS Fargate вам больше не нужно выделять, настраивать или масштабировать кластеры виртуальных машин для запуска контейнеров.
  • Нам необходимо добавить пользователю политику AmazonEC2ContainerServiceforEC2Role, чтобы агент контейнера Amazon ECS выполнял вызовы API Amazon ECS от вашего имени.
  • Вы можете использовать любой реестр образов Docker, например Docker Hub, AWS ECR и т. Д.
  • Очистите все ресурсы после того, как потренируетесь.

Заключение

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