Migração para o Google Cloud: como implantar cargas de trabalho

Neste documento, ajudamos a planejar e projetar a fase de implantação da sua migração para o Google Cloud. Depois de avaliar seu ambiente atual, planejar a migração para o Google Cloud e criar sua base do Google Cloud, será possível implantar suas cargas de trabalho.

Este artigo faz parte de uma série:

No diagrama a seguir, veja o caminho da sua jornada de migração.

Caminho de migração com quatro fases.

A fase de implantação é a terceira fase da migração para o Google Cloud. Nela, você cria um processo de implantação para suas cargas de trabalho.

Este documento é útil se você estiver planejando uma migração de um ambiente local, de um ambiente de hospedagem particular, de outro provedor de nuvem para o Google Cloud ou se estiver avaliando a oportunidade de migrar e quiser explorar as possibilidades.

Seguindo as orientações deste documento, você analisará os diferentes tipos de processos de implantação, em ordem de flexibilidade, automatização e complexidade e os critérios de escolha da abordagem adequada para você:

  1. Implantar manualmente.
  2. Implantar com ferramentas de gerenciamento de configuração (CM).
  3. Implantar usando ferramentas de orquestração de contêineres.
  4. Implantar automaticamente.
  5. Implantar aplicando a infraestrutura como padrão de código.

Antes de implantar as cargas de trabalho, faça o planejamento e o projeto da fase de implantação. Avalie primeiramente os diferentes tipos de processos de implantação que você implementará para suas cargas de trabalho. Após essa avaliação, você terá as informações para começar com um processo simples e passar para um mais complexo no futuro. Essa abordagem pode levar a resultados mais rápidos, mas também pode gerar atrito quando você passar para um processo mais avançado, porque é necessário absorver o débito técnico acumulado com o uso do processo mais simples. Por exemplo, se você passar de implantações totalmente manuais para uma solução automatizada, talvez precise gerenciar atualizações para seu pipeline de implantação e aplicativos.

É possível implementar diferentes tipos de processos de implantação, de acordo com as necessidades das cargas de trabalho, mas essa abordagem também pode aumentar a complexidade dessa fase. Se você implementar diferentes tipos de processos de implantação, poderá se beneficiar da flexibilidade adicional, mas talvez precise de conhecimento, ferramentas e recursos personalizados para cada processo, o que se traduz em mais esforços para você.

Implantar manualmente

Uma implantação totalmente manual é apoiada por um processo de provisionamento, configuração e implantação inteiramente não automatizado. É possível que haja especificações e listas de verificação para cada etapa do processo, mas não há verificação ou imposição automática dessas especificações. Um processo manual está propenso a erros humanos, não é passível de repetição e tem desempenho limitado pelo fator humano.

Processos de implantação totalmente manuais podem ser úteis, por exemplo, quando você precisa instrumentar rapidamente uma experiência em um ambiente de área restrita. A configuração de um processo automatizado e estruturado para uma experiência que dura alguns minutos pode diminuir seu ritmo desnecessariamente, especialmente nos estágios iniciais da migração, em que talvez você ainda não tenha o conhecimento necessário sobre as ferramentas e práticas que permitam criar um processo automatizado.

Embora essa limitação não se aplique ao Google Cloud, implantações totalmente manuais podem ser sua única opção de lidar com ambientes bare metal sem as APIs de gerenciamento necessárias. Nesse caso, não é possível implementar um processo automatizado devido à falta das interfaces necessárias. Se você tiver uma infraestrutura virtualizada herdada, que não ofereça suporte a nenhuma automatização, talvez seja forçado a implementar um processo totalmente manual

Recomendamos que você evite fazer uma implantação totalmente manual, a menos que seja inevitável.

É possível implementar provisionamento, configuração e processo de implantação totalmente manuais utilizando ferramentas, como Console do Google Cloud, Cloud Shell, APIs do Cloud e o SDK do Cloud.

Implantar com ferramentas de gerenciamento de configuração

As ferramentas de CM permitem configurar um ambiente de maneira controlada e passível de repetição. Essas ferramentas incluem um conjunto de plug-ins e módulos que já implementam operações de configuração comuns. Com elas, você tem condições se concentrar no estado final que pretende atingir para seu ambiente, em vez de implementar a lógica para atingir esse estado final. Se o conjunto de operações incluído não for suficiente, as ferramentas de CM geralmente apresentam um sistema de extensão que pode ser usado por você para desenvolver seus próprios módulos. Ainda que essas extensões sejam possíveis, tente usar os módulos e plug-ins predefinidos, quando aplicável, para evitar encargos adicionais de desenvolvimento e manutenção.

Você usa ferramentas de CM quando precisa configurar ambientes. Elas também podem ser usadas para provisionar a infraestrutura e implementar um processo de implantação para as cargas de trabalho. As ferramentas de CM são um processo melhor em comparação com um processo totalmente manual de provisionamento, configuração e implantação, porque é controlado, pode ser auditado, além de ser passível de repetição. No entanto, existem várias desvantagens, porque as ferramentas de CM não são projetadas para tarefas de provisionamento ou implantação. Elas geralmente não têm recursos internos para a implementação de lógica de provisionamento elaborada, como os que detectam e gerenciam diferenças entre o estado real da sua infraestrutura e o estado pretendido, ou processos de implantação avançados, como implantações sem tempo de inatividade ou implantações azul-verde. É possível implementar os recursos que faltam usando os pontos de extensão mencionados anteriormente. Essas extensões podem resultar em um esforço extra e aumentar a complexidade geral do processo de implantação, porque é preciso conhecimento necessário para projetar, desenvolver e manter uma solução de implantação personalizada.

Esse tipo de processo de provisionamento, configuração e implantação pode ser implementado usando ferramentas como Ansible, Chef, Puppet e SaltStack.

Implantar usando ferramentas de orquestração de contêineres

Se você já investiu ou planeja investir na conteinerização das suas cargas de trabalho, poderá usar uma ferramenta de orquestração de contêineres para a implantação das cargas de trabalho.

Uma ferramenta de orquestração de contêineres cuida do gerenciamento da infraestrutura básica do seu ambiente e suporta uma ampla gama de operações de implantação e elementos essenciais para implementar sua lógica de implantação, que pode ser usada quando as lógicas incorporadas não forem suficientes. Essas ferramentas permitem que você se concentre em compor a lógica de implantação real usando os mecanismos fornecidos, em vez de precisar implementá-los.

As ferramentas de orquestração de contêineres também fornecem abstrações que podem ser usadas para generalizar seus processos de implantação em diferentes ambientes implícitos, para que você não precise projetar e implementar vários processos para cada um desses ambientes. Por exemplo, essas ferramentas geralmente incluem a lógica de escalonamento e atualização das suas implantações, para que você não precise implementá-las sozinho. É possível até começar aproveitando essas ferramentas para implementar os processos de implantação no seu ambiente atual e, em seguida, transferi-los para o ambiente de destino, porque a implementação é basicamente a mesma, por design. Ao adotar essas ferramentas desde o início, você adquire experiência na administração de ambientes em contêineres. Essa experiência é útil para sua migração para o Google Cloud.

Use as ferramentas de orquestração de contêineres se as cargas de trabalho já estiverem em contêineres ou se você puder colocá-las em contêineres no futuro e planeja investir nesse esforço. No último caso, você deve executar uma análise completa de cada carga de trabalho para determinar o seguinte:

  • É possível fazer a conteinerização da carga de trabalho.
  • Os benefícios em potencial que podem ser alcançados com a conteinerização da carga de trabalho.

Se as armadilhas eventuais superarem os benefícios da conteinerização, você só deve usar uma ferramenta de orquestração de contêineres se sua equipe já estiver comprometida em usá-la e não quiser gerenciar ambientes heterogêneos.

Por exemplo, as soluções de armazenamento de dados geralmente não são implantadas por meio de ferramentas de orquestração de contêineres, porque não foram projetadas para serem executadas em contêineres efêmeros.

É possível implementar esse processo de implantação usando ferramentas como o Kubernetes e serviços gerenciados como o Google Kubernetes Engine (GKE) no Google Cloud. Se você estiver interessado em um ambiente sem servidor, use ferramentas como o ambiente flexível do App Engine, Cloud Functions e Cloud Run.

Implantar automaticamente

Independentemente das ferramentas de provisionamento, configuração, implantação e orquestração usadas no seu ambiente, é possível implementar processos de implantação totalmente automatizados para minimizar erros humanos e consolidar, otimizar e padronizar os processos na organização. As etapas de aprovação manual podem ser inseridas manualmente no processo de implantação, se necessário, mas todas as etapas são automatizadas.

As etapas de um pipeline de implantação de ponta a ponta típico são as seguintes:

  1. Revisão de código
  2. Integração contínua (CI, na sigla em inglês)
  3. Produção de artefatos.
  4. Implantação contínua (CD, na sigla em inglês), com aprovações manuais aleatórias.

É possível automatizar cada uma dessas etapas independentemente das outras e migrar gradualmente seus processos de implantação atuais para uma solução automatizada ou implementar um novo processo diretamente no ambiente de destino. Para que esse processo seja eficaz, é preciso de procedimentos de teste e validação em cada etapa do pipeline, não apenas durante a etapa de revisão de código ou a etapa de CI.

Para cada alteração na codebase, é preciso executar uma revisão completa para avaliar a qualidade da alteração. A maioria das ferramentas de gerenciamento de código-fonte tem suporte de primeira classe para revisões de código. Elas geralmente oferecem suporte à criação e inicialização automática de revisões, observando a área do código-fonte que foi modificada, desde que você tenha configurado as equipes responsáveis individualmente pelas áreas da sua base de código. Em cada revisão, é possível executar verificações automatizadas no código-fonte, como linters e analisadores estáticos, para impor padrões de consistência e qualidade em toda a codebase.

Depois de revisar e integrar uma alteração na codebase, a ferramenta de CI pode executar testes automaticamente, avaliar os resultados e notificar sobre quaisquer problemas decorrentes da compilação atual. Para agregar valor a essa etapa, siga um processo de desenvolvimento voltado a teste para alcançar a cobertura completa dos recursos de cada carga de trabalho.

Para cada versão bem-sucedida, é possível automatizar a criação de artefatos de implementação. Esses artefatos representam uma versão, pronta para implantar, das suas cargas de trabalho, com as alterações mais recentes. Como parte da etapa de criação do artefato, é possível executar uma validação automatizada do próprio artefato. Por exemplo, você executa uma varredura de vulnerabilidades em relação a problemas conhecidos e aprova o artefato para implantação apenas se nenhuma vulnerabilidade for encontrada.

Por fim, você automatiza a implantação de cada artefato aprovado no ambiente de destino. Se você tiver vários ambientes de execução, também poderá implementar uma lógica de implantação exclusiva para cada um e até incluir etapas de aprovação manual, se necessário. Por exemplo, é possível implantar automaticamente novas versões das suas cargas de trabalho nos ambientes de desenvolvimento, garantia de qualidade e pré-produção e ao mesmo tempo exigir que seja feita revisão e aprovação manuais por parte da sua equipe de controle de produção, para a implantação no seu ambiente de produção.

Ainda que um processo de ponta a ponta totalmente automatizado seja uma das suas melhores opções, se você precisar de um processo automatizado, estruturado, otimizado e que possa ser auditado, a implementação desse processo não é uma tarefa trivial. Antes de escolher esse tipo de processo, é preciso ter uma visão clara dos benefícios esperados, dos custos envolvidos e ciência de que o nível atual de conhecimento e experiência da equipe é suficiente para implementar um processo de implantação totalmente automatizado.

É possível implementar um processo totalmente automatizado com ferramentas como SonarQube, Jenkins, Cloud Build, Container Registry e Spinnaker.

Implantar com a aplicação da infraestrutura como padrão de código

Infraestrutura como código é um processo em que o provisionamento dos recursos é tratado em um ambiente de execução da mesma forma que o código-fonte das cargas de trabalho. Por exemplo, é possível gerenciar todo o ciclo de vida dos recursos do Google Cloud com APIs do Cloud e codificar o estado final no seu código-fonte. Em seguida, implemente um processo de provisionamento totalmente automatizado para sua infraestrutura, semelhante ao que você implementa para suas cargas de trabalho, com um conjunto abrangente de testes.

Uma ferramenta de provisionamento é projetada para inicializar sua infraestrutura e prepará-la para configuração. Ela não é adequada para a conclusão de tarefas de configuração. Por esse motivo, depois de provisionar todos os recursos na infraestrutura, você deve usar uma ferramenta CM para configurar esses recursos de acordo com suas necessidades. É possível implementar tarefas de configuração com ferramentas de provisionamento e tarefas de provisionamento com ferramentas CM, mas cada uma é projetada para uma finalidade e se complementam. Você deve usar a ferramenta certa para o job, portanto, use ferramentas de provisionamento para provisionar sua infraestrutura e ferramentas de CM para configurá-la.

Se você puder gerenciar os recursos no ambiente de destino inteiramente com APIs, como no Google Cloud, implemente uma infraestrutura como processo de código. Você recebe auditabilidade completa, imediata e controle de versão para toda a infraestrutura de nuvem. Além disso, é possível implementar um processo de integração contínua e implantação contínua (CI/CD) para aplicar automaticamente as alterações à sua infraestrutura.

Por outro lado, se o ambiente de destino não oferecer acesso programático para gerenciar e configurar recursos, a implementação de uma implantação de infraestrutura como código não será possível. Além disso, é preciso entrar em contato com seu departamento de compras, porque o provisionamento e o cancelamento de provisionamento em um ambiente de nuvem podem acarretar diferenças no faturamento e nas despesas.

É possível implementar uma infraestrutura como processo de código usando ferramentas como Terraform e serviços gerenciados como o Deployment Manager. Também é possível usar as ferramentas RSpec, Serverspec e InSpec para implementar conjuntos de testes para sua infraestrutura.

Resumo

Agora que você entende as diferentes opções, quando usá-las, quando evitá-las e tem algumas ferramentas de exemplo para explorar, o gráfico a seguir pode ajudá-lo a comparar e contrastar facilmente cada opção com suas cargas de trabalho e casos de uso.

Tipo de processo de implantação Quando usar Quando evitar Ferramentas e serviços
Implantação totalmente manual Quando for preciso instrumentar rapidamente uma experiência em um ambiente de área restrita ou lidar com ambientes bare metal ou uma infraestrutura virtualizada herdada, que não tenham as APIs de gerenciamento necessárias Sempre que houver uma alternativa mais gerenciável N/D
Implantação com ferramentas CM Quando você precisar de uma forma de automatizar suas implantações manuais e já estiver investindo fortemente em ferramentas de CM para a configuração de seus ambientes Quando seu esforço para superar as limitações das ferramentas de CM, no que se refere à implantação, for muito alto Ansible, Chef, Puppet, SaltStack (links em inglês)
Orquestração de contêineres Se suas cargas de trabalho já estiverem em contêineres ou se você puder colocá-las em contêineres no futuro e planeja investir nesse esforço Quando as possíveis armadilhas superam os benefícios da conteinerização Kubernetes, GKE, ambiente flexível do App Engine, Cloud Functions, Cloud Run
Automatização de implantação Se você precisar de um processo automatizado, estruturado, otimizado e auditável Caso suas equipes não tenham as habilidades necessárias e não for possível treiná-las ou investir na implementação de um processo totalmente automatizado SonarQube, Jenkins, Cloud Build, Container Registry, Spinnaker
Infraestrutura como código Quando os recursos no seu ambiente de destino puderem ser totalmente gerenciados com APIs e de maneira programática Se o ambiente de destino não oferecer acesso programático para o gerenciamento e a configuração de recursos Terraform, Cloud Deployment Manager

Não existe "o melhor processo de implantação", porque isso depende inteiramente da sua situação atual, do seu nível de conhecimento e do que você espera do processo.

Como encontrar ajuda

O Google Cloud oferece várias opções e recursos para você encontrar a ajuda e o suporte necessários para usar os serviços do Google Cloud da melhor maneira possível:

Há mais recursos para ajudar a migrar cargas de trabalho para o Google Cloud no Centro de migração do Google Cloud.

Para mais informações sobre esses recursos, consulte a seção Como encontrar ajuda de Migração para o Google Cloud: primeiros passos.

A seguir