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 Cloud existente para correr no Azure Container Apps.
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.
Se você não puder atender a nenhum desses requisitos de pré-migração, consulte os seguintes guias complementares de migração:
- Migrar aplicações JAR executáveis para contentores no Azure Kubernetes Service (orientações planeadas)
- Migrar aplicações JAR executáveis para Máquinas Virtuais do Azure (orientação planeada)
Inspecionar componentes do aplicativo
Determinar se e como é que o sistema de ficheiros é utilizado
Encontre todas as instâncias em que seus serviços gravam e/ou leem do sistema de arquivos local. Identifique onde os arquivos temporários/de curto prazo são gravados e lidos e onde os arquivos de longa duração são gravados e lidos.
O Azure Container Apps oferece vários tipos de armazenamento. O armazenamento efêmero pode ler e gravar dados temporários e estar disponível para um contêiner ou réplica em execução. O ficheiro Azure fornece armazenamento permanente e pode ser partilhado entre vários contentores. Para mais informações, consulte Use montagens de armazenamento nas Azure Container Apps.
Conteúdo estático só de leitura
Se o seu aplicativo atualmente serve conteúdo estático, você precisa de um local alternativo para ele. Pode querer considerar transferir conteúdo estático para o Azure Blob Storage e adicionar Azure CDN para downloads ultrarrápidos globalmente. Para mais informações, consulte Alojamento estático de sites em Azure Storage e Quickstart: Integrar uma conta Azure storage com Azure CDN.
Conteúdo estático publicado dinamicamente
Se a sua aplicação suportar conteúdo estático, seja carregado ou gerado pela própria aplicação, que permanece inalterado após a sua criação, pode integrar o Azure Blob Storage e o Azure CDN. Também pode usar uma Função Azure para gerir uploads e ativar atualizações de CDN quando necessário. Fornecemos uma implementação de exemplo para o seu uso em Carregamento e pré-cache de conteúdo estático com Functions do Azure.
Determinar se algum dos serviços contém código específico do SO
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.
Mudar para uma plataforma suportada
Se criares o teu Dockerfile manualmente e implementares a aplicação containerizada no Azure Container Apps, assumes controlo total sobre a tua implementação, incluindo as versões JRE/JDK.
Para a implementação a partir de artefactos, o Azure Container Apps também oferece versões específicas de Java (8, 11, 17 e 21) e versões específicas dos componentes Spring Boot e Spring Cloud. Para garantir a compatibilidade, primeiro migre a sua aplicação para uma das versões suportadas do Java no seu ambiente atual e depois prossiga com os restantes passos de migração. 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.
Nota
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
Para versões suportadas de Java, Spring Boot e Spring Cloud, bem como instruções para atualização, veja Java na visão geral Azure Container Apps.
Identificar versões do Spring Boot
Examine as dependências de cada aplicativo que está sendo migrado para determinar sua versão do Spring Boot.
Maven
Nos projetos Maven, a versão Spring Boot encontra-se tipicamente no <parent> elemento do ficheiro POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Gradle
Nos projetos Gradle, a versão Spring Boot é normalmente encontrada na plugins secção, como a versão do org.springframework.boot plugin:
plugins {
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
id 'java'
}
Para quaisquer aplicações que utilizem versões do Spring Boot anteriores à 3.x, siga o guia de migração do Spring Boot 2.0 ou o Guia de Migração do Spring Boot 3.0 para as atualizar para uma versão suportada do Spring Boot. Para versões suportadas, consulte a documentação do Spring Cloud .
Identificar versões do Spring Cloud
Examine as dependências de cada aplicativo que você está migrando para determinar a versão dos componentes do Spring Cloud que ele usa.
Maven
Nos projetos Maven, a versão Spring Cloud é tipicamente definida na spring-cloud.version propriedade:
<properties>
<spring-cloud.version>2023.0.2</spring-cloud.version>
</properties>
Gradle
Em projetos Gradle, a versão do Spring Cloud normalmente é definida no bloco "propriedades extras":
ext {
set('springCloudVersion', "2023.0.2")
}
Você precisa atualizar todos os aplicativos para usar as versões suportadas do Spring Cloud. Para versões suportadas, consulte a documentação do Spring Cloud .
Identificar soluções de agregação de logs
Identifique quaisquer soluções de agregação de logs em uso pelos aplicativos que você está migrando. Você precisa definir as configurações de diagnóstico na migração para disponibilizar eventos registrados para consumo. Para mais informações, consulte a secção Garantir o registo da consola e configurar definições de diagnóstico .
Identificar agentes de gerenciamento de desempenho de aplicativos (APM)
Identifique todos os agentes de gerenciamento de desempenho de aplicativos usados por seus aplicativos. O Azure Containers Apps não oferece suporte integrado para integração com APM. Você precisa preparar sua imagem de contêiner ou integrar a ferramenta APM diretamente em seu código. Se quiser medir o desempenho da sua aplicação mas ainda não integrou nenhum APM, considere usar o Azure Application Insights. Para mais informações, consulte a secção Migração .
Inventariar os recursos externos
Identifique os recursos externos, tais como origens de dados, mediadores de mensagens JMS e URLs de outros serviços. Em aplicativos Spring Cloud, normalmente você pode encontrar a configuração para esses recursos em um dos seguintes locais:
- Na pasta src/main/resources , num ficheiro normalmente chamado application.properties ou application.yml.
- No repositório do Spring Cloud Config Server que você identificou na etapa anterior.
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 Cloud, normalmente pode encontrá-los nos ficheiros application.properties e application.yml no diretório da aplicação, ou no repositório Spring Cloud Config Server.
Nota
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).
Fornecedores de identidade
Identifique todos os provedores de identidade e todos os aplicativos do Spring Cloud que exigem autenticação e/ou autorização. Para obter informações sobre como configurar provedores de identidade, consulte os seguintes recursos:
- Para a configuração do OAuth2, consulte o quickstart da Spring Cloud 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.
Recursos configurados através do VMware Tanzu Application Service (TAS) (anteriormente Pivotal Cloud Foundry)
Para aplicativos gerenciados com TAS, os recursos externos, incluindo os recursos descritos anteriormente, geralmente são configurados por meio de associações de serviço TAS. Para examinar a configuração desses recursos, use a CLI TAS (Cloud Foundry) para visualizar a VCAP_SERVICES variável da aplicação.
# Log into TAS, if needed (enter credentials when prompted)
cf login -a <API endpoint>
# Set the organization and space containing the application, if not already selected during login.
cf target org <organization name>
cf target space <space name>
# Display variables for the application
cf env <Application Name>
Examine a VCAP_SERVICES variável para as definições de configuração dos serviços externos vinculados à aplicação. Para mais informações, consulte a documentação do TAS (Cloud Foundry).
Todos os outros recursos externos
Não é viável para este guia documentar todas as dependências externas possíveis. Após a migração, é sua responsabilidade verificar se você pode satisfazer todas as dependências externas do seu aplicativo.
Fontes e segredos de configuração de inventário
Senhas de inventário e strings seguras
Verifique todas as propriedades e ficheiros de configuração e todas as variáveis de ambiente nas implantações de produção para encontrar qualquer cadeia de caracteres ou senha secreta. Numa aplicação Spring Cloud, normalmente pode encontrar essas strings no ficheiro application.properties ou application.yml em serviços individuais ou no repositório Spring Cloud Config Server.
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 o Spring Cloud Vault é usado
Se você usa o Spring Cloud Vault para armazenar e acessar segredos, identifique o armazenamento secreto de backup - por exemplo, HashiCorp Vault ou CredHub. Em seguida, identifique todos os segredos usados pelo código do aplicativo.
Localize a origem do servidor de configuração
Se a sua aplicação usar um Spring Cloud Config Server, identifique onde a configuração está armazenada. Normalmente encontras esta definição no ficheiro bootstrap.yml ou bootstrap.properties , ou por vezes no ficheiro application.yml ou application.properties . A configuração se parece com o exemplo a seguir:
spring.cloud.config.server.git.uri: file://${user.home}/spring-cloud-config-repo
Embora o git seja mais comumente usado como armazenamento de dados de backup do Spring Cloud Config Server, como mostrado anteriormente, um dos outros back-ends possíveis pode estar em uso. Consulte a documentação do Spring Cloud Config Server para obter informações sobre outros backends, como a Base de Dados Relacional (JDBC),SVN e o sistema de ficheiros local.
Inspecionar a arquitetura de implantação
Documentar os requisitos de hardware para cada serviço
Para cada um dos seus serviços do Spring Cloud (não incluindo o servidor de configuração, o registro ou o gateway), documente as seguintes informações:
- 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.
Geo-replicação/distribuição de documentos
Determine se os aplicativos do Spring Cloud estão atualmente distribuídos entre várias regiões ou data centers. Documente os requisitos de tempo de atividade/SLA dos aplicativos que você está migrando.
Identificar clientes que ignoram o registro de serviço
Identifique quaisquer aplicativos cliente que invoquem qualquer um dos serviços a serem migrados sem usar o Registro do Spring Cloud Service. Após a migração, tais invocações não serão mais possíveis. Atualize esses clientes para usarem o Spring Cloud OpenFeign antes da migração.
Migração
Remover configurações restritas
O ambiente Azure Container Apps oferece Eureka Server gerido, Spring Cloud Config Server e Admin. Quando uma aplicação está ligada ao componente Java, o Azure Container Apps injeta propriedades relacionadas como variáveis do ambiente do sistema. De acordo com o design de Configuração Externa do Spring Boot, as propriedades da aplicação definidas no seu código ou empacotadas em artefatos são sobrescritas por variáveis de ambiente do sistema.
Se definir uma das seguintes propriedades através de um argumento de linha de comandos, uma propriedade do sistema Java ou a variável de ambiente do contentor, deve removê-la para evitar conflitos e comportamentos inesperados:
SPRING_CLOUD_CONFIG_COMPONENT_URISPRING_CLOUD_CONFIG_URISPRING_CONFIG_IMPORTeureka.client.fetch-registryeureka.client.service-url.defaultZoneeureka.instance.prefer-ip-addresseureka.client.register-with-eurekaSPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IPSPRING_BOOT_ADMIN_CLIENT_URL
Crie um ambiente e aplicações geridas pelo Azure Container Apps
Provisione uma aplicação Azure Container Apps na sua subscrição Azure num ambiente gerido existente ou crie uma nova para cada serviço que está a migrar. Você não precisa criar aplicativos em execução como servidores de registro e configuração do Spring Cloud. Para mais informações, consulte Quickstart: Implemente a sua primeira aplicação de contentores usando o portal Azure.
Preparar o servidor de configuração Spring Cloud
Configure o servidor de configuração nas suas Azure Container Apps para o componente Spring. Para mais informações, consulte Configurar definições para o Servidor de Configuração para o componente Spring nas Azure Container Apps.
Nota
Se o seu repositório atual Spring Cloud Config estiver no sistema de ficheiros local ou on-premises, primeiro precisa de migrar ou replicar os seus ficheiros de configuração para um repositório baseado na cloud, como GitHub, Azure Repos ou BitBucket.
Garantir o registro em log do console e definir as configurações de diagnóstico
Configure o registo de logs para garantir que toda a saída seja redirigida para o console em vez de para ficheiros.
Depois de uma aplicação ser implementada no Azure Container Apps, pode configurar as opções de registo dentro do seu ambiente Container Apps para definir um ou mais destinos dos registos. Estes destinos podem incluir Azure Monitor Log Analytics, Azure Event Hub ou até outras soluções de monitorização de terceiros. Você também tem a opção de desabilitar os dados de log e exibir logs somente em tempo de execução. Para instruções detalhadas de configuração, consulte Opções de armazenamento e monitorização de registos em Azure Container Apps.
Configurar armazenamento persistente
Se qualquer parte do seu aplicativo ler ou gravar no sistema de arquivos local, você precisará configurar o armazenamento persistente para substituir o sistema de arquivos local. Você pode especificar o caminho a ser montado no contêiner por meio das configurações do aplicativo e alinhá-lo com o caminho que seu aplicativo está usando. Para mais informações, consulte Use montagens de armazenamento nas Azure Container Apps.
Migrar segredos do Spring Cloud Vault para Azure KeyVault
Pode injetar segredos diretamente nas aplicações através do Spring usando o Azure KeyVault Spring Boot Starter. Para mais informações, consulte Como usar o Spring Boot Starter para Azure Key Vault.
Nota
A migração pode exigir que você renomeie alguns segredos. Atualize o código do seu aplicativo de acordo.
Migrar todos os certificados para o KeyVault
O Azure Containers Apps suporta comunicação segura entre aplicações. Seu aplicativo não precisa gerenciar o processo de estabelecimento de comunicação segura. Pode carregar o certificado privado para o Azure Container Apps ou usar um certificado gerido gratuito fornecido pelo Azure Container Apps. A utilização do Azure Key Vault para gerir certificados é uma abordagem recomendada. Para mais informações, consulte Certificados em Azure Container Apps.
Configurar integrações de gerenciamento de desempenho de aplicativos (APM)
Se você já configurou variáveis relacionadas ao APM dentro do contêiner, tudo o que você precisa fazer é garantir que a conexão com a plataforma APM de destino possa ser estabelecida. Se a configuração do APM referenciar variáveis de ambiente do contentor, precisa de configurar as variáveis de ambiente de execução adequadamente no Azure Container Apps. Informações sensíveis, como a connection string, devem ser tratadas de forma segura. Podes especificá-lo como um segredo ou referenciar um segredo armazenado no Azure Key Vault.
Configurar segredos por serviço e configurações externalizadas
Você pode injetar definições de configuração em cada contêiner como variáveis de ambiente. Quaisquer alterações nas variáveis criam uma nova revisão para o aplicativo existente. Os segredos são pares chave-valor e permanecem válidos em todas as revisões.
Migrar e habilitar o provedor de identidade
Se algum dos aplicativos do Spring Cloud exigir autenticação ou autorização, use as seguintes diretrizes para garantir que eles estejam configurados para acessar o provedor de identidade:
- 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 orientação, 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.
Atualizar aplicativos cliente
Atualize a configuração de todas as aplicações cliente para utilizar os endpoints publicados do Azure Container Apps para aplicações migradas.
Pós-migração
Agora que você concluiu a migração, verifique se o aplicativo funciona como esperado. Em seguida, você pode tornar seu aplicativo mais nativo da nuvem usando as recomendações a seguir.
Considere habilitar seu aplicativo para trabalhar com o Spring Cloud Registry. Esse componente permite que seu aplicativo seja descoberto dinamicamente por outros aplicativos e clientes Spring implantados. Para obter mais informações, consulte Configurar definições para o Eureka Server for Spring em Azure Container Apps. Depois, modificar quaisquer clientes de aplicação para usar o Spring Client Load Balancer. O Spring Client Load Balancer permite ao cliente obter endereços de todas as instâncias em execução da aplicação e encontrar uma instância que funcione se outra instância ficar corrompida ou sem resposta. Para mais informações, consulte Spring Tips: Spring Cloud Load Balancer no Blog da Primavera.
Em vez de tornar a sua aplicação pública, considere adicionar uma instância do Spring Cloud Gateway . O Spring Cloud Gateway fornece um único endpoint para todas as aplicações implementadas no seu ambiente Azure Container Apps. Se um Spring Cloud Gateway já estiver implantado, verifique se uma regra de roteamento está configurada para rotear o tráfego para seu aplicativo recém-implantado.
Considere adicionar um Spring Cloud Config Server para gerenciar centralmente e controlar a configuração de versão para todos os seus aplicativos Spring Cloud. Primeiro, crie um repositório Git para hospedar a configuração e configure a instância do aplicativo para usá-la. Para mais informações, consulte Configurar definições para o Servidor de Configuração para o componente Spring nas Azure Container Apps. Em seguida, migre sua configuração usando as seguintes etapas:
Dentro do diretório src/main/resources da aplicação, crie um ficheiro bootstrap.yml com o seguinte conteúdo:
spring: application: name: <your-application-name>No repositório Git de configuração, crie um <ficheiro your-application-name>.yml , onde
your-application-nameé o mesmo que no passo anterior. Mude as definições de application.yml ficheiro em src/main/resources para o novo ficheiro que criaste. Se as definições estavam anteriormente num ficheiro .properties , converte-as primeiro para YAML. Você pode encontrar ferramentas on-line ou plug-ins IntelliJ para realizar essa conversão.Crie um ficheiro application.yml no diretório acima. Pode usar este ficheiro para definir definições e recursos que são partilhados entre todas as aplicações no ambiente Azure Container Apps. Essas configurações geralmente incluem fontes de dados, configurações de registro, configuração do Spring Boot Actuator e outras.
Confirme e envie essas alterações para o repositório Git.
Remova o ficheiro application.properties ou application.yml da aplicação.
Considere adicionar o componente gerenciado Admin for Spring para habilitar uma interface administrativa para aplicativos Web do Spring Boot que expõem pontos de extremidade atuadores. Para mais informações, consulte Configure o componente Spring Boot Admin em Azure Container Apps.
Considere adicionar um pipeline de implementação para implementações automáticas e consistentes. As instruções estão disponíveis para Azure Pipelines e para GitHub Actions.
Considere o uso de revisões de aplicativos de contêiner, rótulos de revisão e pesos de tráfego de entrada para habilitar a implantação azul-verde, o que permite testar alterações de código na produção antes que elas sejam disponibilizadas para alguns ou todos os usuários finais. Para mais informações, consulte a Implantação Blue-Green em Azure Container Apps.
Considere adicionar ligações de serviço para ligar a sua aplicação a bases de dados Azure suportadas. Essas associações de serviço eliminariam a necessidade de fornecer informações de conexão, incluindo credenciais, aos seus aplicativos do Spring Cloud.
Considere ativar o stack de desenvolvimento Java para recolher métricas principais da JVM para as suas aplicações. Para mais informações, consulte as
\ . Considere adicionar regras de alerta e grupos de ações do Azure Monitor para detetar e resolver rapidamente condições aberrantes. Para mais informações, consulte Configurar alertas em Azure Container Apps.
Considere replicar a sua aplicação entre as zonas da região ativando a redundância de zonas do Azure Container Apps. O tráfego é balanceado e roteado automaticamente para réplicas se ocorrer uma interrupção de zona. Para mais informações sobre definições redundantes, veja Fiabilidade em Azure Container Apps.
Considere proteger as Azure Container Apps contra explorações e vulnerabilidades comuns utilizando o Web Application Firewall no Application Gateway. Para mais informações, consulte Proteger Aplicações de Contentores do Azure com Firewall de Aplicação Web no Gateway de Aplicação.
Se seus aplicativos usam componentes herdados do Spring Cloud Netflix, considere substituí-los por alternativas atuais, conforme mostrado na tabela a seguir:
Legado Atual Nuvem de primavera Eureka Registro do Spring Cloud Service Spring Cloud Netflix Zuul Gateway de nuvem Spring Spring Cloud Netflix Archaius Servidor de configuração do Spring Cloud Spring Cloud Netflix Ribbon Spring Cloud Load Balancer (load balancer do lado do cliente) Nuvem de primavera Hystrix Spring Cloud Circuit Breaker + Resilience4J Spring Cloud Netflix Turbine Micrômetro + Prometeu