Importar recursos implementados en Infrastructure Manager


En este tutorial se muestra cómo importar recursos de Google Cloud en una implementación de Infrastructure Manager. Solo puedes importar recursos que se hayan aprovisionado con Terraform.

Si tienes una configuración de Terraform y aún no la has implementado enGoogle Cloud, consulta cómo implementar la infraestructura con Infrastructure Manager.

Este tutorial empieza con el despliegue de una nube privada virtual (VPC) enGoogle Cloud mediante la CLI de Terraform. A continuación, en este tutorial se muestra cómo importar estos recursos implementados a Infrastructure Manager para que se puedan gestionar como una implementación de Infrastructure Manager.

Puedes usar el ejemplo de este tutorial para saber cómo importar otrosGoogle Cloud recursos a Infra Manager. Para importar la implementación en Infra Manager, la configuración de Terraform utilizada para aprovisionar los recursos debe cumplir las restricciones y los recursos deben haberse aprovisionado con una versión de Terraform compatible.

Costes

En este tutorial se usan los siguientes componentes facturables de Google Cloud:

Antes de empezar

  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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente 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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  11. Para inicializar gcloud CLI, ejecuta el siguiente 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. Instala una versión compatible de Terraform.
  17. Desplegar recursos en Google Cloud

    El recurso Google Cloud que vas a desplegar en este tutorial es una VPC. En esta sección se muestra cómo desplegar el recurso para usarlo como ejemplo de importación de recursos desplegados en Infra Manager.

    En este tutorial se usa la región us-central1. Si quieres usar otra región, puedes usar cualquiera de las ubicaciones en las que se ejecuta Infra Manager. Consulta la lista de ubicaciones válidas en Ubicaciones de Infrastructure Manager.

    Conceder permisos para los recursos en la configuración

    Has concedido los permisos necesarios para ejecutar Infra Manager, pero también debes conceder permisos específicos para los recursos descritos en la configuración que vas a implementar.

    Concede permisos para poder crear la red de VPC, que es el recurso definido en la configuración de Terraform:

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

    Haz los cambios siguientes:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio.
    • PROJECT_ID: tu ID de proyecto.

    Desplegar recursos con la CLI de Terraform

    1. Crea una red de VPC con la siguiente configuración de Terraform. Para ello, ejecuta el siguiente 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. Despliega la configuración con la CLI de Terraform mediante el siguiente comando:

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

    Cuando se aprovisione la VPC, verás un resultado que empieza por el texto Creation complete.

    La VPC definida en la configuración de Terraform ahora se ha implementado en Google Cloud. Terraform crea un archivo de estado, que se encuentra en el sistema de archivos junto al archivo main.tf.

    Crear un despliegue de marcador de posición en Infrastructure Manager

    Para importar recursos en Infra Manager, necesitas una implementación en Infra Manager.

    En este tutorial se usa un segmento de almacenamiento para almacenar la configuración de Terraform. Si estás siguiendo este tutorial para saber cómo importar otras implementaciones en Infra Manager, puedes almacenar la configuración de Terraform en un segmento de almacenamiento, en un repositorio Git público o en tu máquina local.

    1. Añade una configuración de Terraform vacía al segmento de almacenamiento:

      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. Crea un despliegue con 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
      

      Cuando se haya completado el despliegue, verás lo siguiente:

      Creating the deployment...done
      

    Ahora tienes un despliegue de Infra Manager. A continuación, debes añadir el archivo de estado y la configuración de Terraform a este despliegue para que este despliegue gestione la VPC.

    Importar el archivo de estado y la configuración de Terraform

    Para gestionar el recurso implementado (la VPC) con Infra Manager, debes añadir el archivo de estado y la configuración de Terraform a Infra Manager.

    Bloquear la implementación

    Bloquea la implementación de Infra Manager para poder cambiar su estado.

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

    Importar el archivo de estado de Terraform en Infra Manager

    Importa el archivo de estado de los recursos implementados. Terraform creó este archivo de estado cuando desplegaste la VPC con la CLI de Terraform.

    Sube el archivo de estado de Terraform a la implementación de 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
    

    Sube la configuración de Terraform al depósito de Cloud Storage

    Ahora que ha subido el archivo de estado de Terraform, también debe subir la configuración de Terraform que ha usado para crear la red VPC. Infra Manager necesita el archivo de estado de Terraform para que, cuando se ejecute una vista previa de Infra Manager, no se detecten cambios en los recursos.

    Sube la configuración de Terraform a Cloud Storage con el siguiente comando:

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

    Desbloquear la implementación

    Si estás siguiendo este tutorial para saber cómo importar recursos a Infra Manager, asegúrate de que el archivo de estado y la configuración de Terraform no tengan diferencias. Si hay diferencias entre el archivo de estado y la configuración de Terraform, asegúrate de que el archivo de estado describa los recursos que quieres implementar. Cuando desbloqueas la implementación, si hay diferencias entre el archivo de estado y la configuración de Terraform, Infra Manager crea o elimina recursos para que coincidan con el archivo de estado.

    Debes desbloquear la implementación para poder gestionar los recursos con Infra Manager. En este tutorial, el archivo de estado y la configuración de Terraform describen la misma configuración, por lo que Infra Manager no crea ni elimina ningún recurso.

    Libera el bloqueo de la implementación ejecutando lo siguiente.

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

    Ahora que el archivo de estado y la configuración de Terraform se han añadido a tu implementación de Infra Manager, has terminado de importar los recursos implementados. Infra Manager gestiona ahora la VPC implementada.

    Previsualizar los cambios en los recursos

    Ejecuta una vista previa de la implementación para confirmar que el estado de Terraform y los recursos implementados en Google Cloud están sincronizados.

    1. Crea una vista previa con el siguiente 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. Consulta los detalles de la vista previa para asegurarte de que se ha completado correctamente.

      gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview
      
    3. Exporta la vista previa para revisar los cambios.

      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. Asegúrate de que la configuración esté presente de forma local y se haya inicializado con el siguiente comando:

      terraform init
      
    5. Ejecuta Terraform show para revisar los cambios entre el estado de la implementación de Infrastructure Manager y la configuración.

      terraform show tfplan.out
      

    Si el recurso de VPC de Google Cloud y el archivo de estado están sincronizados, terraform show muestra lo siguiente para validar que Infrastructure Manager no detecta ningún cambio entre el estado de la implementación y la configuración. Verá un resultado similar al siguiente:

    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.
    

    Ahora ha importado los recursos implementados para que los gestione Infra Manager. Por ejemplo, ahora puedes usar Infra Manager para actualizar la implementación.

    También puedes actualizar la implementación para validar que se ha importado correctamente en Infra Manager.

    Limpieza

    Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

    Eliminar el proyecto

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Eliminar recursos concretos

    Elimina la VPC y los metadatos sobre la implementación:

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

    Siguientes pasos