1. введение
Microsoft Azure теперь имеет довольно надежную поддержку Java.
В этом руководстве мы шаг за шагом продемонстрируем, как заставить наше приложение Spring Boot работать на платформе Azure.
2. Зависимость и конфигурация Maven
Во-первых, нам действительно нужна подписка Azure, чтобы использовать облачные сервисы там ; в настоящее время мы можем зарегистрировать бесплатную учетную запись здесь .
Затем войдите в платформу и создайте участника службы с помощью Azure CLI :
> az login To sign in, use a web browser to open the page \ https://microsoft.com/devicelogin and enter the code XXXXXXXX to authenticate.
> az ad sp create-for-rbac --name "app-name" --password "password" { "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "displayName": "app-name", "name": "http://app-name", "password": "password", "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt" }
Теперь мы настраиваем параметры проверки подлинности Azure service principal в вашем Maven settings.xml , с помощью следующего раздела, в разделе <серверы> :
azure-auth aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa tttttttt-tttt-tttt-tttt-tttttttttttt password AZURE
Мы будем полагаться на приведенную выше конфигурацию аутентификации при загрузке нашего приложения Spring Boot на платформу Microsoft, используя azure-webapp-maven-плагин .
Давайте добавим следующий плагин Maven в pom.xml :
com.microsoft.azure azure-webapp-maven-plugin 1.1.0
Мы можем проверить последнюю версию выпуска здесь .
Существует ряд настраиваемых свойств для этого плагина, которые будут рассмотрены в следующем введении.
3. Разверните приложение Spring Boot в Azure
Теперь, когда мы настроили среду, давайте попробуем развернуть наше приложение Spring Boot в Azure.
Наше приложение отвечает: ” привет, azure! “когда мы получим доступ” /привет “:
@GetMapping("/hello") public String hello() { return "hello azure!"; }
Платформа теперь позволяет развертывать веб-приложения Java как для Tomcat, так и для Jetty. С помощью azure-webapp-maven-plugin мы можем развернуть наше приложение непосредственно в поддерживаемых веб-контейнерах в качестве приложения по умолчанию(корневого) или развернуть через FTP.
Обратите внимание, что, поскольку мы собираемся развернуть приложение в веб-контейнерах, мы должны упаковать его в виде военного архива. В качестве краткого напоминания, у нас есть статья, в которой рассказывается, как развернуть Spring Boot WAR в Tomcat .
3.1. Развертывание веб-контейнера
Мы будем использовать следующую конфигурацию для azure-webapp-maven-plugin , если мы намерены развернуть Tomcat на экземпляре Windows:
1.8 tomcat 8.5
Для экземпляра Linux попробуйте выполнить следующую конфигурацию:
tomcat 8.5-jre8
Давайте не будем забывать об аутентификации Azure:
azure-auth spring-azure baeldung
Когда мы развернем наше приложение в Azure, оно будет отображаться как служба приложений. Поэтому здесь мы указали свойство для имени службы приложений. Кроме того, служба приложений, как ресурс, должна храниться в контейнере группы ресурсов , поэтому также требуется <Группа ресурсов> .
Теперь мы готовы нажать на спусковой крючок с помощью azure-webapp:deploy Maven target , и мы увидим результат:
> mvn clean package azure-webapp:deploy ... [INFO] Start deploying to Web App spring-baeldung... [INFO] Authenticate with ServerId: azure-auth [INFO] [Correlation ID: cccccccc-cccc-cccc-cccc-cccccccccccc] \ Instance discovery was successful [INFO] Target Web App doesn't exist. Creating a new one... [INFO] Creating App Service Plan 'ServicePlanssssssss-bbbb-0000'... [INFO] Successfully created App Service Plan. [INFO] Successfully created Web App. [INFO] Starting to deploy the war file... [INFO] Successfully deployed Web App at \ https://spring-baeldung.azurewebsites.net ...
Теперь мы можем получить доступ https://spring-baeldung.azurewebsites.net/hello и увидеть ответ: “привет, лазурный!”.
В процессе развертывания Azure автоматически создала для нас План службы приложений. Подробные сведения о планах службы приложений Azure см. в официальном документе . Если у нас уже есть план обслуживания приложений, мы можем установить свойство <Имя плана обслуживания приложений> , чтобы избежать создания нового:
ServicePlanssssssss-bbbb-0000
3.2. Развертывание FTP
Для развертывания через FTP мы можем использовать конфигурацию:
azure-auth spring-baeldung baeldung 1.8 ftp ${project.basedir}/target webapps *.war
В приведенной выше конфигурации мы заставляем плагин найти файл WAR в каталоге ${project.basedir}/target и развернуть его в каталоге webapps контейнера Tomcat.
Скажем, наш последний артефакт называется azure-0.1.war, мы увидим вывод, подобный следующему, как только мы начнем развертывание:
> mvn clean package azure-webapp:deploy ... [INFO] Start deploying to Web App spring-baeldung... [INFO] Authenticate with ServerId: azure-auth [INFO] [Correlation ID: cccccccc-cccc-cccc-cccc-cccccccccccc] \ Instance discovery was successful [INFO] Target Web App doesn't exist. Creating a new one... [INFO] Creating App Service Plan 'ServicePlanxxxxxxxx-xxxx-xxxx'... [INFO] Successfully created App Service Plan. [INFO] Successfully created Web App. ... [INFO] Finished uploading directory: \ /xxx/.../target/azure-webapps/spring-baeldung --> /site/wwwroot [INFO] Successfully uploaded files to FTP server: \ xxxx-xxxx-xxx-xxx.ftp.azurewebsites.windows.net [INFO] Successfully deployed Web App at \ https://spring-baeldung.azurewebsites.net
Обратите внимание, что здесь мы не развернули наше приложение в качестве веб-приложения по умолчанию для Tomcat, поэтому мы можем получить к нему доступ только через ‘https://spring-baeldung.azurewebsites.net/azure-0.1/hello”. Сервер ответит ” привет, azure!”, Как и ожидалось.
4. Развертывание с пользовательскими настройками приложения
В большинстве случаев наше приложение Spring Boot требует доступа к данным для предоставления услуг. Azure теперь поддерживает такие базы данных, как SQL Server, MySQL и PostgreSQL.
Для простоты мы будем использовать его встроенный MySQL в качестве источника данных, так как его конфигурация очень похожа на другие службы баз данных Azure.
4.1. Включите встроенный MySQL в Azure
Поскольку для создания веб-приложения в приложении не включена поддержка MySQL, мы должны сначала создать веб-приложение с помощью CLI:
az group create --location japanwest --name bealdung-group az appservice plan create --name baeldung-plan --resource-group bealdung-group --sku B1 az webapp create --name baeldung-webapp --resource-group baeldung-group \ --plan baeldung-plan --runtime java|1.8|Tomcat|8.5
Затем включите MySQL в приложении в портале :
После включения встроенного MySQL мы можем найти базу данных по умолчанию, URL-адрес источника данных и информацию об учетной записи по умолчанию в файле с именем MYSQLCONNSTR_xxx.txt в каталоге /home/data/mysql файловой системы.
4.2. Приложение Spring Boot С использованием MySQL В Приложении Azure
Здесь для демонстрационных нужд мы создаем сущность User и две конечные точки, используемые для регистрации и списка | пользователей:
@PostMapping("/user") public String register(@RequestParam String name) { userRepository.save(userNamed(name)); return "registered"; } @GetMapping("/user") public Iterableuserlist() { return userRepository.findAll(); }
Мы собираемся использовать базу данных H2 в нашей локальной среде и переключить ее на MySQL в Azure. Как правило, мы настраиваем свойства источника данных в файле application.properties :
spring.datasource.url=jdbc:h2:file:~/test spring.datasource.username=sa spring.datasource.password=
В то время как для развертывания Azure нам нужно настроить azure-webapp-maven-plugin в :
azure-auth 1.8 baeldung-group baeldung-webapp bealdung-plan spring.datasource.url jdbc:mysql://127.0.0.1:55738/localdb spring.datasource.username uuuuuu spring.datasource.password pppppp
Теперь мы можем приступить к развертыванию:
> mvn clean package azure-webapp:deploy ... [INFO] Start deploying to Web App custom-webapp... [INFO] Authenticate with ServerId: azure-auth [INFO] [Correlation ID: cccccccc-cccc-cccc-cccc-cccccccccccc] \ Instance discovery was successful [INFO] Updating target Web App... [INFO] Successfully updated Web App. [INFO] Starting to deploy the war file... [INFO] Successfully deployed Web App at \ https://baeldung-webapp.azurewebsites.net
Из журнала видно, что развертывание завершено.
Давайте протестируем наши новые конечные точки:
> curl -d "" -X POST https://baeldung-webapp.azurewebsites.net/user\?name\=baeldung registered > curl https://baeldung-webapp.azurewebsites.net/user [{"id":1,"name":"baeldung"}]
Ответ сервера говорит обо всем. Это работает!
5. Разверните контейнерное приложение Spring Boot в Azure
В предыдущих разделах мы показали, как развертывать приложения в контейнерах сервлетов (в данном случае Tomcat). Как насчет развертывания в качестве автономной запускаемой jar?
На данный момент нам, возможно, потребуется контейнеризировать наше приложение Spring Boot. В частности, мы можем закрепить его и загрузить изображение в Azure.
У нас уже есть статья о как докеризировать приложение Spring Boot , но здесь мы собираемся использовать другой плагин maven: docker-maven-plugin , чтобы автоматизировать докеризацию для нас:
com.spotify docker-maven-plugin 1.1.0
Последнюю версию можно найти здесь .
5.1. Реестр контейнеров Azure
Во-первых, нам нужен реестр контейнеров в Azure, чтобы загрузить наш образ docker.
Итак, давайте создадим его:
az acr create --admin-enabled --resource-group baeldung-group \ --location japanwest --name baeldungadr --sku Basic
Нам также понадобится информация для проверки подлинности реестра контейнеров, и ее можно запросить с помощью:
> az acr credential show --name baeldungadr --query passwords[0] { "additionalProperties": {}, "name": "password", "value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
Затем добавьте следующую конфигурацию аутентификации сервера в Maven settings.xml :
baeldungadr baeldungadr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5.2. Конфигурация плагина Maven
Давайте добавим следующую конфигурацию плагина Maven в pom.xml :
baeldungadr ${azure.containerRegistry}.azurecr.io com.spotify docker-maven-plugin 1.0.0 ${docker.image.prefix}/${project.artifactId} https://${docker.image.prefix} ${azure.containerRegistry} docker / ${project.build.directory} ${project.build.finalName}.jar
В приведенной выше конфигурации мы указали имя образа docker, URL-адрес реестра и некоторые свойства, аналогичные свойствам развертывания FTP.
Обратите внимание, что плагин будет использовать значения в <Каталог docker> для поиска файла Dockerfile . Мы помещаем файл Dockerfile в каталог docker , и его содержимое:
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD azure-0.1.jar app.jar RUN sh -c 'touch /app.jar' EXPOSE 8080 ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
5.3. Запустите приложение Spring Boot в экземпляре Docker
Теперь мы можем создать образ Docker и отправить его в реестр Azure:
> mvn docker:build -DpushImage ... [INFO] Building image baeldungadr.azurecr.io/azure-0.1 ... Successfully built aaaaaaaaaaaa Successfully tagged baeldungadr.azurecr.io/azure-0.1:latest [INFO] Built baeldungadr.azurecr.io/azure-0.1 [INFO] Pushing baeldungadr.azurecr.io/azure-0.1 The push refers to repository [baeldungadr.azurecr.io/azure-0.1] ... latest: digest: sha256:0f0f... size: 1375
После завершения загрузки давайте проверим реестр baeldungadr . Мы увидим изображение в списке репозиториев:
Теперь мы готовы запустить экземпляр изображения:
После загрузки экземпляра мы можем получить доступ к услугам, предоставляемым нашим приложением, через его общедоступный IP-адрес:
> curl http://a.x.y.z:8080/hello hello azure!
5.4. Развертывание контейнера Docker
Предположим, у нас есть реестр контейнеров, независимо от того, принадлежит ли он Azure, Docker Hub или нашему частному реестру.
С помощью следующей конфигурации azure-webapp-maven-plugin мы также можем развернуть наше веб-приложение Spring Boot в контейнерах:
${docker.image.prefix}/${project.artifactId} https://${docker.image.prefix} ${azure.containerRegistry}
Как только мы запустим mvn azure-webapp:deploy , плагин поможет развернуть архив веб-приложения в экземпляре указанного образа.
Затем мы можем получить доступ к веб-службам через IP-адрес экземпляра или URL-адрес службы приложений Azure.
6. Заключение
В этой статье мы рассказали о том, как развернуть приложение Spring Boot в Azure в виде развертываемой войны или выполняемой JAR в контейнере. Хотя мы рассмотрели большинство функций azure-webapp-maven-plugin , есть некоторые богатые функции, которые еще предстоит изучить. Пожалуйста, проверьте здесь для получения более подробной информации.
Как всегда, полную реализацию примеров кода можно найти в на Github .