evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Este guia descreve o que você deve estar ciente quando deseja migrar um aplicativo Spring Cloud existente para ser executado em Aplicativos de Contêiner do Azure.
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:
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.
Os Aplicativos de Contêiner do Azure oferecem 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 Arquivo do Azure fornece armazenamento permanente e pode ser compartilhado entre vários contêineres. Para obter mais informações, consulte Usar montagens de armazenamento em Aplicativos de Contêiner do Azure.
Se o seu aplicativo atualmente serve conteúdo estático, você precisa de um local alternativo para ele. Talvez você queira considerar mover conteúdo estático para o Armazenamento de Blobs do Azure e adicionar a CDN do Azure para downloads extremamente rápidos globalmente. Para obter mais informações, consulte Hospedagem de site estático no Armazenamento do Azure e Guia de início rápido: integrar uma conta de armazenamento do Azure com a CDN do Azure.
Se o seu aplicativo der suporte a conteúdo estático, seja carregado ou gerado pelo próprio aplicativo, que permanece inalterado após sua criação, você pode integrar o Armazenamento de Blob do Azure e a CDN do Azure. Você também pode usar uma Função do Azure para gerenciar carregamentos e acionar atualizações de CDN quando necessário. Disponibilizamos uma implementação de exemplo que pode utilizar, em Uploading and CDN-preloading static content with Azure Functions (Carregamento e pré-carregamento da CDN de conteúdo estático com as Funções do Azure).
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, talvez seja necessário substituir qualquer uso de ou /
em caminhos do sistema de \
arquivos por File.Separator
ou Paths.get
se seu aplicativo estiver sendo executado no Windows.
Se você criar seu Dockerfile manualmente e implantar o aplicativo em contêineres nos Aplicativos de Contêiner do Azure, assumirá o controle total sobre sua implantação, incluindo versões JRE/JDK.
Para implantação a partir de artefatos, os Aplicativos de Contêiner do Azure também oferecem versões específicas do Java (8, 11, 17 e 21) e versões específicas dos componentes do Spring Boot e do Spring Cloud. Para garantir a compatibilidade, primeiro migre seu aplicativo para uma das versões suportadas do Java em seu ambiente atual e, em seguida, prossiga com as etapas de migração 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.
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 do Java, inicie sessão no servidor de produção e execute o comando seguinte:
java -version
Para obter versões suportadas do Java, Spring Boot e Spring Cloud, bem como instruções para atualização, consulte Visão geral do Java on Azure Container Apps.
Examine as dependências de cada aplicativo que está sendo migrado para determinar sua versão do Spring Boot.
Em projetos Maven, a versão Spring Boot normalmente é encontrada 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 Gradle, a versão Spring Boot normalmente será encontrada na plugins
seçã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 aplicativos que usem versões do Spring Boot anteriores ao 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 atualizá-los para uma versão suportada do Spring Boot. Para versões suportadas, consulte a documentação 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.
Em projetos Maven, a versão do Spring Cloud normalmente é definida na spring-cloud.version
propriedade:
<properties>
<spring-cloud.version>2023.0.2</spring-cloud.version>
</properties>
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 .
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 obter mais informações, consulte a seção Garantir o registro em log do console e definir configurações de diagnóstico.
Identifique todos os agentes de gerenciamento de desempenho de aplicativos usados por seus aplicativos. Os Aplicativos de Contêineres do Azure não oferecem suporte interno para integração com APM. Você precisa preparar sua imagem de contêiner ou integrar a ferramenta APM diretamente em seu código. Se você quiser medir o desempenho do seu aplicativo, mas ainda não integrou nenhum APM, considere usar o Azure Application Insights. Para obter mais informações, consulte a seção Migração .
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:
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. Eis 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
Eis 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:
Identifique o broker ou brokers em uso procurando no manifesto de compilação (normalmente, um arquivo pom.xml ou build.gradle ) as dependências relevantes.
Por exemplo, um aplicativo Spring Boot usando ActiveMQ normalmente conteria essa dependência em seu arquivo pom.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. Eis 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. Nos aplicativos do Spring Cloud, você normalmente pode encontrá-los nos arquivos application.properties e application.yml no diretório do aplicativo ou no repositório do 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 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 dos componentes do IBM MQ Spring.
Identifique todos os caches externos em uso. Frequentemente, o Redis é usado via Spring Data Redis. Para obter informações sobre configuração, consulte a documentação do Spring Data Redis .
Determine se os dados da sessão estão sendo armazenados em cache via Spring Session pesquisando a respetiva configuração (em Java ou XML).
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 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 do TAS (Cloud Foundry) para exibir a VCAP_SERVICES
variável do aplicativo.
# 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 definições de configuração de serviços externos vinculados ao aplicativo. Para obter mais informações, consulte a documentação do TAS (Cloud Foundry).
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.
Verifique todas as propriedades e arquivos de configuração e todas as variáveis de ambiente nas implantações de produção para obter cadeias de caracteres e senhas secretas. Em um aplicativo do Spring Cloud, você normalmente pode encontrar essas cadeias de caracteres no arquivo application.properties ou application.yml em serviços individuais ou no repositório do Spring Cloud Config Server.
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>
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.
Se seu aplicativo usa um Spring Cloud Config Server, identifique onde a configuração está armazenada. Normalmente, você encontra essa configuração no arquivo bootstrap.yml ou bootstrap.properties ou, às vezes, no arquivo 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 back-ends, como JDBC (Relational Database), SVN e o sistema de arquivos local.
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:
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.
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 usar o Spring Cloud OpenFeign antes da migração.
O ambiente dos Aplicativos de Contêiner do Azure oferece o Eureka Server, o Spring Cloud Config Server e o Admin. Quando um aplicativo é vinculado ao componente Java, os Aplicativos de Contêiner do Azure injetam propriedades relacionadas como variáveis de ambiente do sistema. De acordo com o design Spring Boot Externalized Configuration, as propriedades do aplicativo definidas em seu código ou empacotadas em artefatos são substituídas por variáveis de ambiente do sistema.
Se você definir uma das seguintes propriedades por meio do argumento de linha de comando, uma propriedade do sistema Java ou uma variável de ambiente do contêiner, deverá removê-la para evitar conflitos e comportamento inesperado:
SPRING_CLOUD_CONFIG_COMPONENT_URI
SPRING_CLOUD_CONFIG_URI
SPRING_CONFIG_IMPORT
eureka.client.fetch-registry
eureka.client.service-url.defaultZone
eureka.instance.prefer-ip-address
eureka.client.register-with-eureka
SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP
SPRING_BOOT_ADMIN_CLIENT_URL
Provisione um aplicativo de Aplicativos de Contêiner do Azure em sua assinatura do Azure em um ambiente gerenciado existente ou crie um novo para cada serviço que você estiver migrando. Você não precisa criar aplicativos em execução como servidores de registro e configuração do Spring Cloud. Para obter mais informações, veja o Início Rápido: implementar a primeira aplicação de contentor com o portal do Azure.
Configure o servidor de configuração no componente Aplicativos de contêiner do Azure para Spring. Para obter mais informações, consulte Definir configurações para o componente Config Server for Spring em Aplicativos de Contêiner do Azure.
Nota
Se o repositório atual do Spring Cloud Config estiver no sistema de arquivos local ou no local, primeiro você precisará migrar ou replicar seus arquivos de configuração para um repositório baseado em nuvem, como GitHub, Azure Repos ou BitBucket.
Configure o registro em log para garantir que toda a saída seja roteada para o console em vez de para os arquivos.
Depois que um aplicativo é implantado nos Aplicativos de Contêiner do Azure, você pode configurar as opções de log em seu ambiente de Aplicativos de Contêiner para definir um ou mais destinos dos logs. Esses destinos podem incluir o Azure Monitor Log Analytics, o hub de eventos do Azure ou até mesmo outras soluções de monitoramento 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 obter instruções detalhadas de configuração, consulte Opções de armazenamento e monitoramento de log em Aplicativos de Contêiner do Azure.
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 obter mais informações, consulte Usar montagens de armazenamento em Aplicativos de Contêiner do Azure.
Você pode injetar segredos diretamente em aplicativos por meio do Spring usando o Azure KeyVault Spring Boot Starter. Para obter mais informações, consulte Como usar o Spring Boot Starter para o Azure Key Vault.
Nota
A migração pode exigir que você renomeie alguns segredos. Atualize o código do seu aplicativo de acordo.
As Aplicações de Contentores do Azure suportam a comunicação segura entre aplicações. Seu aplicativo não precisa gerenciar o processo de estabelecimento de comunicação segura. Você pode carregar o certificado privado para os Aplicativos de Contêiner do Azure ou usar um certificado gerenciado gratuito fornecido pelos Aplicativos de Contêiner do Azure. Usar o Azure Key Vault para gerenciar certificados é uma abordagem recomendada. Para obter mais informações, consulte Certificados em aplicativos de contêiner do Azure.
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 fizer referência a variáveis de ambiente do contêiner, você precisará definir as variáveis de ambiente de tempo de execução de acordo nos Aplicativos de Contêiner do Azure. Informações confidenciais, como a cadeia de conexão, devem ser tratadas com segurança. Você pode especificá-lo como um segredo ou fazer referência a um segredo armazenado no Cofre da Chave do Azure.
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.
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:
Atualize a configuração de todos os aplicativos cliente para usar os pontos de extremidade de Aplicativos de Contêiner do Azure publicados para aplicativos migrados.
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 Definir configurações 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 Spring Client Load Balancer. O Spring Client Load Balancer permite que o cliente obtenha endereços de todas as instâncias em execução do aplicativo e encontre uma instância que funcione se outra instância for corrompida ou deixar de responder. Para obter mais informações, consulte Spring Tips: Spring Cloud Load Balancer no Spring Blog.
Em vez de tornar seu aplicativo público, 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 do 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 obter mais informações, consulte Definir configurações para o componente Config Server for Spring em Aplicativos de Contêiner do Azure. Em seguida, 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 your-application-name>.yml , onde your-application-name
é o mesmo que na etapa anterior. Mova as configurações de application.yml arquivo em src/main/resources para o novo arquivo que você criou. Se as configurações estavam anteriormente em um arquivo .properties , converta-as para YAML primeiro. Você pode encontrar ferramentas on-line ou plug-ins IntelliJ para realizar essa conversão.
Crie um arquivo application.yml no diretório acima. Você pode usar esse arquivo para definir configurações e recursos que são compartilhados entre todos os aplicativos no ambiente de Aplicativos de Contêiner do Azure. 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 arquivo application.properties ou application.yml do aplicativo.
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 obter mais informações, consulte Configurar o componente Spring Boot Admin em Aplicativos de Contêiner do Azure.
Considere adicionar um pipeline de implantação para implantações automáticas e consistentes. As instruções estão disponíveis para Pipelines do Azure e para Ações do GitHub.
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 obter mais informações, consulte Implantação azul-verde em aplicativos de contêiner do Azure.
Considere adicionar associações de serviço para conectar seu aplicativo a bancos de dados do Azure com suporte. 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 habilitar a pilha de desenvolvimento Java para coletar métricas principais da JVM para seus aplicativos. Para obter mais informações, consulte Métricas Java para aplicativos Java em Aplicativos de Contêiner do Azure.
Considere adicionar regras de alerta e grupos de ação do Azure Monitor para detetar e resolver rapidamente condições aberrantes. Para obter mais informações, consulte Configurar alertas em Aplicativos de Contêiner do Azure.
Considere replicar seu aplicativo nas zonas da região habilitando a redundância de zona dos Aplicativos de Contêiner do Azure. O tráfego é balanceado e roteado automaticamente para réplicas se ocorrer uma interrupção de zona. Para obter mais informações sobre configurações redundantes, consulte Confiabilidade em aplicativos de contêiner do Azure.
Considere proteger os Aplicativos de Contêiner do Azure contra explorações e vulnerabilidades comuns usando o Firewall de Aplicativo Web no Gateway de Aplicativo. Para obter mais informações, consulte Proteger aplicativos de contêiner do Azure com o Web Application Firewall no Application Gateway.
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 |
Nuvem de primavera Netflix Zuul | Gateway de nuvem Spring |
Nuvem de primavera Netflix Archaius | Servidor de configuração do Spring Cloud |
Faixa de opções Netflix do Spring Cloud | Spring Cloud Load Balancer (balanceador de carga do lado do cliente) |
Nuvem de primavera Hystrix | Disjuntor Spring Cloud + Resilience4J |
Turbina Netflix Spring Cloud | Micrômetro + Prometeu |
evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agora