1. Обзор
В этом руководстве мы покажем, как развернуть приложение из нашего руководства Bootstrap a Simple Application с использованием Spring Boot в AWS Elastic Beanstalk .
В рамках этого мы:
- Установите и настройте инструменты AWS CLI
- Создайте проект Beanstalk и разверните MySQL
- Настройте приложение для MySQL в AWS RDS
- Развертывание, тестирование и масштабирование приложения
2. Конфигурация AWS Elastic Beanstalk
В качестве предварительного условия мы должны были зарегистрироваться на AWS и создать среду Java 8 на Elastic Beanstalk . Нам также необходимо установить интерфейс командной строки AWS , который позволит нам подключиться к нашей среде.
Итак, учитывая это, нам нужно войти в систему и инициализировать наше приложение:
cd .../spring-boot-bootstrap
eb init
>
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
(default is 3):
Как показано выше, нам предлагается выбрать регион.
Наконец, мы можем выбрать приложение:
>
Select an application to use
1) foreach-demo
2) [ Create new Application ]
(default is 2):
В это время CLI создаст файл с именем .elasticbeanstalk/config.yml .
В этом файле будут сохранены значения по умолчанию для проекта.
3. База данных
Теперь мы можем создать базу данных в веб-консоли AWS или с помощью CLI, используя:
eb create --single --database
Нам нужно будет следовать инструкциям, чтобы предоставить имя пользователя и пароль.
Теперь, когда наша база данных создана, давайте настроим учетные данные RDS для нашего приложения. Мы сделаем это в профиле Spring с именем beanstalk
, создав src/main/resources/application-beanstalk.properties
в нашем приложении:
spring.datasource.url=jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name}
spring.datasource.username=${rds.username}
spring.datasource.password=${rds.password}
Spring будет искать свойство с именем rds.hostname
как переменную окружения с именем RDS_HOSTNAME
. Та же логика применима и к остальным.
4. Применение
Теперь мы добавим профиль Maven для Beanstalk в
pom.xml
:
<profile>
<id>beanstalk</id>
<build>
<finalName>${project.name}-eb</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/cloud/config/*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Далее мы укажем артефакт в файле конфигурации Elastic Beanstalk .elasticbeanstalk/config.yml
:
deploy:
artifact: target/spring-boot-bootstrap-eb.jar
И, наконец, мы включим в Elastic Beanstalk две переменные окружения. Первый укажет активные профили Spring, а второй обеспечит использование порта 5000 по умолчанию, ожидаемого Beanstalk:
eb setenv SPRING_PROFILES_ACTIVE=beanstalk,mysql
eb setenv SERVER_PORT=5000
5. Развертывание и тестирование
Теперь мы готовы к сборке и развертыванию:
mvn clean package spring-boot:repackage
eb deploy
Далее проверим статус и определим DNS-имя развернутого приложения:
eb status
И наш вывод должен быть примерно таким:
Environment details for: ForEachDemo-env
Application name: foreach-demo
Region: us-east-2
Deployed Version: app-181216_154233
Environment ID: e-42mypzuc2x
Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.7.7
Tier: WebServer-Standard-1.0
CNAME: ForEachDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com
Updated: 2018-12-16 13:43:22.294000+00:00
Status: Ready
Health: Green
Теперь мы можем протестировать приложение — обратите внимание на использование поля CNAME в качестве DNS для заполнения URL-адреса.
Теперь добавим книгу в нашу библиотеку:
http POST http://foreachdemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com/api/books title="The Player of Games" author="Iain M. Banks"
И, если все хорошо, мы должны получить что-то вроде:
HTTP/1.1 201
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Wed, 19 Dec 2018 15:36:31 GMT
Expires: 0
Pragma: no-cache
Server: nginx/1.12.1
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
{
"author": "Iain M. Banks",
"id": 5,
"title": "The Player of Games"
}
6. Масштабирование приложения
Наконец, мы масштабируем развертывание для запуска двух экземпляров:
eb scale 2
Beanstalk теперь будет запускать 2 экземпляра приложения и распределять трафик между обоими экземплярами.
Автоматическое масштабирование для рабочей среды требует немного больше усилий , поэтому мы оставим это на другой день.
7. Заключение
В этом уроке мы:
- Установил и настроил интерфейс командной строки AWS Beanstalk и настроил онлайн-среду.
- Развернул службу MySQL и настроил свойства подключения к базе данных.
- Создали и развернули наше настроенное приложение Spring Boot, и
- Протестировано и масштабировано приложение
Для получения более подробной информации ознакомьтесь с документацией Beanstalk по Java .
Как всегда, полный исходный код наших примеров находится здесь, на GitHub .