Has desplegado recursos en Google Cloudy ahora necesitas gestionar tu infraestructura como código (IaC) con Terraform. Google proporciona una herramienta que puedes usar para generar código de Terraform para los recursos de un proyecto, una carpeta o una organización.
Roles
Para obtener los permisos que necesitas para exportar recursos a Terraform, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en la organización, la carpeta o el proyecto:
-
Consumidor de uso del servicio (
roles/serviceusage.serviceUsageConsumer
) -
Si se escribe el estado en un contenedor ya creado (
--storage-path=BUCKET
):-
Creador de objetos de Storage (
roles/storage.objectCreator
) -
Lector de objetos de Storage (
roles/storage.objectViewer
)
-
Creador de objetos de Storage (
-
Si vas a escribir el estado en un nuevo contenedor:
Lector de objetos de Storage (
roles/storage.objectViewer
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Antes de empezar
Prepara Cloud Shell.
Inicia Cloud Shell y define el proyecto Google Cloud predeterminado en el que quieras generar el código de Terraform para los recursos implementados.
Solo tienes que ejecutar este comando una vez por proyecto y puedes hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si se definen valores explícitos en un archivo de configuración de Terraform.
En Cloud Shell, instala la interfaz de línea de comandos (CLI) de 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:sudo apt-get install google-cloud-sdk-config-connector
Habilita la API 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 recursos de Cloud (
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 recursos de Cloud (
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 se pueden exportar al formato Terraform, aunque sean compatibles con el proveedor de Google de Terraform. Para ver una lista de los tipos de recursos que se pueden exportar al formato de Terraform, ejecuta el comando gcloud beta resource-config list-resource-types
.
Exportar toda la configuración del proyecto a código HCL de Terraform
El comando gcloud beta resource-config bulk-export --resource-format=terraform
exporta los recursos configurados en el proyecto, la carpeta o la organización, y los muestra en pantalla en formato de código HCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
Escribir la salida en una estructura de directorios
Si aún no lo has hecho, crea el directorio en el que quieras 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 en la que se va a generar el código HCL.
Después de ejecutar el comando, el código HCL de cada recurso se genera en un archivo .tf
independiente en la siguiente estructura de directorios:
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
Escribir la salida en un solo archivo
Si no quieres imprimir el resultado en la pantalla ni crear archivos .tf
independientes, 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
Filtrar el resultado
Filtra la salida del comando de exportación en bloque especificando tipos de recursos.
Lista de los tipos de recursos admitidos por los que se va a filtrar.
Para ver una lista de los tipos de recursos que se pueden exportar al formato de Terraform, ejecuta el comando gcloud beta resource-config list-resource-types
:
gcloud beta resource-config list-resource-types
También puedes escribir la salida en un archivo:
gcloud beta resource-config list-resource-types >> strings.txt
En la salida, el tipo de recurso de las VMs de Compute Engine se indica de la siguiente manera:
KRM KIND: ComputeInstance
Puedes ignorar el prefijo KRM KIND:
.
Exportar un solo tipo de recurso
Usa una cadena, como ComputeInstance
, para exportar tipos de recursos específicos de 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 va a mostrar.
Exportar varios tipos de recursos
Exporta instancias de VM y reglas de cortafuegos en formato de código HCL:
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
Usar un archivo para especificar los tipos de recursos que se van a exportar
Crea un directorio llamado
tf-output
.cd && mkdir tf-output && cd tf-output
Crea un archivo llamado
types.txt
y añade 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 recurso de un tipo concreto, el comando se ejecutará correctamente, pero no se mostrará nada para ese tipo de recurso.
Solución de problemas
Si aparece el siguiente error:
"Permiso denegado durante la exportación. Asegúrate de que la API Cloud Asset Inventory esté habilitada."
Asegúrate de haber seguido las instrucciones de la sección Antes de empezar.