Статьи

Запустите приложение Spring Boot на AWS, используя Elastic Beanstalk

Хотя ранее я писал о том, как легко запустить и запустить приложение Spring Boot на AWS с помощью Boxfuse, я думаю, что было бы неплохо иметь представление о некоторых альтернативных способах достижения этого. Одна из этих альтернатив — использование AWS Elastic Beanstalk . В этом посте я опишу базовую конфигурацию, чтобы ваше приложение Spring Boot работало в облаке на AWS. После создания Elastic Beanstalk у вас будет по крайней мере один экземпляр EC2, работающий на AWS с Elastic Load Balancer перед ним. Также предоставляется группа автоматического масштабирования и, конечно, некоторые группы безопасности . Когда помещено в диаграмму, это выглядит следующим образом (кстати, часть базы данных не будет использоваться в примере этого поста):

AEB-architecture2

Я предполагаю, что у вас уже есть аккаунт для AWS. Если нет, то получите бесплатную подписку на первый год (соблюдайте условия, чтобы она оставалась бесплатной).

Настройка AWS IAM
Первый шаг — создание нового пользователя, который сможет запускать AWS Elastic Beanstalk. У этого пользователя будут только эти разрешения, поэтому, если данные учетной записи могут попасть в чужие руки, ущерб будет сведен к минимуму (объяснение здесь ). Когда вы создаете своего пользователя, не забудьте загрузить свои учетные данные для этого пользователя, они понадобятся вам позже.
Я поместил нового пользователя в группу «spring-boot-users» и назначил для этой группы следующие роли и политики:
AWSElasticBeanstalkFullAccess ‘:

скриншот-на-июля-12-11-22-06

Пока мы здесь, вы также можете создать следующие две роли (они должны создаваться автоматически при создании вашей первой среды Elastic Beanstalk с помощью консоли управления или интерфейса командной строки EB, но я помню, у меня были некоторые проблемы с ними, и я сам их создал) :

Установите клиентский интерфейс Elastic Beanstalk
Со всем этим мы почти готовы испачкать руки. Я предпочитаю использовать CLI вместо консоли управления, потому что, используя CLI, вы можете написать весь сценарий, который значительно облегчает жизнь. Чтобы установить CLI (я использую Mac), просто запустите:
brew install awsebcli
Настройте свои учетные данные нового пользователя для использования с CLI. Я добавляю их в мой файл ~ / .aws / credentials следующим образом:

1
2
3
4
5
6
7
[default]
aws_access_key_id = 1234567890
aws_secret_access_key = hrhyueiryt983745983erti+UXsF6IvC
 
[spring-boot]
aws_access_key_id = 0987654321
aws_secret_access_key = hdgdfghkjg384957893745dc7/Xrsekgu7V4

Поэтому в свой файл учетных данных я добавил профиль «spring-boot» с соответствующим ключом и секретом.

Настройте свой проект Spring Boot
Теперь все настроено для запуска и запуска среды EB. Перейдите в папку проекта Spring-boot и в этом каталоге выполните следующую команду:
eb init
Конфигурация для EB теперь будет настроена на основе введенного вами входа:

скриншот-на-июля-12-11-54-41

В папке вашего проекта вы теперь увидите новую папку «.elasticbeanstalk» с файлом «config.yml». Поскольку я создаю свое приложение с помощью Maven, я добавляю следующую строку в config.yml, чтобы он развернул мою последнюю версию снимка сборки в Elastic Beanstalk:
deploy:
artifact: target/jwt-spring-security-demo-1.0.0-SNAPSHOT.jar

Также я ввожу значение для профиля, чтобы CLI выбрал правильные учетные данные из моего файла учетных данных, который я изменил ранее. Файл конфигурации заканчивается так:

01
02
03
04
05
06
07
08
09
10
11
12
13
branch-defaults:
  master:
    environment: null
    group_suffix: null
deploy:
  artifact: target/jwt-spring-security-demo-1.0.0-SNAPSHOT.jar
global:
  application_name: spring-boot-demo
  default_ec2_keyname: spring-boot-demo
  default_platform: Java 8
  default_region: eu-central-1
  profile: spring-boot
  sc: git

Создайте экземпляр Elastic Beanstalk
Если вы выполните «eb create» в приглашении и примете значения по умолчанию, вы получите свой собственный экземпляр Elastic Beanstalk с приложением Spring Boot (обратите внимание, что для запуска и запуска всего требуется несколько минут). Когда создание завершено, вы можете увидеть свой экземпляр Elastic Beanstalk в Консоли управления:

скриншот-на-июля-12-15-41-56

Протестируйте экземпляр Elastic Beanstalk
Когда вы сейчас запустите ‘eb open’, браузер начнет указывать на ваше приложение. Прямо сейчас мой говорит 502 Bad Gateway:

скриншот-на-июля-12-13-16-07

Осталась одна проблема, которую я должен решить. Стек по умолчанию поставляется с экземпляром EC2, на котором запущен Nginx в качестве обратного прокси-сервера, и он прослушивает порт 80. Мои приложения с весенней загрузкой работают на порту 8888, но этот порт недоступен извне (не открывается по умолчанию группа безопасности, которая была создана Elastic Beanstalk). Проблема может быть решена тремя способами (как минимум):

  • Откройте порт 8888 на экземпляре EC2 и попросите Elastic Load Balancer «поговорить» с этим портом. Таким образом, мы обходим Nginx через порт 80.
  • Настройте Nginx так, чтобы он пропускал входящий трафик через порт 80 на 8888.
  • Сделайте наше приложение Spring Boot запущенным на порту 5000, поскольку по умолчанию Nginx также пересылает его.

Я выберу последний вариант для этого поста, чтобы конфигурация Elastic Beanstalk была простой. После изменения порта в файле application.yml, вот так:
server:
port: 5000

и перестроив приложение, я могу повторно развернуть его с помощью:
eb deploy
Теперь, когда я получаю доступ к URL-адресу « http://spring-boot-demo-dev2.eu-central-1.elasticbeanstalk.com/hello », я получаю ожидаемый результат:

скриншот-на-июля-12-16-29-45

Вот именно для этого поста. О AWS Elastic Beanstalk можно рассказать намного больше в сочетании с приложением Spring Boot, которое я покажу в следующих статьях.