Рубрики
Без рубрики

Развертывание приложения Spring Boot в Azure

Ознакомьтесь с шагами, необходимыми для развертывания приложения Spring Boot на платформе Azure.

Автор оригинала: Beau Tian.

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 Iterable userlist() {
    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 .