Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia descreve o que você deve estar ciente quando deseja migrar um aplicativo Spring Boot existente para o Serviço de Aplicativo do Azure.
Pré-migração
Antes de tudo, para garantir uma migração bem-sucedida, conclua as etapas de avaliação e de inventário descritas nas seções a seguir.
Alternar para uma plataforma com suporte
O Serviço de Aplicativo oferece versões específicas do Java SE. Para garantir a compatibilidade, migre seu aplicativo para uma das versões com suporte do ambiente atual antes de continuar com qualquer uma das etapas restantes. Certifique-se de testar totalmente a configuração resultante. Use a versão estável mais recente da distribuição do Linux nesses testes.
Observação
Essa validação é especialmente importante se o servidor atual estiver sendo executado em um JDK não compatível (como Oracle JDK ou IBM OpenJ9).
Para determinar a sua versão atual do Java, entre no servidor de produção e execute o seguinte comando:
java -version
No Serviço de Aplicativo do Azure, os binários para Java 8 são fornecidos do Eclipse Temurin. Para Java 11, 17 e todas as versões LTS futuras do Java, o Serviço de Aplicativo fornece o Build do OpenJDK da Microsoft. Esses binários estão disponíveis para download gratuito nos seguintes sites:
Recursos externos de inventário
Identifique recursos externos, como fontes de dados, agentes de mensagens JMS e URLs de outros serviços. Em aplicativos Spring Boot, normalmente você pode encontrar a configuração para esses recursos na pasta src/main/directory , em um arquivo normalmente chamado application.properties ou application.yml. Além disso, verifique as variáveis de ambiente da implantação de produção em busca de configurações pertinentes.
Bancos 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 arquivo 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 arquivo 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:
Brokers de mensagens JMS
Identifique o intermediário ou os intermediários em uso, analisando o arquivo de build (tipicamente, um arquivo pom.xml ou build.gradle) para as dependências relevantes.
Por exemplo, um aplicativo Spring Boot usando o ActiveMQ normalmente conteria essa dependência em seu arquivo depom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Os aplicativos Spring Boot que usam agentes comerciais normalmente contêm dependências diretamente nas bibliotecas de driver JMS dos agentes. Aqui está um exemplo de um arquivo build.gradle :
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Depois de identificar o agente ou os agentes em uso, localize as configurações correspondentes. Em aplicativos Spring Boot, normalmente você pode encontrá-los nos arquivos application.properties e application.yml no diretório do aplicativo.
Observação
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como 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 computador local, prefira identidades de usuário para conexões sem senha ou sem chave.
Aqui está um exemplo do ActiveMQ de um arquivo 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 obter 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 de um arquivo application.yaml :
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Para obter mais informações sobre a configuração do IBM MQ, consulte a documentação de componentes do IBM MQ Spring.
Identificar caches externos
Identifique os caches externos em uso. Frequentemente, o Redis é usado por meio do Spring Data Redis. Para obter informações de configuração, consulte a documentação do Spring Data Redis .
Determine se os dados de sessão estão sendo armazenados em cache via Spring Session pesquisando a respectiva configuração (em Java ou XML).
Provedores de identidade
Identifique todos os provedores de identidade usados pelo 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 do Spring Security.
- Para a configuração do Auth0 Spring Security, consulte a documentação do Auth0 Spring Security.
- Para obter a configuração do Spring Security com o PingFederate, confira as Instruções do PingFederate com o Auth0.
Todos os outros recursos externos
Não é possível documentar todas as dependências externas possíveis neste guia. É responsabilidade da sua equipe verificar se todas as dependências externas do aplicativo podem ser atendidas após uma migração do Serviço de Aplicativo.
Segredos de inventário
Senhas e cadeias de caracteres seguras
Verifique todas as propriedades e arquivos de configuração e todas as variáveis de ambiente nas implantações de produção para quaisquer cadeias de caracteres e senhas secretas. Em um aplicativo Spring Boot, essas cadeias de caracteres provavelmente serão encontradas em application.properties ou application.yml.
Certificados de inventário
Documente todos os certificados usados para endpoints SSL públicos ou comunicação com bancos de dados de back-end e outros sistemas. Você pode exibir todos os certificados nos servidores de produção executando o seguinte comando:
keytool -list -v -keystore <path to keystore>
Determinar se e como o sistema de arquivos é usado
Qualquer uso do sistema de arquivos no servidor de aplicativos exigirá reconfiguração ou, em casos raros, alterações de arquitetura. Você pode identificar alguns ou todos os cenários a seguir.
Conteúdo estático somente leitura
Se seu aplicativo atualmente serve conteúdo estático, você precisará de um local alternativo para ele. Você deve considerar mover conteúdo estático para o Armazenamento de Blobs do Azure e adicionar o Azure Front Door para downloads rápidos globalmente. Para obter mais informações, consulte Hospedagem de site estático no Armazenamento do Microsoft Azure e Integrar uma conta de armazenamento do Azure com o Azure Front Door.
Casos especiais
Determinados cenários de produção podem exigir alterações adicionais ou impor limitações adicionais. Embora esses cenários possam ser pouco frequentes, é importante garantir que eles sejam inaplicáveis ao seu aplicativo ou resolvidos corretamente.
Determinar se o aplicativo depende de trabalhos agendados
Trabalhos agendados, como tarefas do Quartz Scheduler ou cron jobs, não podem ser usados com o App Service. O Serviço de Aplicativo não impedirá que você implante um aplicativo que contenha tarefas agendadas internamente. No entanto, se o aplicativo for escalado horizontalmente, um mesmo trabalho agendado poderá ser executado mais de uma vez por período agendado. Essa situação pode levar a consequências indesejadas.
Faça um inventário de todos os trabalhos agendados, dentro ou fora do processo de aplicativos.
Determinar se o aplicativo contém código específico do sistema operacional
Se seu aplicativo contiver qualquer código com dependências do sistema operacional do host, você precisará refatorá-lo para remover essas dependências. Por exemplo, talvez seja necessário substituir qualquer uso de /
ou \
em caminhos do sistema de arquivos com File.Separator
ou Paths.get
se o aplicativo estiver em execução no Windows.
Identificar todos os processos/daemons externos em execução nos servidores de produção
Os processos em execução fora do Servidor de Aplicativos, como os daemons de monitoramento, precisarão ser migrados para outro lugar ou eliminados.
Identificar o tratamento de solicitações não HTTP ou várias portas
O Serviço de Aplicativo dá suporte apenas a um único ponto de extremidade HTTP em uma única porta. Se o aplicativo escutar em várias portas ou aceitar solicitações usando protocolos diferentes de HTTP, não use o Serviço de Aplicativo do Azure.
Migração
Parametrizar a configuração
Verifique se todas as coordenadas de recursos externos (como cadeias de conexão de banco de dados) e outras configurações personalizáveis podem ser lidas de variáveis de ambiente. Se você estiver migrando um Aplicativo Spring Boot, todas as configurações já deverão ser externalizáveis. Para obter 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 arquivo 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 do Serviço de Aplicativo
Na lista de planos de serviço disponíveis, selecione o plano cujas especificações atendem ou excedem as do hardware de produção atual.
Observação
Se você planeja executar implantações de preparo/canário ou usar slots de implantação, o plano do Serviço de Aplicativo precisará incluir essa capacidade adicional. É recomendável usar planos Premium ou superiores para aplicativos Java.
Crie o plano do Serviço de Aplicativo.
Criar e implantar aplicativos Web
Você precisará criar um aplicativo Web em seu Plano do Serviço de Aplicativo (escolhendo "Java SE" como a pilha de runtime) para cada arquivo JAR executável que você pretende executar.
Aplicativos Maven
Se o seu aplicativo for criado com base em um arquivo POM do Maven, use o plug-in do Aplicativo Web para Maven para criar o aplicativo Web e implantar seu aplicativo. Para obter mais informações, consulte Início Rápido: Criar um aplicativo Java no Serviço de Aplicativo do Azure.
Aplicativos não Maven
Se não for possível usar o plug-in do Maven, você precisará provisionar o aplicativo Web por meio de outros mecanismos, como:
Depois que o aplicativo Web tiver sido criado, use um dos mecanismos de implantação disponíveis para implantar seu aplicativo. Se possível, seu aplicativo deve ser carregado em /home/site/wwwroot/app.jar. Se você não quiser renomear seu JAR para app.jar, poderá carregar um script de shell com o comando para executar seu JAR. Em seguida, cole o caminho completo para esse script na caixa de texto Arquivo de Inicialização na seção Configuração do portal. O script de inicialização não é executado por meio do diretório no qual ele é colocado. Portanto, sempre use caminhos absolutos para fazer referência a arquivos em seu script de inicialização (por exemplo: java -jar /home/myapp/myapp.jar
).
Migrar opções de runtime da JVM
Se o aplicativo exigir opções de runtime específicas, use o mecanismo mais apropriado para especificá-las.
Configurar o domínio personalizado e o SSL
Se o aplicativo ficar visível em um domínio personalizado, você precisará mapear seu aplicativo Web para ele. Para obter mais informações, confira Tutorial: Mapear um nome DNS personalizado existente para o Serviço de Aplicativo do Azure.
Em seguida, você precisará associar o certificado SSL para esse domínio ao aplicativo Web do Serviço de Aplicativo. Para obter mais informações, consulte Proteger um nome DNS personalizado com uma associação SSL no Serviço de Aplicativo do Azure.
Importar certificados de servidor
Todos os certificados para comunicação com sistemas de back-end, como bancos de dados, precisam ser disponibilizados para o Serviço de Aplicativo. Para obter mais informações, consulte Adicionar um certificado SSL no Serviço de Aplicativo.
Migrar coordenadas de recursos externos e outras configurações
Siga estas etapas para migrar cadeias de conexão e outras configurações.
Observação
Para qualquer configuração de aplicativo Spring Boot parametrizada com variáveis na seção Parametrizar a configuração , essas variáveis de ambiente devem ser definidas na configuração do aplicativo. Todas as configurações do aplicativo Spring Boot não explicitamente parametrizadas com variáveis de ambiente ainda podem ser substituídas 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 os trabalhos agendados
Para executar trabalhos agendados no Azure, considere usar um gatilho timer para o Azure Functions. Você não precisa migrar o código do trabalho propriamente dito para uma função. A função pode simplesmente invocar uma URL no aplicativo para disparar o trabalho. Se essas execuções de trabalho precisarem ser invocadas dinamicamente e/ou controladas centralmente, considere o uso do Spring Batch.
Como alternativa, você pode criar um aplicativo lógico com um gatilho de recorrência para invocar a URL sem escrever nenhum código fora do aplicativo. Para obter mais informações, consulte Visão geral – O que são os Aplicativos Lógicos do Azure? E Criar, agendar e executar tarefas e fluxos de trabalho recorrentes com o gatilho de recorrência nos Aplicativos Lógicos do Azure.
Observação
Para evitar o uso mal-intencionado, você provavelmente precisará garantir que o ponto de extremidade de invocação do trabalho exija credenciais. Nesse caso, a função de gatilho precisará fornecer as credenciais.
Migrar e habilitar o provedor de identidade
Se o aplicativo exigir autenticação ou autorização, verifique se ele está configurado para acessar o provedor de identidade usando as seguintes diretrizes:
- Se o provedor de identidade for a ID do Microsoft Entra, nenhuma alteração deverá ser necessária.
- Se o provedor de identidade for uma floresta local do Active Directory, considere implementar uma solução de identidade híbrida com o Microsoft Entra ID. Para obter mais informações, consulte a documentação de identidade híbrida.
- Se o provedor de identidade for outra solução local, como PingFederate, consulte a instalação personalizada do tópico do Microsoft Entra Connect para configurar a federação com a ID do Microsoft Entra. Como alternativa, considere usar o Spring Security para usar seu provedor de identidade por meio do OAuth2/OpenID Connect ou SAML.
Reinicialização e smoke test
Por fim, você precisará reiniciar seu aplicativo Web para aplicar todas as alterações de configuração. Após a conclusão da reinicialização, verifique se o aplicativo está sendo executado corretamente.
Pós-migração
Agora que seu aplicativo foi migrado para o Serviço de Aplicativo do Azure, você deve verificar se ele funciona conforme o esperado. Depois de fazer isso, temos algumas recomendações para você que podem tornar seu aplicativo mais nativo de nuvem.
Recomendações
Se você optou por usar o diretório /home para armazenamento de arquivos, considere substituí-lo pelo Armazenamento do Azure.
Se você tiver configuração no diretório /home que contém cadeias de conexão, chaves SSL e outras informações secretas, considere usar o Azure Key Vault e/ou a injeção de parâmetro com as configurações do aplicativo sempre que possível.
Considere usar slots de implantação para implantações confiáveis sem tempo de inatividade.
Crie e implemente uma estratégia de DevOps. Para manter a confiabilidade enquanto aumenta a velocidade de desenvolvimento, considere automatizar implantações e testes com o Azure Pipelines. Ao usar Slots de Implantação, você pode automatizar a implantação em um slot seguido pela troca de slots.
Criar a implementar uma estratégia de continuidade dos negócios e recuperação de desastre. Para aplicativos críticos, considere uma arquitetura de implantação de várias regiões.