Partilhar via


Migrate Spring Boot applications to Azure App Service

Este guia descreve o que deve ter em atenção quando quiser migrar uma aplicação Spring Boot existente para o Azure App Service.

Pré-migração

Para garantir uma migração bem-sucedida, antes de começar, conclua as etapas de avaliação e inventário descritas nas seções a seguir.

Mudar para uma plataforma suportada

O App Service oferece versões específicas do Java SE. Para garantir a compatibilidade, migre seu aplicativo para uma das versões suportadas de seu ambiente atual antes de continuar com qualquer uma das etapas restantes. Certifique-se de que testa a configuração resultante na íntegra. Utilize a versão estável mais recente da sua distribuição Linux nestes testes.

Observação

Esta validação é particularmente importante se o seu servidor atual estiver a ser executado num JDK não suportado (como Oracle JDK ou IBM OpenJ9).

Para obter a sua versão atual em Java, inicie sessão no seu servidor de produção e execute o seguinte comando:

java -version

No Azure App Service, os binários para Java 8 são fornecidos pelo Eclipse Temurin. Para Java 11, 17 e todas as futuras versões LTS do Java, o App Service fornece o Microsoft Build of OpenJDK. Estes binários estão disponíveis para download gratuito nos seguintes sites:

Inventariar os recursos externos

Identifique os recursos externos, tais como origens de dados, mediadores de mensagens JMS e URLs de outros serviços. Nas aplicações Spring Boot, normalmente encontra-se a configuração desses recursos na pasta src/main/directory , num ficheiro normalmente chamado application.properties ou application.yml. Além disso, verifique as variáveis de ambiente da implantação de produção para quaisquer definições de configuração pertinentes.

Bases de dados

Para um aplicativo Spring Boot, as cadeias de conexão normalmente aparecem em arquivos de configuração quando dependem de um banco de dados externo. Aqui está um exemplo de um ficheiro application.properties :

spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Aqui está um exemplo de um ficheiro application.yaml :

spring:
  data:
    mongodb:
      uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017

Consulte a documentação do Spring Data para obter mais cenários de configuração possíveis:

Agentes de mensagens JMS

Identifique o(s) broker(s) em uso(s) consultando no manifesto de build (normalmente, um ficheiro pom.xml ou build.gradle ) para as dependências relevantes.

Por exemplo, uma aplicação Spring Boot usando ActiveMQ normalmente conteria esta dependência no seu ficheiropom.xml :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

Os aplicativos Spring Boot que usam corretores comerciais normalmente contêm dependências diretamente nas bibliotecas de drivers JMS dos corretores. Aqui está um exemplo de um ficheiro build.gradle :

    dependencies {
      ...
      compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
      ...
    }

Depois de identificar o corretor ou corretores em uso, encontre as configurações correspondentes. Nas aplicações Spring Boot, normalmente pode encontrá-los nos ficheiros application.properties e application.yml no diretório da aplicação.

Observação

A Microsoft recomenda o uso do fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como para bancos de dados, caches, mensagens ou serviços de IA, requer um grau muito alto de confiança no aplicativo e traz riscos não presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de máquina local, prefira identidades de usuário para conexões sem senha ou sem chave.

Aqui está um exemplo do ActiveMQ de um ficheiro application.properties :

spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>

Para mais informações sobre a configuração do ActiveMQ, consulte a documentação de mensagens do Spring Boot.

Aqui está um exemplo do IBM MQ a partir de um ficheiro application.yaml :

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: <password>

Para mais informações sobre a configuração do IBM MQ, consulte a documentação dos componentes IBM MQ Spring.

Identificar caches externos

Identifique todos os caches externos em uso. Frequentemente, o Redis é usado via Spring Data Redis. Para informações de configuração, consulte a documentação Spring Data Redis .

Determine se os dados da sessão estão a ser armazenados em cache via Spring Session procurando a configuração respetiva (em Java ou XML).

Provedores de identidade

Identifique o(s) provedor(es) de identidade usado(s) pelo seu aplicativo. Para obter informações sobre como os provedores de identidade podem ser configurados, consulte o seguinte:

Todos os outros recursos externos

Não é exequível documentar todas as dependências externas possíveis neste guia. É responsabilidade da sua equipe verificar se cada dependência externa do seu aplicativo pode ser satisfeita após uma migração do Serviço de Aplicativo.

Segredos do inventário

Palavras-passe e cadeias protegidas

Revise todas as propriedades e ficheiros de configuração, bem como todas as variáveis de ambiente nas implementações de produção, em busca de quaisquer cadeias de segredos e palavras-passe. Numa aplicação Spring Boot, tais strings provavelmente serão encontradas em application.properties ou application.yml.

Certificados de inventário

Documente todos os certificados utilizados em pontos finais SSL públicos ou em comunicações com bases de dados de back-end e outros sistemas. Pode ver todos os certificados no servidor ou servidores de produção com o comando seguinte:

keytool -list -v -keystore <path to keystore>

Determinar se e como é que o sistema de ficheiros é utilizado

Qualquer utilização do sistema de ficheiros no servidor de aplicações irá exigir uma reconfiguração ou, em casos raros, alterações da arquitetura. Poderá identificar alguns ou todos os cenários seguintes.

Conteúdo estático com acesso só de leitura

Se o seu aplicativo atualmente serve conteúdo estático, você precisa de um local alternativo para ele. Deves considerar mover conteúdo estático para o Azure Blob Storage e adicionar o Azure Front Door para downloads rápidos a nível global. Para mais informações, consulte Alojamento estático de sites em Azure Storage e Integre uma conta Azure Storage com Azure Front Door.

Casos Especiais

Alguns cenários de produção poderão exigir alterações adicionais ou impor mais limitações. Embora esses cenários possam ser pouco frequentes, é importante garantir que eles sejam inaplicáveis ao seu aplicativo ou resolvidos corretamente.

Determinar se a aplicação depende de tarefas agendadas

As tarefas agendadas, tais como tarefas do Quartz Scheduler ou do Cron, não podem ser utilizadas com o Serviço de Aplicações. O Serviço de Aplicativo não impedirá que você implante um aplicativo que contenha tarefas agendadas internamente. Contudo, se a sua aplicação estiver ampliada, a mesma tarefa agendada pode ser executada mais de uma vez por período agendado. Esta situação pode provocar consequências não intencionais.

Inventarie todos os trabalhos agendados, dentro ou fora do processo de candidatura.

Determinar se a aplicação contem código de SO específico

Se seu aplicativo contiver qualquer código com dependências no sistema operacional host, você precisará refatorá-lo para remover essas dependências. Por exemplo, pode ser necessário substituir qualquer uso de / ou \ nos caminhos do sistema de ficheiros por File.Separator ou Paths.get se a sua aplicação estiver a correr em Windows.

Identificar todos os processos/daemons externos em execução no(s) servidor(es) de produção

Os processos executados fora do Servidor de Aplicativos, como daemons de monitoramento, precisarão ser migrados para outro lugar ou eliminados.

Identificar o tratamento de solicitações não HTTP e várias portas

O Serviço de Aplicativo suporta apenas um único ponto de extremidade HTTP em uma única porta. Se a sua aplicação escuta em várias portas ou aceita pedidos usando protocolos diferentes do HTTP, não use o Azure App Service.

Migração

Parametrizar a configuração

Certifique-se de que todas as coordenadas de recursos externos (como cadeias de conexão de banco de dados) e outras configurações personalizáveis possam ser lidas a partir de variáveis de ambiente. Se você estiver migrando um aplicativo Spring Boot, todas as definições de configuração já devem ser externalizáveis. Para mais informações, consulte Configuração Externalizada na documentação do Spring Boot.

Aqui está um exemplo que faz referência a uma SERVICEBUS_CONNECTION_STRING variável de ambiente de um ficheiro application.properties :

spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000

Provisionar um plano de Serviço de Aplicações

Da lista de planos de serviço disponíveis, selecione o plano cujas especificações cumprem ou superam as do hardware de produção atual.

Observação

Se pretende executar implementações de staging/canário ou usar slots de implementação, o plano do App Service deve incluir essa capacidade adicional. Recomendamos a utilização de planos Premium ou superiores para aplicações Java.

Crie o plano do App Service.

Criar e Implementar Aplicações Web

Terá de criar uma aplicação web no seu Plano de Serviço de Aplicações (escolhendo "Java SE" como pilha de execução) para cada ficheiro JAR executável que deseja executar.

Aplicações do Maven

Se a sua aplicação tiver sido criada a partir de um ficheiro POM do Maven, utilize o plug-in de aplicações Web para o Maven para criar a aplicação Web e implementar a sua aplicação. Para mais informações, consulte Quickstart: Criar uma aplicação Java no Azure App Service.

Aplicações não pertencentes ao Maven

Se não puder utilizar o plug-in do Maven, terá de aprovisionar a aplicação Web através de outros mecanismos, tais como:

Depois de criada a Web App, utilize um dos mecanismos de implementação disponíveis para implementar a sua aplicação. Se possível, a sua candidatura deve ser carregada em /home/site/wwwroot/app.jar. Se não quiser renomear o seu JAR para app.jar, pode carregar um script shell com o comando para executar o seu JAR. Depois cole o caminho completo neste script na caixa de texto Ficheiro de Arranque na secção Configuração do portal. O script de inicialização não é executado a partir do diretório no qual foi colocado. Por isso, use sempre caminhos absolutos para referenciar ficheiros no seu script de arranque (por exemplo: java -jar /home/myapp/myapp.jar).

Migrar opções de tempo de execução do JVM

Se a sua aplicação requer opções específicas de runtime, use o mecanismo mais adequado para as especificar.

Configurar o domínio personalizado e o SSL

Se a sua aplicação estiver visível num domínio personalizado, tem de mapear a aplicação Web para o mesmo. Para mais informações, veja Tutorial: Mapear um nome DNS personalizado existente para Azure App Service.

Em seguida, tem de vincular o certificado SSL desse domínio à Aplicação Web do Serviço de Aplicações. Para mais informações, veja Assegurar um nome DNS personalizado com uma ligação SSL em Azure App Service.

Importar certificados de backend

Todos os certificados para comunicação com sistemas de back-end, como bases de dados têm de ser disponibilizados para o Serviço de Aplicações. Para mais informações, consulte Adicionar um certificado SSL no App Service.

Migrar coordenadas de recursos externos e outras configurações

Siga estes passos para migrar strings de ligação e outras definições.

Observação

Para quaisquer definições de aplicação Spring Boot parametrizadas com variáveis na secção de parametrização da configuração , essas variáveis de ambiente devem estar definidas na configuração da aplicação. Qualquer configuração de aplicativo Spring Boot não explicitamente parametrizada com variáveis de ambiente ainda pode ser substituída por elas por meio da Configuração do aplicativo. Por exemplo:

spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000

Configuração da Aplicação de Serviço de Aplicações

Migrar trabalhos agendados

Para executar trabalhos agendados em Azure, considere usar um gatilho Timer para Azure Functions. Não é preciso migrar o código de tarefa em si para uma função. A função pode simplesmente invocar um URL na sua aplicação para acionar a tarefa. Se tais execuções de tarefas tiverem de ser invocadas dinamicamente e/ou monitorizadas centralmente, considere usar o Spring Batch.

Em alternativa, pode criar uma aplicação Logic com um gatilho de Recorrência para invocar o URL sem escrever código fora da sua aplicação. Para mais informações, consulte Visão Geral - O que é Azure Logic Apps? e Criar, agendar e executar tarefas e fluxos de trabalho recorrentes com o gatilho de Recorrência em Azure Logic Apps.

Observação

Para evitar utilizações maliciosas, provavelmente terá de confirmar que o ponto final de invocação dos trabalhos exige credenciais. Nesse caso, a função de acionador terá de fornecer essas credenciais.

Migrar e habilitar o provedor de identidade

Se seu aplicativo exigir autenticação ou autorização, verifique se eles estão configurados para acessar o provedor de identidade usando as seguintes orientações:

  • Se o fornecedor de identidade for o Microsoft Entra ID, não devem ser necessárias alterações.
  • Se o fornecedor de identidade for uma floresta Active Directory local, considere implementar uma solução híbrida de identidade com a Microsoft Entra ID. Para obter mais informações, consulte a documentação de identidade híbrida.
  • Se o fornecedor de identidade for outra solução local, como o PingFederate, consulte o tópico Instalação personalizada do Microsoft Entra Connect para configurar a federação com Microsoft Entra ID. Em alternativa, considere usar o Spring Security para usar o seu fornecedor de identidade através do OAuth2/OpenID Connect ou SAML.

Reiniciar e efetuar teste de fumo

Por fim, terá de reiniciar a sua aplicação Web para aplicar todas as alterações de configuração. Após a conclusão do reinício, verifique se a sua aplicação está a funcionar corretamente.

Pós-migração

Agora que migrou a sua aplicação para o Azure App Service, deve verificar se funciona como espera. Depois de fazer isso, temos algumas recomendações para você que podem tornar seu aplicativo mais nativo da nuvem.

Recomendações