Implementaste recursos en Google Cloud y ahora debes administrar la infraestructura como código (IaC) con Terraform. Google proporciona una herramienta que puedes usar para generar código de Terraform en relación con recursos en un proyecto, organización o carpeta.
Antes de comenzar
Prepara Cloud Shell
Inicia Cloud Shell y configura el proyecto de Google Cloud predeterminado en el que deseas generar el código de Terraform para los recursos implementados.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en un archivo de configuración de Terraform.
En Cloud Shell, instala la interfaz de línea de comandos (CLI) para Config Connector.
gcloud components install config-connector
Config Connector te permite usar la herramienta de exportación masiva de Terraform de Google Cloud.
Si ves
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation
, ejecuta el siguiente comando en su lugar:sudo apt-get install google-cloud-sdk-config-connector
Habilita la API de Cloud Asset.
gcloud services enable cloudasset.googleapis.com
Crea una cuenta de servicio para usarla en esta exportación:
gcloud beta services identity create --service=cloudasset.googleapis.com
Asegúrate de que el agente de servicio de Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com
) tenga el rolroles/servicenetworking.serviceAgent
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Asegúrate de que el agente de servicio de Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com
) tenga el rolroles/storage.objectAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
Limitaciones
Algunos tipos de recursos no son compatibles con la exportación al formato de Terraform, aunque sí son compatibles con el proveedor de Terraform de Google. A fin de obtener una lista de los tipos de recursos admitidos para la exportación al formato de Terraform, ejecuta el comando gcloud beta resource-config list-resource-types
.
Exporta toda la configuración del proyecto al código de HCL de Terraform
Con el comando gcloud beta resource-config bulk-export --resource-format=terraform
, se exportan los recursos configurados en el proyecto, la carpeta o la organización y, luego, los imprime en la pantalla en formato de código HCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
Escribe el resultado en una estructura de directorios
Si aún no lo hiciste, crea el directorio en el que deseas generar la configuración del proyecto:
mkdir OUTPUT_DIRECTORY
Exporta toda la configuración del proyecto al directorio:
gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform
La marca
--path
especifica la ubicación para generar el código HCL.
Después de ejecutar el comando, el código HCL para cada recurso se envía a un archivo .tf
separado en la siguiente estructura de directorios:
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
Escribe el resultado en un solo archivo
Si no deseas imprimir el resultado en la pantalla ni crear archivos .tf
separados, puedes escribir todo el resultado en un solo archivo, como se muestra en este ejemplo:
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
Filtra el resultado
Filtra el resultado del comando de exportación masiva mediante la especificación de los tipos de recursos.
Enumera los tipos de recursos admitidos para filtrar
A fin de obtener una lista de los tipos de recursos admitidos para la exportación al formato de Terraform, ejecuta el comando gcloud beta resource-config list-resource-types
:
gcloud beta resource-config list-resource-types
De manera opcional, escribe el resultado en un archivo:
gcloud beta resource-config list-resource-types >> strings.txt
En la salida, el tipo de recurso de las VM de Compute Engine aparece de la siguiente forma:
KRM KIND: ComputeInstance
Puedes ignorar el prefijo KRM KIND:
.
Exporta un solo tipo de recurso
Usa una string, como ComputeInstance
, a fin de exportar tipos de recursos específicos para tu proyecto en formato de código HCL:
gcloud beta resource-config bulk-export \ --resource-types=RESOURCE_TYPE \ --project=PROJECT_ID \ --resource-format=terraform
La marca --resource-types
especifica el tipo de recurso que se mostrará.
Exporta varios tipos de recursos
Exporta instancias de VM y reglas de firewall en formato de código HCL:
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
Usa un archivo a fin de especificar los tipos de recursos que deseas exportar
Crea un directorio llamado
tf-output
.cd && mkdir tf-output && cd tf-output
Crea un archivo llamado
types.txt
y agrega una lista de tipos de recursos. Por ejemplo:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
Ejecuta el comando
gcloud beta resource-config bulk-export
con la marca--resource-types-file
:gcloud beta resource-config bulk-export \ --resource-types-file=types.txt \ --path=tf-output \ --project=PROJECT_ID \ --resource-format=terraform
Si el proyecto no contiene ningún tipo de recurso en particular, el comando funciona correctamente, pero no se muestra nada para ese tipo de recurso.
Soluciona problemas
Si ves el siguiente error, haz lo siguiente:
“Permiso denegado durante la exportación. Asegúrate de que la API de Cloud Asset Inventory esté habilitada”.
Asegúrate de haber seguido las instrucciones de la sección Antes de comenzar.