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

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

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

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

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

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

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

// clone the project
git clone https://github.com/bbachi/react-java-ecs.git
// change directory
cd react-java-ecs
// install
mvn clean install
// Run the app
java -jar target/users-0.0.2-SNAPSHOT.jar

Предпосылки

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

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

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

Dockerize проект

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

нам нужно создать Dockerfile, который создает образ Docker. Вот файл, который начинается с команды FROM и базового образа openjdk: 8-jre-alpine. Скопируйте сгенерированный файл войны и, наконец, команду CMD, которая запускается при создании образа.

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

// build the image
docker build -t react-java-image
// running on Image
docker run -d -it -p  8080:8080 --name react-java-ui react-java-image
// list the images you just built
docker images
//list containers
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 ecr create-repository \     
     --repository-name frontend/react-java\     
     --image-scanning-configuration scanOnPush=true \
     --image-tag-mutability IMMUTABLE     
     --region us-east-2

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

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

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

docker tag react-java-image 032840272187.dkr.ecr.us-east-2.amazonaws.com/frontend/react-java:v1

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

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

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

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

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

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

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

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

Убедитесь, что вы выбрали правильные блоки памяти и ЦП, например, для памяти 512 MIB вам нужно установить 256 блоков ЦП

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

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

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

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

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

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

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

Убираться

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

ECR

Нам нужно удалить репозиторий в ECR.

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.