Importa recursos implementados a Infrastructure Manager


En este instructivo, se muestra cómo importar recursos Google Cloud a una implementación de Infrastructure Manager. Solo puedes importar recursos que se aprovisionaron con Terraform.

Si tienes una configuración de Terraform y aún no la implementaste enGoogle Cloud, consulta Implementa infraestructura con Infrastructure Manager.

En este instructivo, se comienza con la implementación de una nube privada virtual (VPC) enGoogle Cloud con la CLI de Terraform. Luego, en este instructivo, se muestra cómo importar estos recursos implementados en Infrastructure Manager para que se puedan administrar como una implementación de Infrastructure Manager.

Puedes usar el ejemplo de este instructivo para comprender cómo importar otros recursos deGoogle Cloud a Infra Manager. Para importar la implementación en Infra Manager, la configuración de Terraform que se usa para aprovisionar los recursos debe cumplir con las restricciones, y los recursos deben haberse aprovisionado con una versión compatible de Terraform.

Costos

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

Antes de comenzar

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

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

    • 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. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Infrastructure Manager API:

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

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. 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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

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

    • 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. Make sure that billing is enabled for your Google Cloud project.

  14. Enable the Infrastructure Manager API:

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

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. 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.

Implementa recursos en Google Cloud

El recurso Google Cloud que implementas en este instructivo es una VPC. En esta sección, se muestra cómo implementar el recurso para usarlo como ejemplo para importar recursos implementados en Infra Manager.

En este instructivo, 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 las ubicaciones del Administrador de infraestructura para obtener la lista de ubicaciones válidas.

Otorga permisos para los recursos de la configuración

Ya otorgaste los permisos necesarios para ejecutar Infra Manager, pero también debes otorgar permisos específicos para los recursos que se describen en la configuración que implementas.

Otorga 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

Reemplaza lo siguiente:

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

Implementa 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. Implementa la configuración con la CLI de Terraform usando 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 comienza con el texto Creation complete.

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

Crea una implementación de marcador de posición en Infrastructure Manager

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

En este instructivo, se usa un bucket de almacenamiento para almacenar la configuración de Terraform. Si usas este instructivo para comprender cómo importar otras implementaciones en Infra Manager, puedes almacenar la configuración de Terraform en un bucket de almacenamiento, un repositorio público de Git o en tu máquina local.

  1. Agrega una configuración vacía de Terraform al bucket 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 una implementación 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 finalice la implementación, verás lo siguiente:

    Creating the deployment...done
    

Ahora tienes una implementación de Infra Manager. A continuación, debes agregar el archivo de estado y la configuración de Terraform a esta implementación para que esta implementación administre la VPC.

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

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

Bloquea la implementación

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

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

Importa el archivo de estado de Terraform a Infra Manager

Importa el archivo de estado de los recursos implementados. Terraform creó este archivo de estado cuando implementaste 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 bucket de Cloud Storage

Ahora que subiste el archivo de estado de Terraform, también debes subir la configuración de Terraform que usaste para crear la red de 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

Desbloquea la implementación

Si usas este instructivo para comprender 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 deseas implementar. Cuando desbloqueas la implementación, si hay diferencias entre el archivo de estado y la configuración de Terraform, Infra Manager crea o borra recursos para que coincidan con el archivo de estado.

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

Para liberar el bloqueo de la implementación, ejecuta el siguiente comando.

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 agregaron a tu implementación de Infra Manager, terminaste de importar los recursos implementados. Infra Manager ahora administra la VPC implementada.

Obtén una vista previa de 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. Obtén los detalles de la vista previa para asegurarte de que se haya 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 implementación de Infrastructure Manager y la configuración.

    terraform show tfplan.out
    

Si el recurso de VPC en Google Cloud y el archivo de estado están sincronizados, terraform show genera el siguiente resultado que valida que Infrastructure Manager no ve ningún cambio entre el estado de implementación y la configuración. Verás 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 importaste los recursos implementados para que Infra Manager los administre. Por ejemplo, ahora puedes usar Infra Manager para actualizar la implementación.

También puedes actualizar la implementación para validar que se importó correctamente a Infra Manager.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

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

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

¿Qué sigue?