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 orienta você pelo processo de migração de um aplicativo Spring Boot existente para os Aplicativos de Contêiner do Azure. Ele aborda a avaliação de pré-migração, a migração em si e a otimização pós-migração.
Pré-requisitos
- Uma assinatura do Azure. Se você não tiver uma, crie uma conta gratuita.
- CLI do Azure instalada ou acesso ao portal do Azure.
- Familiaridade com o desenvolvimento de aplicativos spring boot e contêineres do Docker.
- Uma versão do JDK com suporte (8, 11, 17 ou 21). Para mais informações, confira Visão geral do Java nos Aplicativos de Contêiner do Azure.
avaliação de pré-migração
Antes de iniciar a migração, conclua as etapas de avaliação e inventário descritas nas seções a seguir.
Identificar o estado local
Em um ambiente paaS (plataforma como serviço), nenhum aplicativo garante que ele seja executado como exatamente uma instância em um determinado momento. Mesmo se você configurar uma única instância, uma instância duplicada poderá ser criada quando:
- O sistema deve realocar o aplicativo para um host físico devido a uma falha ou atualização do sistema.
- O sistema atualiza o aplicativo.
Em ambos os casos, a instância original permanece em execução até que a nova instância termine de iniciar. Esse comportamento tem as seguintes implicações para seu aplicativo:
- Você não pode garantir que qualquer singleton é verdadeiramente único.
- É provável que você perca todos os dados não persistidos no armazenamento externo.
Antes de migrar para Aplicativos de Contêiner do Azure, verifique se o código não contém o estado local que não deve ser perdido ou duplicado. Se houver estado local, refatore o código para armazenar esse estado externamente. Os aplicativos prontos para nuvem normalmente armazenam o estado em um dos seguintes locais:
- Cache do Azure para Redis
- Azure Cosmos DB
- Um banco de dados externo, como o SQL do Azure, o Banco de Dados do Azure para MySQL ou o Banco de Dados do Azure para PostgreSQL
- Armazenamento do Azure para dados não estruturados ou objetos serializados
Examinar o uso do sistema de arquivos
Identifique os casos em que seus serviços fazem leitura e gravação no sistema de arquivos local. Observe quais arquivos são temporários ou de curto prazo e quais arquivos são de longa duração.
Aplicativos de Contêiner do Azure oferece vários tipos de armazenamento. Usando o armazenamento efêmero, você pode ler e gravar dados temporários em um contêiner ou réplica em execução. Usando os Arquivos do Azure, você pode fornecer armazenamento permanente que vários contêineres podem compartilhar. Para obter mais informações, confira Usar montagens de armazenamento nos Aplicativos de Contêiner do Azure.
Se seu aplicativo oferecer conteúdo estático somente leitura, considere movê-lo para o Armazenamento de Blobs do Azure e adicionar a CDN do Azure para a distribuição global. Para obter mais informações, consulte Hospedagem de site estático no Armazenamento do Azure e Introdução rápida: Integre uma conta de armazenamento do Azure com o CDN do Azure.
Se o aplicativo manipular conteúdo estático publicado dinamicamente (conteúdo carregado ou gerado que não é alterado após a criação), você pode integrar o Armazenamento de Blobs do Azure e a CDN do Azure. Você também pode usar uma Função do Azure para gerenciar uploads e disparar atualizações de CDN. Para obter uma implementação de exemplo, consulte Carregar e pré-carregar conteúdo estático da CDN com o Azure Functions.
Verificar o código específico do sistema operacional
Se seu aplicativo contiver código com dependências no sistema operacional host, refatore-o para remover essas dependências. Por exemplo, substitua qualquer uso de / ou \ em caminhos de sistema de arquivos por File.Separator ou Paths.get.
Verificar a compatibilidade da plataforma
Se você criar o Dockerfile manualmente e implantar um aplicativo em contêineres nos Aplicativos de Contêiner do Azure, terá controle total sobre sua implantação, incluindo versões JRE/JDK.
Para a implantação de artefatos, os Aplicativos de Contêiner do Azure oferecem versões específicas do Java (8, 11, 17 e 21) e versões específicas dos componentes Spring Boot e Spring Cloud. Para garantir a compatibilidade, primeiro migre seu aplicativo para uma versão com suporte do Java em seu ambiente atual e, em seguida, prossiga com as etapas de migração restantes. Teste totalmente a configuração resultante com a versão estável mais recente da distribuição do Linux.
Observação
Essa validação é especialmente importante se o servidor atual for executado em um JDK sem suporte, como Oracle JDK ou IBM OpenJ9.
Para verificar sua versão atual do Java, entre no servidor de produção e execute o seguinte comando:
java -version
Para versões com suporte do Java, Spring Boot e Spring Cloud, confira a visão geral do Java nos Aplicativos de Contêiner do Azure.
Identificar sua versão do Spring Boot
Examine as dependências de cada aplicativo que você está migrando para determinar sua versão do Spring Boot.
Em projetos do Maven , localize a versão do Spring Boot no <parent> elemento do arquivo POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Em projetos do Gradle , localize a versão do Spring Boot na plugins seção:
plugins {
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
id 'java'
}
Para aplicativos que usam versões do Spring Boot antes do 3.x, siga o Guia de Migração do Spring Boot 3.0 para atualizar para uma versão com suporte. Para versões com suporte, consulte versões do Spring Boot e do Spring Cloud.
Identificar trabalhos agendados
Aplicativos efêmeros, como trabalhos cron do Unix ou aplicativos de curta duração com base na estrutura do Spring Batch, devem ser executados como um trabalho nos Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Tarefas no Aplicativos de Contêiner do Azure.
Se o aplicativo estiver em execução longa e executar tarefas regularmente usando uma estrutura de agendamento (como o Quartzo ou o Spring Batch), você poderá hospedá-lo nos Aplicativos de Contêiner do Azure. No entanto, o aplicativo deve gerenciar o dimensionamento de forma adequada para evitar condições de corrida em que as mesmas tarefas são executadas mais de uma vez por período agendado durante a expansão ou as atualizações progressivas.
Faça o inventário de todas as tarefas agendadas em execução nos servidores de produção, dentro ou fora do código do aplicativo.
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ê encontra a configuração desses recursos na pasta src/main/resources , em um arquivo normalmente chamado application.properties ou application.yml.
Databases
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 os agentes em uso examinando o manifesto de build (normalmente, um arquivo pom.xml ou um build.gradle) para as dependências relevantes.
Por exemplo, um aplicativo Spring Boot que usa o ActiveMQ normalmente contém 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 os agentes em uso, encontre as configurações correspondentes. Normalmente, você os encontra 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 para bancos de dados, caches, mensagens ou serviços de IA, requer um alto grau de confiança no aplicativo e traz riscos que não estã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.
Caches externos
Identifique os caches externos em uso. Com frequência, você usa o Redis por meio do Spring Data Redis. Para obter informações de configuração, consulte a documentação do Spring Data Redis .
Determine se você armazena em cache dados de sessão por meio do Spring Session pesquisando a respectiva configuração (em Java ou XML).
Provedores de identidade
Identifique todos os provedores de identidade que seu aplicativo usa. Para obter informações sobre como configurar provedores de identidade, consulte os seguintes recursos:
- 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 a configuração do PingFederate Spring Security, consulte as instruções do Auth0 para PingFederate.
Portas não padrão
Usando os Aplicativos de Contêiner do Azure, você pode expor portas com base na configuração de recursos do aplicativo de contêiner. Um aplicativo Spring Boot escuta na porta 8080 por padrão, mas você pode alterar essa porta usando server.port ou a variável de SERVER_PORT ambiente.
Todos os outros recursos externos
Este guia não pode documentar todas as dependências externas possíveis. Após a migração, verifique se você pode satisfazer todas as dependências externas do aplicativo.
Configuração de inventário, segredos e certificados
Senhas e cadeias de caracteres seguras
Verifique todas as propriedades, arquivos de configuração e variáveis de ambiente nas implantações de produção para quaisquer cadeias de caracteres e senhas secretas. Em um aplicativo Spring Boot, normalmente você encontra essas cadeias de caracteres no arquivo application.properties ou application.yml .
Certificados
Documente todos os certificados usados para endpoints públicos de SSL ou para 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>
Avaliar o registro em log e o APM
Identifique as soluções de agregação de log que os aplicativos que você está migrando usam. Você precisa definir as configurações de diagnóstico durante a migração para disponibilizar eventos registrados para consumo. Para obter mais informações, consulte a seção Configurar registro em log e diagnóstico .
Identifique todos os agentes do APM (gerenciamento de desempenho de aplicativos) que seus aplicativos usam. Os Aplicativos de Contêiner do Azure não oferecem suporte interno ao APM. Você precisa preparar sua imagem de contêiner ou integrar a ferramenta APM diretamente ao seu código. Se você quiser medir o desempenho do aplicativo, mas ainda não integrou nenhum APM, considere usar o Aplicativo Azure Insights. Para obter mais informações, consulte a seção Integrar monitoramento de desempenho do aplicativo .
Arquitetura de implantação de documentos
Documente as seguintes informações para o aplicativo Spring Boot:
- O número de instâncias em execução.
- O número de CPUs alocadas para cada instância.
- A quantidade de RAM alocada para cada instância.
Determine também se você está distribuindo atualmente suas instâncias de aplicativo entre várias regiões ou data centers. Documente os requisitos de tempo de atividade e o SLA para os aplicativos que você está migrando.
Migração
Crie um ambiente de Aplicativos do Contêiner
Crie um ambiente de Aplicativos de Contêiner em sua assinatura do Azure. Para obter mais informações, consulte Quickstart: implantar seu primeiro aplicativo de contêiner usando o portal Azure.
Configurar registros e diagnósticos
Configure o registro em log para rotear toda a saída para o console em vez de arquivos.
Depois de implantar o aplicativo nos Aplicativos de Contêiner do Azure, você pode configurar as opções de registro em log em seu ambiente de Aplicativos de Contêiner para definir um ou mais destinos de log. Esses destinos podem incluir o Log Analytics do Azure Monitor, os Hubs de Eventos do Azure ou soluções de monitoramento que não são da Microsoft. Você também pode desabilitar o armazenamento de dados de log e exibir logs somente em tempo de execução. Para obter instruções de configuração, consulte opções de armazenamento e monitoramento de log nos Aplicativos de Contêiner do Azure.
Configurar um armazenamento persistente
Se qualquer parte do aplicativo ler ou gravar no sistema de arquivos local, configure o armazenamento persistente para substituí-lo. Especifique o caminho a ser montado no contêiner por meio das configurações do aplicativo e alinhe-o com o caminho que seu aplicativo usa. Para obter mais informações, confira Usar montagens de armazenamento nos Aplicativos de Contêiner do Azure.
Migrar certificados para o Azure Key Vault
Os Aplicativos de Contêiner do Azure dão suporte à comunicação segura entre aplicativos. Seu aplicativo não precisa gerenciar o processo de estabelecer comunicação segura. Você pode carregar um certificado privado nos Aplicativos de Contêiner do Azure ou usar um certificado gerenciado gratuito. Usar o Azure Key Vault para gerenciar certificados é a abordagem recomendada. Para obter mais informações, consulte Certificates no Aplicativos de Contêiner do Azure.
Integrar o monitoramento de desempenho do aplicativo
Se você implantar seu aplicativo de uma imagem de contêiner ou de código, os Aplicativos de Contêiner do Azure não interferirão com sua imagem ou código. A integração do aplicativo a uma ferramenta do APM depende de suas preferências e implementação.
Se o aplicativo não estiver usando um APM com suporte, considere o Aplicativo Azure Insights. Para obter mais informações, consulte Usando o Azure Monitor Application Insights com Spring Boot.
Implantar o aplicativo
Implante cada um dos microsserviços migrados (sem incluir o Spring Cloud Config Server e o Spring Cloud Service Registry), conforme descrito em Implantar Aplicativos de Contêiner do Azure com o az containerapp up comando.
Configurar segredos e variáveis de ambiente
Você pode injetar as definições de configuração em cada aplicativo como variáveis de ambiente. Defina essas variáveis como entradas manuais ou como referências a segredos. Para obter mais informações, consulte Gerenciar variáveis de ambiente em Aplicativos de Contêiner do Azure.
Configurar identidade e autenticação
Se qualquer um de seus aplicativos Spring Boot exigir autenticação ou autorização, verifique se eles estão configurados para acessar o provedor de identidade:
Se o provedor de identidade for a ID do Microsoft Entra, não faça nenhuma alteração.
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, confira a Documentação sobre identidade híbrida.
Se o provedor de identidade for outra solução local, como PingFederate, consulte a instalação personalizada 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.
Expor o aplicativo
Por padrão, um aplicativo implantado nos Aplicativos de Contêiner do Azure é acessível por meio de uma URL do aplicativo. Se você implantar seu aplicativo em um ambiente gerenciado com sua própria rede virtual, determine o nível de acessibilidade do aplicativo para permitir entrada pública ou entrada somente da rede virtual. Para obter mais informações, consulte Networking no ambiente Aplicativos de Contêiner do Azure.
Pós-migração
Depois de concluir a migração, verifique se o aplicativo funciona conforme o esperado. As seções a seguir descrevem as recomendações para tornar seu aplicativo mais nativo de nuvem e operacionalmente robusto.
Otimizar para padrões nativos de nuvem
As recomendações a seguir ajudam você a adotar componentes do Spring Cloud e componentes Java gerenciados pelos Aplicativos de Contêiner do Azure para tornar seu aplicativo mais nativo de nuvem.
Descoberta de serviço e balanceamento de carga
Habilite seu aplicativo para trabalhar com o componente spring cloud registry para que outros aplicativos e clientes Spring implantados possam descobri-lo dinamicamente. Para obter mais informações, consulte Configurações de configuração para o componente Eureka Server for Spring em Aplicativos de Contêiner do Azure.
Em seguida, modifique todos os clientes de aplicativo para usar o Load Balancer do Spring Client. Quando você usa o Spring Client Load Balancer, o cliente obtém endereços para todas as instâncias em execução do aplicativo e localiza um que funciona se outro ficar corrompido ou sem resposta. Para obter mais informações, consulte Spring Tips: Spring Cloud Load Balancer no Spring Blog.
gateway de API
Considere adicionar uma instância do Spring Cloud Gateway . O Spring Cloud Gateway fornece um único ponto de extremidade para todos os aplicativos implantados em seu ambiente de Aplicativos de Contêiner do Azure. Se você já implantou um Spring Cloud Gateway, verifique se configurou uma regra de roteamento para rotear o tráfego para seu aplicativo recém-implantado.
Configuração centralizada
Considere a possibilidade de adicionar um Config Server do Spring Cloud para gerenciar de maneira centralizada a configuração e fazer o controle de versão dela para todos os aplicativos do Spring Cloud. Primeiro, crie um repositório Git para armazenar a configuração e configurar a instância do aplicativo para usá-la. Para obter mais informações, consulte Configurações do Config Server for Spring component in Aplicativos de Contêiner do Azure.
Migre sua configuração usando as seguintes etapas:
Dentro do diretório src/main/resources do aplicativo, crie um arquivo bootstrap.yml com o seguinte conteúdo:
spring: application: name: <your-application-name>No repositório Git de configuração, crie um arquivo <seu-nome-do-aplicativo>.yml, onde
your-application-nameé o mesmo que na etapa anterior. Mova as configurações do arquivo application.yml em src/main/resources para o novo arquivo que você criou. Se as configurações estiverem anteriormente em um arquivo .properties , converta-as em YAML primeiro. Você pode encontrar ferramentas online ou plug-ins IntelliJ para realizar essa conversão.Crie um arquivo application.yml no diretório que você criou. Use esse arquivo para definir as configurações e os recursos compartilhados entre todos os aplicativos no ambiente de Aplicativos de Contêiner do Azure, como fontes de dados, configurações de log e configuração do Spring Boot Actuator.
Faça commit dessas alterações e efetue push delas para o repositório Git.
Remova o arquivo application.properties ou application.yml do aplicativo.
Administração
Considere adicionar o componente gerenciado Admin for Spring para habilitar uma interface administrativa para Aplicativos Web Spring Boot que expõem pontos de extremidade do atuador. Para obter mais informações, consulte Configurar o componente do Administrador do Spring Boot em Aplicativos de Contêiner do Azure.
Melhorar a preparação operacional
As recomendações a seguir ajudam a fortalecer a confiabilidade, a observabilidade e as práticas de implantação para seu aplicativo migrado.
- Pipelines de CI/CD: adicione um pipeline de implantação para as implantações automáticas e consistentes. As instruções estão disponíveis para o Azure Pipelines e o GitHub Actions.
- Implantação azul-verde: use as revisões de aplicativos de contêiner, os rótulos de revisão e os pesos de tráfego de entrada para testar as alterações de código na produção antes de disponibilizar essas alterações aos usuários finais. Para obter mais informações, consulte Blue-Green Deployment in Aplicativos de Contêiner do Azure.
- Associações de serviço: adicione associações de serviço para conectar seu aplicativo a bancos de dados do Azure com suporte. As associações de serviço eliminam a necessidade de fornecer informações de conexão, incluindo credenciais, para seus aplicativos Spring Boot.
- Métricas de JVM: habilitar o stack de desenvolvimento Java para coletar as métricas principais de JVM. Para obter mais informações, consulte Java métricas para aplicativos Java em Aplicativos de Contêiner do Azure.
- Alertas: adicione regras de alerta e grupos de ações do Azure Monitor para detectar e resolver rapidamente condições aberrantes. Para obter mais informações, consulte Configurar alertas em Aplicativos de Contêiner do Azure.
- Redundância de zona: replicar seu aplicativo entre zonas de disponibilidade habilitando a redundância de zona. O tráfego tem balanceamento de carga e é roteado automaticamente para réplicas se ocorre uma interrupção de zona. Para obter mais informações, consulte Confiabilidade nos Aplicativos de Contêiner do Azure.
- Firewall do Aplicativo Web: proteja seu aplicativo de contêiner contra explorações e vulnerabilidades comuns usando o Firewall do Aplicativo Web no Gateway de Aplicativo. Para obter mais informações, confira Proteger Aplicativos de Contêiner do Azure com Firewall do Aplicativo Web no Gateway de Aplicativo.