Metodologia de implantação

Last reviewed 2023-12-20 UTC

Recomendamos que você use uma infraestrutura declarativa para implantar sua base de maneira consistente e controlável. Essa abordagem permite uma governança consistente, aplicando controles de política sobre configurações aceitáveis de recursos nos seus pipelines. O blueprint é implantado usando um fluxo do GitOps, com o Terraform usado para definir a infraestrutura como código (IaC, na sigla em inglês), um repositório Git para controle de versões e aprovação de código, e o Cloud Build para automação de CI/CD no o pipeline de implantação. Para conferir uma introdução a esse conceito, consulte Gerenciar a infraestrutura como código com o Terraform, o Cloud Build e o GitOps.

As seções a seguir descrevem como o pipeline de implantação é usado para gerenciar recursos na sua organização.

Camadas do pipeline

Para separar as equipes e a pilha de tecnologia responsáveis por gerenciar diferentes camadas do ambiente, recomendamos um modelo que use pipelines diferentes e perfis responsáveis por cada camada da pilha.

No diagrama a seguir, apresentamos nosso modelo recomendado para separar um pipeline de fundação, um pipeline de infraestrutura e um pipeline de aplicativo.

pipelines de blueprint.

O diagrama apresenta as camadas de pipeline neste modelo:

  • O pipeline de base implanta os recursos básicos que são usados em toda a plataforma. Recomendamos que uma única equipe central seja responsável por gerenciar os recursos de base consumidos por várias unidades de negócios e cargas de trabalho.
  • O pipeline de infraestrutura implanta projetos e infraestrutura que são usados por cargas de trabalho, como instâncias de VM ou bancos de dados. O blueprint configura um pipeline de infraestrutura separado para cada unidade de negócios. Você também pode preferir um único pipeline de infraestrutura usado por várias equipes.
  • O pipeline do aplicativo implanta os artefatos para cada carga de trabalho, como contêineres ou imagens. É possível ter várias equipes de aplicativo diferentes com pipelines de aplicativos individuais.

As seções a seguir apresentam o uso de cada camada do pipeline.

O pipeline de base

O pipeline de base implanta os recursos básicos. Ele também configura o pipeline de infraestrutura usado para implantar a infraestrutura usada pelas cargas de trabalho.

Para criar o pipeline de base, primeiro clone ou bifurque a base do Terraform-example para seu próprio repositório Git. Siga as etapas no arquivo README 0-bootstrap para configurar a pasta e os recursos de inicialização.

Etapa Descrição

0-bootstrap

Inicializa uma organização do Google Cloud. Esta etapa também configura um pipeline de CI/CD para o código de blueprint nos estágios subsequentes.

  • O projeto CICD contém o pipeline base do Cloud Build para implantar recursos.
  • O projeto seed inclui os buckets do Cloud Storage que contêm o estado do Terraform da infraestrutura da fundação e contas de serviço altamente privilegiadas que são usadas pelo pipeline da fundação para criar recursos. O estado do Terraform é protegido pelo controle de versões de objetos de armazenamento. Quando o pipeline de CI/CD é executado, ele atua como as contas de serviço gerenciadas no projeto seed.

Depois de criar o pipeline de base no cenário 0-bootstrap, os estágios a seguir implantam recursos nele. Revise as instruções README de cada etapa e implemente cada uma em sequência.

Etapa Descrição

1-org

Configura as pastas compartilhadas de nível superior, projetos para serviços compartilhados, geração de registros no nível da organização e configurações de segurança de valor de referência por meio de políticas da organização.

2-environments

Configura os ambientes de desenvolvimento, de não produção e de produção na organização do Google Cloud que você criou.

3-networks-dual-svpc

ou

3-networks-hub-and-spoke

Configura as VPCs compartilhadas na topologia escolhida e nos recursos de rede associados.

O pipeline de infraestrutura

O pipeline de infraestrutura implanta os projetos e a infraestrutura (por exemplo, as instâncias de VM e os bancos de dados) que são usados pelas cargas de trabalho. O pipeline de base implanta vários pipelines de infraestrutura. Essa separação entre o pipeline de base e o pipeline de infraestrutura permite separar recursos de toda a plataforma e recursos específicos da carga de trabalho.

No diagrama a seguir, descrevemos como o blueprint configura vários pipelines de infraestrutura destinados ao uso por equipes separadas.

Vários pipelines de infraestrutura

O diagrama descreve os seguintes conceitos principais:

  • Cada pipeline de infraestrutura é usado para gerenciar recursos de infraestrutura independentemente dos recursos de fundação.
  • Cada unidade de negócios tem o próprio pipeline de infraestrutura, gerenciado em um projeto dedicado na pasta common.
  • Cada um dos pipelines de infraestrutura tem uma conta de serviço com permissão para implantar recursos apenas em projetos associados a essa unidade de negócios. Essa estratégia cria uma separação de tarefas entre as contas de serviço privilegiadas usadas para o pipeline de fundação e aquelas usadas por cada pipeline de infraestrutura

Essa abordagem com vários pipelines de infraestrutura é recomendada quando há várias entidades dentro da organização com as habilidades e o apetite para gerenciar a infraestrutura separadamente, especialmente se elas tiverem requisitos diferentes, como tipos de validação de pipeline política que eles querem aplicar. Outra opção é ter um único pipeline de infraestrutura gerenciado por uma única equipe com políticas de validação consistentes.

Em terraform-example-foundation, o estágio 4 configura um pipeline de infraestrutura e o estágio 5 demonstra um exemplo de uso desse pipeline para implantar recursos de infraestrutura.

Etapa Descrição

4-projects

Configura uma estrutura de pastas, projetos e um pipeline de infraestrutura.

5-app-infra (opcional)

Implanta projetos de carga de trabalho com uma instância do Compute Engine usando o pipeline de infraestrutura como exemplo.

Pipeline do aplicativo

O pipeline do aplicativo é responsável por implantar artefatos de aplicativos para cada carga de trabalho individual, como imagens ou contêineres do Kubernetes que executam a lógica de negócios do aplicativo. Esses artefatos são implantados nos recursos de infraestrutura que foram implantados pelo pipeline de infraestrutura.

O blueprint de base da empresa configura o pipeline de fundação e o pipeline de infraestrutura, mas não implanta um pipeline de aplicativos. Para ver um exemplo de pipeline de aplicativos, consulte o Blueprint de aplicativos empresariais.

Como automatizar seu pipeline com o Cloud Build

O blueprint usa o Cloud Build para automatizar processos de CI/CD. Na tabela a seguir, descrevemos que os controles são incorporados ao pipeline de fundação e ao pipeline de infraestrutura implantados pelo repositório terraform-example-foundation. Se estiver desenvolvendo seus próprios pipelines usando outras ferramentas de automação de CI/CD, recomendamos que você aplique controles semelhantes.

Controle Descrição

Configurações de build separadas para validar o código antes da implantação

O blueprint usa dois arquivos de configuração do build do Cloud Build para todo o pipeline, e cada repositório associado a um estágio tem dois gatilhos do Cloud Build que são associados a esses arquivos de configuração de compilação. Quando o código é enviado por push para uma ramificação de repositório, os arquivos de configuração do build são acionados para executar primeiro cloudbuild-tf-plan.yaml, que valida seu código com verificações de política e o Terraform plan em relação a essas então cloudbuild-tf-apply.yaml executa terraform apply no resultado desse plano.

Verificações de política do Terraform

O blueprint inclui um conjunto de restrições do Open Policy Agent que são aplicadas pela validação de política na CLI do Google Cloud. Essas restrições definem as configurações de recursos aceitáveis que podem ser implantadas pelo pipeline. Se um build não atender à política na primeira configuração do build, a segunda não vai implantar nenhum recurso.

As políticas aplicadas no blueprint são ramificadas de GoogleCloudPlatform/policy-library no GitHub. É possível escrever outras políticas para a biblioteca aplicar políticas personalizadas a fim de atender aos seus requisitos.

Princípio de privilégio mínimo

O pipeline de base tem uma conta de serviço diferente para cada estágio, com uma política de permissão que concede apenas os papéis mínimos do IAM para esse estágio. Cada gatilho do Cloud Build é executado como a conta de serviço específica para esse estágio. O uso de contas diferentes ajuda a reduzir o risco de que a modificação de um repositório possa afetar os recursos gerenciados por outro. Para entender os papéis específicos do IAM aplicados a cada conta de serviço, consulte o código sa.tf do Terraform no estágio de inicialização.

Pools privados do Cloud Build

O blueprint usa pools particulares do Cloud Build. Com os pools particulares, você tem a opção de aplicar outros controles, como restringir o acesso a repositórios públicos ou executar o Cloud Build dentro de um perímetro do VPC Service Controls.

Criadores personalizados do Cloud Build

O blueprint cria o próprio criador personalizado para executar o Terraform. Para ver mais informações, consulte 0-bootstrap/Dockerfile. Esse controle garante que o pipeline seja executado de maneira consistente com um conjunto conhecido de bibliotecas em versões fixadas.

Aprovação da implantação

Também é possível adicionar um estágio de aprovação manual ao Cloud Build. Essa aprovação adiciona outro checkpoint após o build ser acionado, mas antes de ser executado, para que um usuário com privilégios possa aprová-lo manualmente.

Estratégia de ramificação

Recomendamos uma estratégia de ramificação permanente para enviar código ao sistema Git e implantar recursos por meio do pipeline de base. O diagrama a seguir descreve a estratégia de ramificação permanente.

Estratégia de ramificação da implantação de blueprint

O diagrama descreve três ramificações persistentes no Git (desenvolvimento, não produção e produção) que refletem os ambientes correspondentes do Google Cloud. Há também várias ramificações de recursos temporárias que não correspondem aos recursos implantados nos ambientes do Google Cloud.

Recomendamos que você aplique um processo de solicitação de envio (PR, na sigla em inglês) ao sistema Git para que qualquer código mesclado a uma ramificação persistente tenha um PR aprovado.

Para desenvolver código com essa estratégia de ramificação persistente, siga estas etapas gerais:

  1. Quando você estiver desenvolvendo novos recursos ou trabalhando em uma correção de bug, crie uma nova ramificação com base na ramificação de desenvolvimento. Use uma convenção de nomenclatura para a ramificação que inclua o tipo de alteração, um número de tíquete ou outro identificador e uma descrição legível, como feature/123456-org-policies.
  2. Ao concluir o trabalho na ramificação de recursos, abra um PR que segmente a ramificação de desenvolvimento.
  3. Quando você envia o PR, ele aciona o pipeline de fundação para executar terraform plan e terraform validate para preparar e verificar as alterações.
  4. Depois de validar as alterações no código, mescle o recurso ou a correção de bug na ramificação de desenvolvimento.
  5. O processo de mesclagem aciona o pipeline de base para executar terraform apply e implantar as alterações mais recentes na ramificação de desenvolvimento no ambiente de desenvolvimento.
  6. Analise as alterações no ambiente de desenvolvimento usando revisões manuais, testes funcionais ou testes completos relevantes para seu caso de uso. Em seguida, promova as mudanças no ambiente de não produção abrindo um PR que segmenta a ramificação que não é de produção e mescle as alterações.
  7. Para implantar recursos no ambiente de produção, repita o mesmo processo da etapa 6: revisar e validar os recursos implantados, abrir um PR para a ramificação de produção e fazer a mesclagem.

A seguir