Importe recursos implementados para o Infrastructure Manager


Este tutorial demonstra como importar Google Cloud recursos para uma implementação do Infrastructure Manager. Só pode importar recursos aprovisionados através do Terraform.

Se tiver uma configuração do Terraform e ainda não a tiver implementado no Google Cloud, consulte o artigo Implemente infraestrutura com o Infrastructure Manager.

Este tutorial começa com a implementação de uma nuvem privada virtual (VPC) no Google Cloud usando a CLI do Terraform. Em seguida, este tutorial demonstra como importar estes recursos implementados para o Infrastructure Manager para que os recursos possam ser geridos como uma implementação do Infrastructure Manager.

Pode usar o exemplo neste tutorial para compreender como importar outros Google Cloud recursos para o Infra Manager. Para importar a implementação para o Infra Manager, a configuração do Terraform usada para aprovisionar os recursos tem de estar em conformidade com as restrições, e os recursos têm de ter sido aprovisionados com uma versão do Terraform suportada.

Custos

Este tutorial usa os seguintes componentes faturáveis do Google Cloud:

Antes de começar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Infrastructure Manager API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable config.googleapis.com
  8. Set up authentication:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator). Learn how to grant roles.
    2. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    3. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  9. Install the Google Cloud CLI.

  10. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Infrastructure Manager API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable config.googleapis.com
  15. Set up authentication:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator). Learn how to grant roles.
    2. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    3. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  16. Instale uma versão suportada do Terraform.
  17. Implemente recursos em Google Cloud

    O Google Cloud recurso que implementa neste tutorial é uma VPC. Esta secção mostra como implementar o recurso a usar como exemplo para importar recursos implementados para o Infra Manager.

    Este tutorial usa a região us-central1. Se quiser usar outra região, pode usar qualquer uma das localizações onde o Infra Manager é executado. Consulte as localizações do Infrastructure Manager para ver a lista de localizações válidas.

    Conceda autorizações para recursos na configuração

    Concedeu as autorizações necessárias para executar o Infra Manager, mas também tem de conceder autorizações específicas aos recursos descritos na configuração que está a implementar.

    Conceda autorizações para poder criar a rede VPC, que é o recurso definido na configuração do Terraform:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/compute.networkAdmin
    

    Substitua o seguinte:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.
    • PROJECT_ID: o ID do seu projeto.

    Implemente recursos através da CLI do Terraform

    1. Crie uma rede VPC com a seguinte configuração do Terraform. Para isso, execute o seguinte comando:

      mkdir vpc_to_import
      cd vpc_to_import
      cat <<EOF > main.tf
      variable "project_id" {
        type = string
      }
      
      resource "google_compute_network" "vpc_network" {
        name = "my-custom-mode-network"
        project = var.project_id
      }
      EOF
      
    2. Implemente a configuração através da CLI do Terraform com o seguinte comando:

      terraform init
      echo "**************  TERRAFORM APPLY  ******************"
      terraform apply -var="project_id=PROJECT_ID" -auto-approve
      cd ..
      

    Quando a VPC é aprovisionada, vê um resultado que começa com o texto Creation complete.

    A VPC definida na configuração do Terraform está agora implementada em Google Cloud. O Terraform cria um ficheiro de estado, e este ficheiro encontra-se no sistema de ficheiros junto ao ficheiro main.tf.

    Crie uma implementação de marcador de posição no Infrastructure Manager

    Para importar recursos para o Infra Manager, precisa de uma implementação existente no Infra Manager.

    Este tutorial usa um contentor de armazenamento para armazenar a configuração do Terraform. Se estiver a usar este tutorial para compreender como importar outras implementações para o Infra Manager, pode armazenar a configuração do Terraform num contentor de armazenamento, num repositório Git público ou na sua máquina local.

    1. Adicione uma configuração do Terraform vazia ao contentor de armazenamento:

      gcloud storage buckets create gs://import-deployment-configuration --project=PROJECT_ID
      
      mkdir placeholder_deployment
      cd placeholder_deployment
      cat <<EOF > main.tf
      EOF
      
      gcloud storage cp main.tf gs://import-deployment-configuration
      cd ..
      
    2. Crie uma implementação com o Infra Manager.

      gcloud infra-manager deployments apply projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
      --gcs-source gs://import-deployment-configuration \
      --input-values project_id=PROJECT_ID \
      --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT
      

      Quando a implementação estiver concluída, vê:

      Creating the deployment...done
      

    Agora, tem uma implementação do Infra Manager. Em seguida, tem de adicionar o ficheiro de estado e a configuração do Terraform a esta implementação para que esta implementação faça a gestão da VPC.

    Importe o ficheiro de estado e a configuração do Terraform

    Para gerir o recurso implementado (a VPC) através do Infra Manager, tem de adicionar o ficheiro de estado e a configuração do Terraform ao Infra Manager.

    Bloqueie a implementação

    Bloqueie a implementação do Infra Manager para poder fazer alterações ao respetivo estado.

    LOCK_ID=$(gcloud infra-manager deployments lock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --format="get(lockId)")
    

    Importe o ficheiro de estado do Terraform para o Infra Manager

    Importe o ficheiro de estado dos recursos implementados. Este ficheiro de estado foi criado pelo Terraform quando implementou a VPC através da CLI do Terraform.

    Carregue o ficheiro de estado do Terraform para a implementação do Infra Manager.

    SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --lock-id ${LOCK_ID} --format="get(signedUri)")
    cd vpc_to_import
    curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL
    

    Carregue a configuração do Terraform para o contentor do Cloud Storage

    Agora que carregou o ficheiro de estado do Terraform, também tem de carregar a configuração do Terraform que usou para criar a rede VPC. O Infra Manager precisa do ficheiro de estado do Terraform para que, quando é executada uma pré-visualização do Infra Manager, não sejam encontradas alterações aos recursos.

    Carregue a configuração do Terraform para o Cloud Storage através do seguinte comando:

    gcloud storage cp main.tf gs://import-deployment-configuration
    

    Desbloqueie a implementação

    Se estiver a usar este tutorial para compreender como importar recursos para o Infra Manager, certifique-se de que o ficheiro de estado e a configuração do Terraform não têm diferenças. Se existirem diferenças entre o ficheiro de estado e a configuração do Terraform, certifique-se de que o ficheiro de estado descreve os recursos que quer implementar. Quando desbloqueia a implementação, se existirem diferenças entre o ficheiro de estado e a configuração do Terraform, quando desbloqueia a implementação, o Infra Manager cria ou elimina recursos para corresponder ao ficheiro de estado.

    Tem de desbloquear a implementação para poder gerir os recursos através do Infra Manager. Neste tutorial, o ficheiro de estado e a configuração do Terraform descrevem a mesma configuração e, por isso, o Infra Manager não cria nem elimina recursos.

    Liberte o bloqueio da implementação executando o seguinte.

    gcloud infra-manager deployments unlock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --project PROJECT_ID \
    --location us-central1 \
    --lock-id ${LOCK_ID}
    

    Agora que o ficheiro de estado e a configuração do Terraform foram adicionados à sua implementação do Infra Manager, concluiu a importação dos recursos implementados. A VPC implementada é agora gerida pelo Infra Manager.

    Pré-visualize as alterações aos recursos

    Execute uma pré-visualização na implementação para confirmar que o estado do Terraform e os recursos implementados no Google Cloud estão sincronizados.

    1. Crie uma pré-visualização com o seguinte comando:

      gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview \
      --gcs-source gs://import-deployment-configuration \
      --input-values project_id=PROJECT_ID \
      --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
      --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
      
    2. Aceda aos detalhes da pré-visualização para se certificar de que foi concluída com êxito.

      gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview
      
    3. Exporte a pré-visualização para rever as alterações.

      SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview --format "get(result.binarySignedUri)")
      curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
      
    4. Certifique-se de que a configuração está presente localmente e é inicializada com o seguinte comando:

      terraform init
      
    5. Execute o comando Terraform show para rever as alterações entre o estado de implementação do Infrastructure Manager e a configuração.

      terraform show tfplan.out
      

    Se o recurso de VPC e o ficheiro de estado estiverem sincronizados, o terraform show produz o seguinte resultado, validando que o Infrastructure Manager não deteta alterações entre o estado de implementação e a configuração. Google Cloud Vê um resultado semelhante ao seguinte:

    No changes. Your infrastructure matches the configuration.
    
    Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
    

    Importou os recursos implementados para que sejam geridos pelo Infra Manager. Por exemplo, já pode usar o Infra Manager para atualizar a implementação.

    Também pode atualizar a implementação para validar se a implementação foi importada com êxito para o Infra Manager.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Elimine recursos individuais

    Elimine a VPC e os metadados sobre a implementação:

    gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment
    

    O que se segue?