Недавно я работал над испытательным веб-приложением, которое я хотел развернуть в общедоступном облаке для быстрой демонстрации.
Я решил использовать 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@Controllerpublic 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 Дэвида Кисса из блога « Создание масштабируемых корпоративных приложений» . |

