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

Если вы хотите развернуть приложение на управляемой платформе, выбрав среду выполнения, AWS App Runner - правильный выбор. Вы можете запустить весь API со средой выполнения Docker, не беспокоясь о конфигурации с вашей стороны. AWS App Runner - это сервис AWS, который обеспечивает быстрый, простой и экономичный способ развертывания прямо из исходного кода или образа контейнера непосредственно в масштабируемое и безопасное веб-приложение в облаке AWS.

Вы можете докеризовать Java API и развернуть его в среде выполнения Docker. Образы Docker можно извлечь из ECR и т. Д. В этом посте мы увидим, как запускать Java со средой выполнения Docker на AWS App Runner.

  • Предварительные требования
  • Пример проекта
  • Dockerize проекта
  • Запуск API в Docker
  • Отправка образа Docker в ECR
  • Создание службы запуска приложений
  • Тестирование API
  • Журналы приложений
  • Резюме
  • Заключение

Предпосылки

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

Как разработать и собрать Java Rest API

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

Основы Докера

Вам необходимо понимать концепции Docker, такие как создание образов, управление контейнерами и т. Д. Ниже приведены некоторые ссылки, которые вы можете понять о Docker, если вы новичок.

Предварительные требования AWS

Amazon - ведущий поставщик облачных услуг и пионер облачных вычислений. AWS предоставляет более 200 сервисов, и очень важно знать, какой сервис выбрать для своих нужд.

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

Как начать работу с AWS

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

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

// clone the project
git clone https://github.com/bbachi/java-webservice-example.git

Как только вы клонируете проект и импортируете проект как существующие проекты maven

Запустите проект как приложение Java, поскольку в Spring boot есть встроенный контейнер tomcat.

Вы можете получить доступ к API по этому URL-адресу

http://localhost:8080/api/todo/tasks

Dockerize проект

Мы видели, как собрать проект и настроить приложение обычным способом. Давайте посмотрим, как мы можем создать Dockerfile и запустить то же приложение в Docker.

Во-первых, давайте создадим папку с именем docker и поместим туда сгенерированный файл war с плагином maven. Если вы посмотрите на сборочную часть pom.xml, у нас есть цель, называемая переупаковкой, чтобы поместить упакованный файл войны в папку докера при сборке приложения. Одним из преимуществ использования отдельной папки является то, что вам не нужно отправлять весь код приложения демону Docker при создании образа.

Давайте зайдем в корень приложения и запустим команду mvn mvn clean install.. Теперь у нас должен быть файл war в папке docker.

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

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

// change directory
cd docker
// build the image
docker build -t restapi .
// list the image
docker images

Запуск API в Docker

Теперь у нас есть образ докера, и давайте запустим контейнер, и как только он будет запущен, вы сможете получить доступ к API по адресу http: // localhost: 8080 / api / todo / tasks

// run the container
docker run -d -p 8080:80 --name restapi restapi
// list the container
docker ps
// logs
docker logs restapi
// exec into running container
docker exec -it restapi /bin/sh

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

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

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

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

Консоль AWS

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

AWS CLI

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

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

Пришло время создать репозиторий с помощью следующей команды

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

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

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

docker tag restapi:latest 864227929192.dkr.ecr.us-east-2.amazonaws.com/rest-api:v1

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

// list the images
docker images
// push the image
docker push 864227929192.dkr.ecr.us-east-2.amazonaws.com/rest-api:v1

Создание службы запуска приложений

Мы видели, как докеризовать Java REST API, отправив изображение в ECR в приведенных выше разделах. Давайте создадим App Runner из раздела служб.

Поскольку мы используем образ Docker, нам нужно выбрать источник как Container Registry, а поставщика как Amazon ECR.

Вы можете выбрать руководство в настройках развертывания и выбрать новую роль службы, как показано ниже. Теперь вы можете нажать «Далее».

Следующие важные вещи - это имя службы и порт, который прослушивает API. Давайте дадим имя службы и порт, как показано ниже.

Наконец, вы можете нажать кнопку «Создать и развернуть» на последней странице обзора.

Как только вы нажмете на эту кнопку, служба будет создана, как показано ниже. Для завершения развертывания требуется некоторое время.

Если все пойдет хорошо, вы увидите следующее сообщение, и статус изменится на «Работает», как показано ниже.

Тестирование API

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

https://rkwufvbhmm.us-east-2.awsapprunner.com/api/todo/tasks

Журналы приложений

Журналы приложений можно увидеть в разделе журналов, как показано ниже.

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

Резюме

  • Если вы хотите развернуть приложение на управляемой платформе, выбрав среду выполнения, AWS App Runner - правильный выбор.
  • Вы можете запустить весь API со средой выполнения Docker, не беспокоясь о конфигурации с вашей стороны.
  • Вы можете докеризовать Java API и развернуть его в среде выполнения Docker. Образы Docker можно извлечь из ECR и т. Д.
  • Amazon Elastic Container Registry (ECR) - это полностью управляемый реестр контейнеров Docker, который упрощает разработчикам хранение, управление и развертывание образов контейнеров Docker.
  • AWS App Runner - это сервис AWS, который обеспечивает быстрый, простой и экономичный способ развертывания прямо из исходного кода или образа контейнера непосредственно в масштабируемое и безопасное веб-приложение в облаке AWS.

Заключение

Мы увидели, как запустить Java API с Docker Runtime на AWS App Runner. В будущих публикациях мы увидим, как выполнять автоматическое развертывание, настраивать переменные среды, связывать пользовательские домены и т. Д. И другие элементы конфигурации.