Elastic Beanstalk позволяет развертывать приложения и управлять ими в облаке AWS без необходимости изучать инфраструктуру, в которой работают эти приложения.
С Elastic Beanstalk вы можете запускать веб-сайт, веб-приложение или веб-API, который обслуживает HTTP-запросы, но вы также можете запускать рабочие приложения для выполнения длинных задач. Elastic Beanstalk поддерживает несколько предварительно сконфигурированных платформ, включая Go , .NET или Java (только Java 8), но также и общую платформу Docker .
Вы просто загружаете свое приложение с помощью AWS CLI , AWS EB CLI или с Elastic Beanstack console , а Elastic Beanstalk автоматически обрабатывает все остальное.
В этой записи блога вы узнаете, как запустить среду контейнеров Docker с приложением на основе Quarkus на Elastic Beanstalk.
Примечание: этот блог не описывает создание приложения с нуля. Вместо этого оно основано на приложении API REST Quarkus Pet Clinic, которое я создал для начала работы с сообщением в блоге Quarkus . Исходный код можно найти на Github: https://github.com/kolorobot/quarkus-petclinic-api
TL; DR: создайте пакет и загрузите его в Elastic Beanstalk
Создать новое приложение в консоли Elastic Beanstalk
Если вы еще не являетесь клиентом AWS, вам необходимо создать учетную запись AWS. Регистрация позволяет получить доступ к Elastic Beanstalk и другим нужным вам сервисам AWS.
- Откройте консоль Elastic Beanstalk, используя эту ссылку: https://us-west-2.console.aws.amazon.com/elasticbeanstalk/home?region=us-west-2#/gettingStarted?applicationName=Pet Clinic API
- Для
PlatformвыберитеDocker - В качестве
Application CodeвыберитеSample Application - Выберите
Configure more options- Найдите
Databaseв списке и нажмите «Modify - Для
Engineвыберитеpostgres - Для
Engine versionвыберите11.6 - Установите
usernameиpasswordна ваш выбор - Для
Retentionвыберите «Deleteесли вы не хотите создавать моментальный снимок. - Нажмите
Save.
- Найдите
- Нажмите
Create app
Elastic Beanstalk создаст образец приложения для вас со всеми необходимыми ресурсами (включая RDS).
Ссылка на приложение будет видна вам после создания приложения.
Примечание. Приведенные выше действия основаны на официальной документации: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html.
Preapare пакет приложений
- Клонировать хранилище
|
1
|
git clone https://github.com/kolorobot/quarkus-petclinic-api |
- Перейдите в каталог приложения и выполните:
|
1
|
./mvnw clean package assembly:single -Dquarkus.package.uber-jar=true |
Приведенная выше команда создает пакет со следующим содержимым:
|
01
02
03
04
05
06
07
08
09
10
11
|
$ unzip -l target/quarkus-petclinic-api-1.0.1-eb.zipArchive: target/quarkus-petclinic-api-1.0.1-eb.zip Length Date Time Name--------- ---------- ----- ---- 0 03-15-2020 13:35 config/ 2059 03-15-2020 13:34 Dockerfile 369 03-15-2020 13:34 config/application.properties 38604205 03-15-2020 13:35 quarkus-petclinic-api-1.0.1-runner.jar--------- ------- 38606633 4 files |
Загрузить приложение на Elastic Beanstalk
- Загрузите пакет с помощью консоли Elastic Beanstalk
- Перейдите на страницу https://console.aws.amazon.com/elasticbeanstalk.
- Перейдите на панель инструментов приложения.
- Нажмите
Upload and Deploy - Выберите пакет, созданный на предыдущем шаге, и нажмите
Deploy - Подождите, пока приложение будет развернуто
Вот и все. В следующем параграфе вы узнаете, как подготовить пакет с помощью Maven.
Шаг за шагом: настройте приложение для Elastic Beanstalk
Конфигурация времени выполнения
Давайте начнем с конфигурации приложения, специфичной для среды Elastic Beanstalk.
Quarkus предлагает несколько вариантов переопределения свойств во время выполнения. Я решил использовать подход с файлом конфигурации, размещенным в файле config/application.properties . Этот файл будет автоматически прочитан Quarkus, и все свойства этого файла имеют приоритет над значениями по умолчанию.
Создайте файл src/main/resources/application-eb.properties и установите для quarkus.http.port значение 5000 поскольку это порт по умолчанию для веб-приложения Elastic Beanstalk.
Следующие свойства относятся к конфигурации источника данных, поскольку приложение будет подключаться к RDS (PostgreSQL). Информация о соединении экземпляра RDS доступна приложению, работающему на Elastic Beanstalk, через RDS_* среды RDS_* , доступные для работающего контейнера. Для использования этого установите следующие свойства:
|
1
2
3
|
quarkus.datasource.url=jdbc:postgresql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}quarkus.datasource.username=${RDS_USERNAME}quarkus.datasource.password=${RDS_PASSWORD} |
Подробнее о подключении вашего приложения к RDS: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html.
Dockerfile
Elastic Beanstalk использует Dockerfile для создания и запуска образа. Файл должен находиться в root каталога приложения. Я использовал оригинальный src/main/docker/Dockerfile.jvm и сделал следующие настройки:
- Скопируйте
config/application.propertiesв контейнер - Выставить порт
5000вместо8080
Полный src/main/docker/Dockerfile.eb :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.1ARG JAVA_PACKAGE=java-11-openjdk-headlessARG RUN_JAVA_VERSION=1.3.5ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'# Install java and the run-java script# Also set up permissions for user `1001`RUN microdnf install openssl curl ca-certificates ${JAVA_PACKAGE} \ && microdnf update \ && microdnf clean all \ && mkdir /deployments \ && chown 1001 /deployments \ && chmod "g+rwX" /deployments \ && chown 1001:root /deployments \ && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ && chown 1001 /deployments/run-java.sh \ && chmod 540 /deployments/run-java.sh \ && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.securityENV JAVA_OPTIONS="-Djava.util.logging.manager=org.jboss.logmanager.LogManager"COPY *-runner.jar /deployments/app.jarCOPY config /deployments/configEXPOSE 5000USER 1001ENTRYPOINT [ "/deployments/run-java.sh" ] |
Создать пакет приложений с Maven
До сих пор были созданы следующие два файла:
-
src/main/resources/application-eb.propertiesсо свойствами, специфичными для среды Elastic Beanstalk -
src/main/docker/Dockerfile.ebс конфигурацией контейнера для среды Elastic Beanstack.
Для завершения настройки и настройки сборки пакета мы будем использовать Copy Rename Maven Plugin Maven Assembly Plugin .
Подготовьте файлы для сборки
Измените pom.xml и добавьте цель, чтобы скопировать и переименовать файлы, которые будут сохранены в окончательном zip файле пакета приложения:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<build> <plugin> <groupId>com.coderplus.maven.plugins</groupId> <artifactId>copy-rename-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>copy-file</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <fileSets> <fileSet> <sourceFile>src/main/resources/application-eb.properties</sourceFile> <destinationFile>target/eb/application.properties</destinationFile> </fileSet> <fileSet> <sourceFile>src/main/docker/Dockerfile.eb</sourceFile> <destinationFile>target/eb/Dockerfile</destinationFile> </fileSet> </fileSets> </configuration> </execution> </executions> </plugin></build> |
Цель copy-file будет выполняться во время фазы package и будет копировать ранее созданные файлы в target/eb с target/eb именами.
Настроить сборку плагина
Maven Assembly Plugin будет использоваться для создания пакета приложения. Добавьте приведенную ниже конфигурацию в pom.xml :
|
01
02
03
04
05
06
07
08
09
10
11
|
<build> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.2.0</version> <configuration> <descriptors> <descriptor>src/assembly/eb.xml</descriptor> </descriptors> </configuration> </plugin></build> |
Теперь создайте дескриптор src/assembly/eb.xml который инструктирует подключаемый модуль сборки создать zip Dockerfile , содержащий Dockerfile , config/application.properties и Quarkus uber-jar . Все три файла будут находиться в root архива:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<assembly> <id>eb</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <files> <file> <source>target/eb/Dockerfile</source> <outputDirectory></outputDirectory> <filtered>false</filtered> </file> <file> <source>target/eb/application.properties</source> <outputDirectory>config</outputDirectory> <filtered>false</filtered> </file> <file> <source>target/${project.build.finalName}-runner.jar</source> <outputDirectory></outputDirectory> <filtered>false</filtered> </file> </files></assembly> |
На этом настройка завершена. Теперь вы можете создать пакет (сборку), выполнив:
Со всеми вышеуказанными изменениями мы можем создать пакет:
|
1
|
./mvnw clean package assembly:single -Dquarkus.package.uber-jar=true |
Протестируйте пакет локально
Чтобы проверить пакет локально, выполните:
|
1
2
|
unzip target/quarkus-petclinic-api-1.0.1-eb.zip -d target/eb-dist && cd target/eb-distdocker build -t quarkus/petclinic-api-jvm-eb . |
Перед запуском контейнера запустите базу данных:
|
1
|
docker run -it --name petclinic-db -p 5432:5432 -e POSTGRES_DB=petclinic -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -d postgres:11.6-alpine |
Запустите приложение, передав переменные среды RDS и связавшись с контейнером базы данных:
|
1
|
docker run -i --rm -p 8080:5000 --link petclinic-db -e RDS_HOSTNAME=petclinic-db -e RDS_PORT=5432 -e RDS_DB_NAME=petclinic -e RDS_USERNAME=petclinic -e RDS_PASSWORD=petclinic quarkus/petclinic-api-jvm-eb |
Откройте http://localhost:8080 в вашем браузере, и вы должны увидеть домашнюю страницу.
Исходный код
Исходный код этой статьи можно найти на Github: https://github.com/kolorobot/quarkus-petclinic-api
Рекомендации
- https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/single-container-docker.html
- https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html
- https://quarkus.io/guides/config#package-and-run-the-application
Смотрите также
|
См. Оригинальную статью здесь: Разверните приложение Quarkus на AWS Elastic Beanstalk Мнения, высказанные участниками Java Code Geeks, являются их собственными. |