Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Para a configuração do OAuth2, consulte a referência Spring Security.
- Para a configuração do Auth0 Spring Security, consulte a documentação do Auth0 Spring Security.
- Para a configuração de segurança do PingFederate Spring, consulte as instruções Auth0 do PingFederate.
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.
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
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
Se optaste por usar o diretório /home para armazenamento de ficheiros, considera substituir por Azure Storage.
Se tiver configuração no diretório /home que contém strings de ligação, chaves SSL e outras informações secretas, considere usar Azure Key Vault e/ou injeção parâmetros com as definições da aplicação sempre que possível.
Considere usar Espaços de Implementação para implantações fiáveis sem qualquer tempo de inatividade.
Crie e implemente uma estratégia de DevOps. Para manter a fiabilidade e aumentar a velocidade de desenvolvimento, considere automatizar implementações e testes com Azure Pipelines. Quando usas Slots de Implementação, podes automatizar a implantação num slot seguida da troca de slots.
Crie e implemente uma estratégia de continuidade de negócio e recuperação após desastre. Para aplicações críticas, considere uma arquitetura de implementação multi-região.