Implantação de rede automatizada: visão geral

Neste tutorial, você vê como usar o Cloud Deployment Manager e o Terraform (em inglês) da HashiCorp para automatizar a criação e o gerenciamento dos recursos do Google Cloud.

  • O Deployment Manager é um serviço de implantação de infraestrutura integrado ao Google Cloud.
  • O Terraform é uma ferramenta de código aberto para automatizar implantações nos seus experimentos e em suas operações.

Este tutorial é o primeiro de uma série de três partes que demonstra a implantação automatizada de padrões de recursos de rede comuns.

Ao migrar para a nuvem pública, as primeiras tarefas de infraestrutura abordadas são o planejamento e a implantação dos recursos de rede. Colocar a rede em funcionamento é parte de qualquer teste inicial ou prova de conceito. Esses tutoriais apresentam algumas configurações comuns de rede que você pode usar como referência para seus projetos.

Este tutorial usa uma abordagem baseada em arquivos para autenticação que funciona com o Deployment Manager e o Terraform. É possível reutilizar a configuração resultante e, dessa forma, você pode se concentrar em requisitos de recursos críticos para os aplicativos.

A série tem a seguinte estrutura:

  1. Esta é a Visão geral. Siga este tutorial para configurar um ambiente operacional que inclua credenciais de autenticação para seu projeto do Google Cloud. Os outros tutoriais nesta série dependem da configuração de autenticação descrita aqui. Há outros métodos de autenticação por meio da ferramenta de linha de comando gcloud.
  2. Em seguida, o tutorial de inicialização apresenta o Deployment Manager e o Terraform. Por comparação, é possível executar a implantação simples fornecida com cada ferramenta. Também é possível analisar os arquivos de configuração e estudar diferentes abordagens para ver o que se adapta melhor às suas exigências. É preciso completar o tutorial de Visão geral antes de iniciar o de Inicialização.
  3. Como criar uma VPN entre o Google Cloud e a AWS é um tutorial avançado. Ele não depende do tutorial de Inicialização, mas presume que você concluiu o tutorial de Visão geral. Esse tutorial avançado demonstra como:

    • implantar um aplicativo com várias nuvens ou criar um ambiente híbrido com conexões para a infraestrutura local;
    • implantar a infraestrutura de rede e as instâncias de máquina virtual (VM) no Google Cloud e na Amazon Web Services (AWS);
    • configurar as conexões entre os dois provedores, permitindo que você distribua seus recursos implantados para atender às demandas de confiabilidade e disponibilidade.

Por que fazer implementações de rede automatizadas?

Uma estratégia de automação é importante para seu desenvolvimento e eficiência operacional e para maximizar a qualidade do aplicativo. As implantações de rede automatizadas oferecem as seguintes vantagens:

  • Elas são compatíveis com muitos aplicativos diferentes e com os ambientes faseados (desenvolvimento, teste, preparação, produção) que contribuem para um processo previsível e operações confiáveis. Ao usar arquivos de configuração baseados em código, fica simples fazer e descartar cópias de ambientes.
  • Com as implantações automatizadas baseadas em código, é possível reutilizar padrões de infraestrutura comuns em sua organização.
  • As implantações baseadas em código são compatíveis com um processo de revisão estruturado que ajuda a alinhar equipes e evitar problemas inesperados. Nesse processo, é possível colaborar com parceiros de outras áreas, como operações de segurança, de rede, gerenciamento de projetos e equipes de qualidade.

Visão geral

O Deployment Manager e o Terraform executam uma verificação de dependência complexa. Com eles, você pode avaliar o ambiente e criar recursos em paralelo com eficiência sempre que possível. Nos outros tutoriais desta série, você usará essas ferramentas para implantar estruturas de rede mais complexas.

Este tutorial contém links para ferramentas relacionadas, mas o objetivo dele é consolidar detalhes. Assim, você pode construir ambientes de trabalho úteis sem a necessidade de consultar várias páginas e sites.

Objetivos

  • Crie credenciais de acesso para automação no Google Cloud e na AWS.
  • Criar um ambiente funcional para uso do Deployment Manager e do Terraform.
  • Gerar um par de chaves necessário para usar o Secure Shell (SSH) para comunicação com as instâncias de VM.

Custos

Neste tutorial de visão geral, os recursos faturáveis do Google Cloud não são usados. Outros tutoriais desta série implantam recursos faturáveis no Google Cloud e na AWS.

Antes de começar

  1. No Console do Google Cloud, crie um projeto do Google Cloud chamado gcp-automated-networks.

    Acessar a página "Projetos"

    O projeto tem um nome e um ID do projeto exclusivo do Google Cloud. Anote o ID do projeto do Google Cloud. É possível encontrá-lo no painel Informações do projeto da Página inicial do Console do Google Cloud.

    Painel de informações do projeto que exibe o nome e o ID do projeto.

  2. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  3. Ative as APIs Compute Engine and Deployment Manager.

    Ative as APIs

  4. Inicie uma instância do Cloud Shell. Todos os comandos do terminal neste tutorial são executados a partir do Cloud Shell.

    Abra o Cloud Shell

    O Cloud Shell pode levar vários minutos para ser provisionado. Após a conclusão do processo, você receberá esta mensagem de boas-vindas:

    Welcome to Cloud Shell! Type "help" to get started.

Para seguir os tutoriais desta série, você precisa estar familiarizado com o GitHub e ter acesso ao Console de Gerenciamento da AWS.

Arquitetura de implantação

Neste tutorial, você cria o ambiente de implantação ilustrado no diagrama a seguir.

Componentes da arquitetura de implantação.

O diagrama acima mostra os componentes usados neste tutorial:

  • Credenciais do Google Cloud
  • Arquivos de configuração de implantação
  • Chaves SSH
  • Credenciais da AWS
  • Seu projeto do Google Cloud.
  • Rede VPC

Como preparar o ambiente de trabalho do Google Cloud

Nesta seção, você realizará as ações a seguir:

  • Clonar o código do tutorial.
  • Escolher sua região e zona do Google Cloud.

Clonar o código do tutorial

  1. No Cloud Shell, clone o código do tutorial do GitHub (em inglês):

    git clone https://github.com/GoogleCloudPlatform/autonetdeploy-startup.git
  2. Navegue até o diretório do tutorial:

    cd autonetdeploy-startup
    

Verificar região e zona

Determinados recursos de nuvem neste tutorial, incluindo instâncias do Compute Engine, exigem que você declare explicitamente a região ou zona de posicionamento pretendida ou ambas. Para mais detalhes, consulte Regiões e zonas do Google Cloud.

Este tutorial requer uma única região. Verifique os valores da tabela a seguir que refletem os valores definidos nos arquivos do tutorial.

Nome do campo Valores do Google Cloud
Nome da região

us-west1
Local The Dalles, Oregon, EUA
Zona

us-west1-b

Como se preparar para utilizar a AWS

Nesta seção, escolha sua região da AWS. Você precisará dela nos outros tutoriais desta série. Para detalhes sobre as regiões da AWS, consulte Regiões e zonas de disponibilidade para a AWS.

  1. Faça login no Console de Gerenciamento da AWS.
  2. Navegue até o Painel da VPC e selecione a região do Oregon.
  3. No Painel do EC2 e no Painel da VPC, revise os recursos usados por este tutorial.

Como se preparar para utilizar o Deployment Manager

O Deployment Manager está pré-instalado no Cloud Shell com o SDK do Cloud. Para ter uma visão geral da sintaxe de execução, execute o comando gcloud deployment-manager --help.

Como preparar o Terraform

Nesta seção, você faz o download e a instalação do Terraform.

  1. No Cloud Shell, execute o script a seguir:

    ./get_terraform.sh
    

    Este script faz o download e descompactação do binário executável da ferramenta Terraform para o diretório ~/terraform. A saída do script mostra um comando de exportação para atualizar o PATH.

  2. Execute o comando de exportação para atualizar o PATH.

  3. Verifique se o Terraform está funcionando:

    terraform --help
    

    Resultado:

    Usage: terraform [--version] [--help] [command] [args]
    ...
    

Consulte os tópicos Fazer o download do Terraform e Instalar o Terraform (páginas em inglês) se precisar de ajuda.

Como criar credenciais de acesso

Nesta seção, você realizará as ações a seguir:

  • Fazer o download das credenciais de acesso do Google Cloud e da AWS.
  • Apontar seus modelos para essas credenciais de acesso.

O Deployment Manager e o Terraform exigem acesso aos seus projetos e ambientes no Google Cloud e na AWS. Para o Terraform, leia mais sobre os provedores compatíveis nos documentos on-line. O provedor do Google Cloud do Terraform oferece várias maneiras de fornecer credenciais. Neste tutorial, é possível fazer o download de arquivos de credenciais do Google Cloud e da AWS. Fazer o download das credenciais do Google Cloud é uma maneira de usar a autenticação da conta de serviço, que é uma prática recomendada.

Fazer o download das credenciais da conta de serviço padrão do Compute Engine

No Cloud Shell, que é um ambiente Linux, o gcloud gerencia arquivos de credenciais no diretório ~/.config/gcloud.

Para configurar as credenciais da conta de serviço padrão do Compute Engine, siga estas etapas:

  1. No Console do Cloud, acesse a página Contas de serviço:

    Acessar a página "Contas de serviço"

  2. Encontre a conta de serviço com o campo Nome definido como Conta de serviço padrão do Compute Engine e clique no endereço de e-mail.

  3. Clique em Chaves.

  4. Clique em Adicionar chave e, depois, em Criar nova chave.

  5. Clique em Criar, que faz o download das suas credenciais como um arquivo chamado [PROJECT_ID]-[UNIQUE_ID].json.

  6. Clique em Fechar.

  7. Para colocar esse arquivo JSON da máquina local no ambiente do Cloud Shell, no Cloud Shell, clique em Mais e selecione Fazer o upload do arquivo.

  8. Navegue até o arquivo JSON que você recebeu por download e clique em Abrir para fazer o upload. O arquivo será colocado no diretório doméstico (~).

  9. Use o script ./gcp_set_credentials.sh fornecido para criar o arquivo ~/.config/gcloud/credentials_autonetdeploy.json. Este script também cria terraform/terraform.tfvars com uma referência às novas credenciais.

    ./gcp_set_credentials.sh ~/[PROJECT_ID]-[UNIQUE_ID].json
    

    Resultado:

    Created ~/.config/gcloud/credentials_autonetdeploy.json from ~/[PROJECT_ID]-[UNIQUE_ID].json.
    Updated gcp_credentials_file_path in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  10. Para o Deployment Manager, adicione as credenciais da conta de serviço ao conjunto atual de credenciais gerenciadas por gcloud. Isso não é necessário no Terraform, porque a configuração do software lê o arquivo diretamente desse local.

    gcloud auth activate-service-account --key-file ~/.config/gcloud/credentials_autonetdeploy.json
    
  11. Em seguida, use os comandos cat e grep para recuperar o endereço de e-mail da conta de serviço do arquivo e exibir a string de e-mail.

    cat ~/.config/gcloud/credentials_autonetdeploy.json | grep client_email
    
  12. Revise a configuração de autenticação gcloud e verifique se o endereço de e-mail da sua conta de serviço está listado e ativo.

    gcloud auth list
    

    Resultado:

    ACTIVE  ACCOUNT
    *       ###-compute@developer.gserviceaccount.com
    

Fazer o download das credenciais de acesso da AWS

No Cloud Shell, a AWS armazena arquivos de credenciais em ~/.aws.

  1. No Console de Gerenciamento da AWS, clique no seu nome e selecione Minhas credenciais de segurança.

  2. Clique em Usuários.

  3. Clique no seu Nome de usuário.

  4. Clique em Credenciais de segurança.

  5. Clique em Criar chave de acesso.

  6. Clique em Fazer o download do arquivo .csv para criar um arquivo accessKeys.csv no sistema local.

  7. Clique em Fechar.

  8. No Cloud Shell, clique em Mais e selecione Fazer upload do arquivo para fazer upload do arquivo de credenciais para o diretório inicial (~).

  9. Selecione o arquivo accessKeys.csv que você recebeu por download e clique em Abrir para fazer upload.

  10. Use o script fornecido para criar o arquivo ~/.aws/credentials_autonetdeploy:

    ./aws_set_credentials.sh ~/accessKeys.csv
    

    Resultado:

    Created ~/.aws/credentials_autonetdeploy.

Como configurar o projeto

Nesta seção, você apontará os modelos de implantação no seu projeto.

O Google Cloud oferece várias maneiras de designar o projeto do Google Cloud a ser usado pelas ferramentas de automação. Para simplificar, em vez de extrair o ID do projeto do ambiente, o projeto do Google Cloud é identificado explicitamente por uma variável de string nos arquivos de modelo.

  1. Defina o ID do projeto do Google Cloud. Substitua [YOUR_PROJECT_ID] pelo ID do projeto do Google Cloud.

    gcloud config set project [YOUR_PROJECT_ID]

    Resultado:

    Updated property [core/project].
    
  2. Use o script fornecido para atualizar o valor do projeto em seu arquivo de configuração para o Deployment Manager e o Terraform.

    ./gcp_set_project.sh
    

    Resultado:

    Updated project_id: gcp-automated-networks in ~/autonetdeploy-startup/deploymentmanager/autonetdeploy_config.yaml.
    Updated gcp_project_id in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  3. Revise os dois arquivos atualizados para verificar se o valor [PROJECT_ID] foi inserido em deploymentmanager/autonetdeploy_config.yaml e terraform/terraform.tfvars.

  4. Execute o comando único terraform init para instalar o provedor do Terraform para essa implantação.

    pushd ./terraform && terraform init && popd > /dev/null
    

    Resultado:

    Initializing provider plugins...
    - Checking for available provider plugins on https://releases.hashicorp.com...
    - Downloading plugin for provider "google" (0.1.3)...
    Terraform has been successfully initialized!
  5. Para verificar suas credenciais, execute o comando plan do Terraform. Se você não vir nenhum texto de erro vermelho, a autenticação está funcionando corretamente.

    pushd ./terraform && terraform plan && popd > /dev/null
    

    Resultado:

    Refreshing Terraform state in-memory prior to plan...
    ...
    +google_compute_instance.gcp-vm
    ...
    Plan: 1 to add, 0 to change, 0 to destroy.
    

Como usar chaves SSH para se conectar a instâncias de VM

No Google Cloud, o Console do Cloud e a ferramenta gcloud trabalham internamente para gerenciar as chaves SSH para você. Use o comando ssh para se comunicar com as instâncias do Compute Engine sem gerar ou fazer upload de nenhum arquivo de chave.

No entanto, para seus exercícios multi-nuvem, você precisa de um par de chaves públicas/privadas para se conectar a instâncias de VM no Amazon Elastic Compute Cloud (EC2).

Gerar um par de chaves

  1. No Cloud Shell, use ssh-keygen para gerar um novo par de chaves. Substitua [USERNAME] pelo seu login do Google Cloud. Se você não souber qual é seu nome de usuário, use a saída do comando whoami no Cloud Shell como [USERNAME]. Nos tutoriais, é possível usar uma senha longa vazia.

    ssh-keygen -t rsa -f ~/.ssh/vm-ssh-key -C [USERNAME]
    

    Resultado:

    Generating public/private rsa key pair.
    ...
    
  2. Restrinja o acesso à sua chave privada. Esta é uma prática recomendada.

    chmod 400 ~/.ssh/vm-ssh-key
    

Importar a chave pública para o Google Cloud

Importe a chave pública usando um destes dois métodos:

  1. No Cloud Shell, registre sua chave pública no Google Cloud:

    gcloud compute config-ssh --ssh-key-file=~/.ssh/vm-ssh-key
    

    Resultado:

    Updating project ssh metadata...done.

    Ignore o aviso No host aliases were added... porque o comando também tenta atualizar as instâncias de VM do Compute Engine, mas nenhuma instância foi criada ainda.

  2. No Console do Cloud, abra a página Metadados do seu projeto.

    Abrir a página "Metadados"

  3. Clique em Chaves SSH. Talvez seja necessário clicar em Adicionar chaves SSH se nenhuma chave tiver sido criada. Também é possível clicar em Editar e Adicionar item para modificar metadados.

  4. Copie a string de dados da chave usando os comandos a seguir. A string está no formato ssh-rsa [KEY_DATA] [USERNAME]. No Google Cloud, é necessário inserir a string inteira. Se você não incluir a string inteira, verá o seguinte texto de erro: Invalid key.

    cat ~/.ssh/vm-ssh-key.pub
    

    Resultado:

    ssh-rsa [KEY_DATA] [USERNAME]
  5. Clique em Salvar.

    Agora, é possível usar o comando ssh do Cloud Shell para verificar o acesso às instâncias de VM criadas. Esteja ciente de que você está usando uma chave de nível do projeto, que pode ser usada para acessar todas as instâncias de VM no projeto.

    ssh -i ~/.ssh/vm-ssh-key [EXTERNAL_IP]

    Para depurar, adicione -v ao comando ssh.

Importar a chave pública para a AWS

É possível reutilizar o arquivo de chave pública gerado com o Google Cloud.

  1. Para fazer o download do arquivo de chave pública do Cloud Shell, clique em Mais e em Fazer o download do arquivo.
  2. Insira o caminho totalmente qualificado (como antes, substitua [USERNAME]):

    /home/[USERNAME]/.ssh/vm-ssh-key.pub
    
  3. Clique em Fazer download.

  4. No Console de Gerenciamento da AWS, no Painel do EC2 e em REDE E SEGURANÇA, clique em Pares de chaves.

  5. Clique em Importar par de chaves.

  6. Clique em Escolher arquivo.

  7. Selecione vm-ssh-key.pub e clique em Abrir.

  8. Verifique se o conteúdo está no formato esperado: ssh-rsa [KEY_DATA] [USERNAME].

  9. Clique em Importar.

Agora é possível ver a entrada da AWS para o valor vm-ssh-key. É possível fazer referência a essa chave nas configurações, o que permite usar o comando ssh para acesso.

Quando você usa o comando ssh para se conectar a instâncias da AWS, a AWS se comporta de maneira diferente do Google Cloud. Para a AWS, é necessário fornecer um nome de usuário genérico compatível com o provedor de AMI. Neste tutorial, o provedor de AMI espera ubuntu como o usuário.

ssh -i ~/.ssh/vm-ssh-key ubuntu@[AWS_INSTANCE_EXTERNAL_IP]

Agora você tem um ambiente no qual pode implantar recursos para a nuvem facilmente usando ferramentas automatizadas. Use esse ambiente para concluir qualquer um dos tutoriais de implantação de rede automatizada nesta série.

Como fazer limpeza

Este tutorial não gera recursos faturáveis, portanto, não é preciso limpar nada.

Próximas etapas