Недавно я работал над испытательным веб-приложением, которое я хотел развернуть в общедоступном облаке для быстрой демонстрации.
Я решил использовать Amazon, так как у меня уже был опыт работы с ним. Amazon предлагает несколько различных способов развертывания веб-приложения Java.
Amazon EC2
EC2 дает нам гибкость в установке и настройке того, что мы хотим на коробке. Это очень гибкое решение для тех, кто хочет контролировать, как развертывается и работает их приложение, но недостатком является то, что нам приходится выполнять большую часть установки и настройки сервера, а также развертывать приложение самостоятельно.
AWS Эластичный бобовый стебель
Elastic Beanstalk — это простой в использовании сервис, который автоматически обрабатывает развертывание, автоматическое масштабирование, балансировку нагрузки и мониторинг работоспособности. Используя Elastic Beanstalk, любой может развернуть веб-приложение в облаке Amazon всего несколькими щелчками мыши.
Я решил пойти с быстрым и легким вариантом Elastic Beanstalk …
Elastic Beanstalk имеет различные способы развертывания приложений Java:
- Использование Docker
- Развертывание файла войны на сервере Tomcat
- Развертывание fatjar выполняется из командной строки
В этом посте я расскажу об опции, использующей fatjar, который в основном представляет собой один файл jar, в который включены все классы и зависимости jar.
Чтобы это работало в Amazon, jar-файл должен быть помещен в zip-файл.
Создать JAR и ZIP файлы
В этом посте я использую Maven для создания jar-файлов и zip-файлов, описанных выше. Давайте рассмотрим пример файла pom.xml, чтобы увидеть, как это делается:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
<? xml version = "1.0" encoding = "UTF-8" ?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > ... < groupId >com.kaviddiss</ groupId > < artifactId >spring-boot-aws-beanstalk</ artifactId > < version >0.0.1-SNAPSHOT</ version > < packaging >jar</ packaging > ... < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >1.3.2.RELEASE</ version > < relativePath /> <!-- lookup parent from repository --> </ parent > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > ... </ dependencies > < build > < finalName >${project.artifactId}</ finalName > < plugins > ... < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > </ plugin <plugin> <!-- NOTE: We don't need a groupId specification because the group is org.apache.maven.plugins ...which is assumed by default. --> < artifactId >maven-assembly-plugin</ artifactId > < version >2.6</ version > < executions > < execution > < id >make-zip</ id > <!-- this is used for inheritance merges --> < phase >package</ phase > <!-- bind to the packaging phase --> < goals > < goal > single </ goal > </ goals > </ execution > </ executions > < configuration > < appendAssemblyId >false</ appendAssemblyId > < descriptors > < descriptor >src/assembly/zip.xml</ descriptor > </ descriptors > </ configuration > </ plugin > </ plugins > </ build > </ project > |
Этот файл основан на файле pom.xml, созданном для веб-приложений Spring Boot по адресу http://start.spring.io/ , и содержит несколько дополнительных изменений:
- Убедитесь, что тег упаковки установлен в банку
- Spring-boot-maven-plugin позаботится о создании файла jar, включая всю зависимость jar внутри самого файла
- Сконфигурируйте подключаемый модуль maven-assembly-plugin для создания файла zip из файла jar с использованием файла дескриптора src / assembly / zip.xml
После настройки плагина maven-assembly-plugin в файле pom.xml нам также потребуется настроить дескриптор zip.xml, который сообщает плагину сборки, как создавать сам zip-файл.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
xsi:schemaLocation = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd" > < id >zip</ id > < formats > < format >zip</ format > </ formats > < includeBaseDirectory >false</ includeBaseDirectory > < fileSets > < fileSet > < directory >${project.build.directory}</ directory > < includes > < include >${project.artifactId}.jar</ include > </ includes > < outputDirectory >.</ outputDirectory > </ fileSet > </ fileSets > </ assembly > |
Как вы можете видеть выше, мы сконфигурировали вывод как zip, который является одним из многих поддерживаемых форматов.
Мы также настроили включение файла jar в каталог верхнего уровня zip-файла. И это все, что нужно Amazon для запуска приложения из командной строки,
Пример микросервиса с использованием Spring Boot
Чтобы протестировать конфигурацию maven, я создал простое веб-приложение Spring Boot (см. Ниже).
Application.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @SpringBootApplication @Controller public class Application { @RequestMapping (value = "/hello" ) public @ResponseBody String helloWorld() { return "Hello, World!" ; } public static void main(String[] args) { SpringApplication.run(Application. class , args); } } |
Этот класс Application обслуживает основной класс веб-приложения и будет точкой входа при запуске fatjar из командной строки.
Развернуть в Эластичный бобовый стебель
Если вы еще не подписались на AWS Elastic Beanstalk, вы можете перейти по этой ссылке: https://console.aws.amazon.com/elasticbeanstalk .
Оказавшись внутри консоли, нажмите на создать новую среду для приложения. Затем нажмите «Создать веб-сервер», выберите «Java» в раскрывающемся списке «Платформа» и нажмите «Запустить сейчас».
AWS настраивает прокси-сервер nginx для пересылки запросов нашему приложению, работающему на порту 8080. Чтобы сообщить nginx о порте 8080, в разделе Конфигурация -> Конфигурация программного обеспечения добавьте переменную среды с ключом и значением, установленным в PORT = 8080.
Вот и все. Если все прошло хорошо, вы сможете получить доступ к образцу веб-приложения на AWS!
Ссылка: | Развертывание микросервиса — Spring Boot fatjar для Amazon Elastic Beanstalk от нашего партнера по JCG Дэвида Кисса из блога « Создание масштабируемых корпоративных приложений» . |