Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Como ajudamos uma empresa a migrar de forma incremental da AWS e Cloudflare para o Google Cloud

By Mike SparrJul 24, 20204 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

1 5bed mq0 o idipajeoeeq

Conforme as empresas modernizam suas stacks de tecnologia para se tornarem mais cloud-native, uma tendência que estamos observando são as migrações parciais ou configurações de nuvem híbrida, muitas vezes como etapas intermediárias rumo à migração completa.

1 5bed mq0 o idipajeoeeqMigração para a nuvem

Recentemente, uma empresa de e-commerce estava movendo suas aplicações em containers da AWS para o GCP para aproveitar o serviço gerenciado de Kubernetes do Google, o GKE.

Os arquivos do catálogo de produtos e as fotos ficavam armazenados no serviço de object storage da Amazon, o S3; o DNS era gerenciado pelo AWS Route 53; e a empresa usava o serviço de CDN da Cloudflare. Como primeiro passo, migraram os bancos de dados e implantaram seus apps em paralelo nos clusters Kubernetes.

Em seguida, queriam fazer a transição da CDN da Cloudflare para a do Google, mas mantendo, por enquanto, os arquivos estáticos no S3. Outro requisito era continuar usando o DNS gerenciado pelo AWS Route 53.

1 026zc1ira fmkpbvfsvnvaExemplo de jornada de migração para a nuvem em múltiplas fases para uma empresa de e-commerce

Este artigo traz um exemplo passo a passo de como fazer cache do conteúdo de um bucket do AWS S3 a partir do Cloud CDN do GCP, usando um load balancer e um network endpoint group (NEG). Para simplificar, neste exemplo não vou gerar um certificado SSL nem adicionar um frontend HTTP(S), mas esse seria um passo adicional típico.

Configuração da demonstração

  1. Crie o bucket S3 inicial com arquivos para teste

1 c vaijadbpltbzuj0mxsywCrie o bucket S3 (anote o nome do bucket para usar depois na configuração de Host no LB)

2. Faça upload dos arquivos de teste e edite os metadados para adicionar o cabeçalho Cache-control

1 bouyayivba1gkv1nd9t0 qArquivos de exemplo enviados1 ac7a0jibnz bqyntrmvqvaCabeçalho Cache-control adicionado (obrigatório para o CDN)

3. Verifique se o conteúdo está retornando os cabeçalhos corretos

1 b3jjtc2i5 lt ankiwxsg

Configurar o load balancer e o NEG no GCP

  1. Adicione/edite o tipo de backend para "Internet network endpoint group"

1 9zwv88uiv9 myanbui45xg

2. Selecione um network endpoint group (NEG) ou "criar novo"

Observação: talvez seja preciso criar antes o Network Endpoint Group (NEG) para que ele apareça no menu suspenso da configuração de backend do Load Balancer. Caso não apareça, você pode usar a opção "Create Internet network endpoint group", mas será necessário atualizar a tela do load balancer para que ele apareça.

1 ezk31kmoaw2keaxrdqziq1 9d1mnibgzb49tsigoqp8lg

Selecione "Fully qualified domain name" e informe o FQDN do seu bucket S3 (em alguns casos, você pode ter uma entrada de DNS própria apontando para esse endereço, e isso também funciona).

3. Habilite o Cloud CDN e adicione um cabeçalho personalizado (correspondente ao hostname do bucket S3)

Depois de selecionar o "Backend type" do NEG externo, marque a opção "Enable Cloud CDN" e expanda as opções na parte inferior para criar um cabeçalho personalizado.

O segredo para fazer isso funcionar é adicionar o cabeçalho host personalizado correspondente ao hostname do S3, conforme mostrado abaixo.

1 35ujn8o989bghw4ezlkglq

4. Adicione/edite o frontend

1 aa2kpqu0rgzdnu7hnldqeg

5. Salve o load balancer e confirme que ele foi configurado com o NEG

1 i4jzz90vnunwqgmg2nom1g1 3ticjqy8iuc1aprafxduja

6. Confirme se o conteúdo está retornando e batendo no cache

1 mcaoahpcffdwuuynd1tcnwConfirme o acesso ao conteúdo (também dá para testar pelo navegador)

Faça alguns testes pelo navegador e depois consulte os logs (a forma mais rápida é pelos logs do Stackdriver); expanda uma entrada e confirme se ela está vindo do cache.

1 ein6zkgefcaodjziopt5jaConfirme que o cache está funcionando para o tráfego do load balancer

Atualize as entradas de DNS para redirecionar o tráfego para o Cloud CDN

Depois de confirmar que tudo está funcionando como esperado e que o conteúdo está vindo do cache, é só editar suas entradas de DNS quando estiver pronto.

Neste caso, a CDN era fornecida pela Cloudflare e havia uma entrada DNS cdn-environment-location.myco.com apontando para o CNAME something.cloudflare.com. Basta criar um novo registro A apontando para o IP externo do load balancer do Google (por exemplo, gcp-lb-development-cdn.myco.com) e, em seguida, alterar o CNAME para apontar para essa nova entrada.

Por precaução, recomendo reduzir o TTL na sua entrada de CDN ativa no dia anterior, se necessário, para que, caso algo dê errado ao editar o CNAME, seja possível reverter rapidamente — e o cache de DNS dos clientes não fique desatualizado por muito tempo.

Resumo dos passos:

  1. Reduza o TTL no domínio de CDN existente
  2. Adicione um registro A apontando para o IP do load balancer no GCP
  3. Edite o registro CNAME do domínio de CDN existente (substituindo o FQDN da Cloudflare)
  4. Confirme se o conteúdo está sendo roteado pelo Cloud CDN

1 36cbq8s2saasb8qcm2l76aParabéns, funcionou! Agora é só proteger tudo com um frontend HTTP(S) ;-)

Atenção aos custos das soluções em nuvem

Apesar de ser possível fazer proxy de requisições do Cloud CDN para buckets S3, para que isso funcione é preciso adicionar cabeçalhos personalizados — e isso tem um custo. Hoje, fica em torno de US$ 0,75 por 1 milhão de requisições, com teto de US$ 500 por mês. Em um site grande, com bastante tráfego, esse valor pode pesar.

Pode até parecer pouco perto do que se paga à Cloudflare (não temos certeza dos preços), mas ainda assim vale a atenção. No longo prazo, o plano é migrar os arquivos estáticos para buckets do Google Cloud Storage e, como eles oferecem suporte à mesma API do S3, pouca ou nenhuma alteração de código será necessária.

Conclusão

Como você pode ver, migrar entre provedores de tecnologia não é tão assustador quanto parece. Uma abordagem mais segura, porém, é dividir o trabalho em fases menores, para que você possa reverter com facilidade em caso de problemas e reduzir a interrupção do negócio.