En esta página se responden preguntas habituales sobre el uso de Terraform para gestionar recursos en Google Cloud, sobre todo en lo que respecta a las interacciones con las APIs y a cómo empezar.
Primeros pasos con Terraform
En esta sección se explican los conceptos básicos y los primeros pasos para los nuevos usuarios de Terraform.
¿Qué es la infraestructura como código (IaC) y por qué debería usar Terraform?
La infraestructura como código (IaC) es la práctica de gestionar y aprovisionar la infraestructura informática mediante archivos de definición legibles por máquina. Para obtener una descripción completa de los conceptos y las ventajas de IaC, consulta ¿Qué es la infraestructura como código?
Terraform es una herramienta de IaC de código abierto que se usa para definir, aprovisionar y gestionar recursos en la nube y on-premise. Para obtener información sobre las ventajas de usar Terraform en tu flujo de trabajo de IaC, consulta las ventajas de usar Terraform.
¿Cómo instalo Terraform y ejecuto mi primera configuración?
Para empezar a usar Terraform, primero debes descargar e instalar la CLI de Terraform en tu máquina local. Puedes consultar las instrucciones en el sitio web de HashiCorp Terraform. Después de la instalación, puedes crear un archivo de configuración de Terraform, definir un recurso (como un segmento de Cloud Storage) y, a continuación, usar terraform init
para inicializar tu directorio de trabajo, terraform plan
para previsualizar los cambios y terraform apply
para aplicarlos.
¿Qué es el lenguaje de configuración de HashiCorp (HCL) y dónde puedo aprender su sintaxis?
HashiCorp Configuration Language (HCL) es el lenguaje de configuración que usa Terraform. Se ha diseñado para que sea legible por humanos y por máquinas, de modo que se puedan escribir y entender de forma clara y eficiente las definiciones de infraestructura. HCL admite varias funciones, como variables, expresiones, funciones y módulos. Puedes aprender la sintaxis de HCL a través de la documentación oficial de HashiCorp Terraform, que ofrece guías y ejemplos completos.
¿Dónde puedo encontrar ejemplos de configuraciones de Terraform para recursos de Google Cloud ?
Puedes encontrar numerosos ejemplos de configuraciones de Terraform para Google Cloud:
Registro de Terraform de HashiCorp: el registro oficial de Terraform del proveedor Google Cloud contiene documentación y ejemplos de todos los recursos y fuentes de datos.
Google Cloud Ejemplos de Terraform: Google ofrece una variedad de ejemplos de Terraform que muestran cómo desplegar y gestionar recursos comunes. Google Cloud
Repositorios de GitHub: muchos repositorios de código abierto, incluida la organización de GitHub
terraform-google-modules
, ofrecen ejemplos y módulos reutilizables.
¿Cómo puedo gestionar y probar configuraciones complejas de Terraform, sobre todo cuando se trata de muchos recursos?
En el caso de las configuraciones complejas, te recomendamos que uses las funciones de Terraform diseñadas para mejorar la escalabilidad y el mantenimiento:
Módulos: encapsulan y reutilizan patrones de infraestructura comunes.
Espacios de trabajo: gestiona varias instancias distintas de una misma configuración.
terraform plan
yterraform validate
: usa estos comandos con frecuencia para validar la sintaxis y previsualizar los cambios sin realizar el despliegue.Recursos de segmentación (úsalo con precaución): para probar partes específicas, puedes usar temporalmente
-target
conterraform apply
oterraform destroy
, aunque no se recomienda para operaciones rutinarias debido a la complejidad de la gestión de estados.Entornos específicos: implementa en entornos de desarrollo o de staging para hacer pruebas antes de la producción.
Google Cloud Preguntas sobre la API
En estas preguntas se abordan las consultas habituales sobre la interacción de Terraform con las APIs, incluidas las públicas y las privadas.Google Cloud
¿Puedo usar Terraform para gestionar o importar APIs internas o privadas, como Google Cloud dataproc-control.googleapis.com
?
No. Las APIs internas o privadas Google Cloud forman parte de la infraestructura de servicios gestionada de Google y no se exponen para que los clientes puedan gestionarlas, habilitarlas o importarlas directamente con Terraform. Google Cloudgestiona estas APIs automáticamente. Si intentas gestionarlos directamente con Terraform, se producirán errores.
Para obtener una explicación detallada, consulta la guía sobre las APIs de Google Cloud y Terraform.
¿Qué diferencia hay entre habilitar una API e importar un recurso en Terraform?
Habilitar una API: esto significa activar un servicio específico Google Cloud para tu proyecto y concederle los permisos necesarios para usarlo. Cuando se usa Terraform en Google Cloud, esto se suele hacer con el recurso
google_project_service
. Este paso es necesario para crear recursos que dependan de esa API.Importar un recurso: se refiere a incorporar un recurso Google Cloud (por ejemplo, una instancia de Compute Engine o un bucket de Cloud Storage) que se haya creado fuera de Terraform a la gestión de Terraform. Importas recursos, no las APIs en sí.
Para obtener más información, consulta la guía sobre las APIs y Terraform Google Cloud .
¿Qué ocurre si no gestiono ni importo explícitamente dataproc-control.googleapis.com? ¿Afectará a mi capacidad para usar Dataproc?
No, no afectará a tu capacidad para usar Dataproc. dataproc-control.googleapis.com
es una API interna que usa Dataproc para su propio control operativo.
Google Cloudgestiona automáticamente su funcionalidad, por lo que no es necesario que la habilites, la importes ni la gestiones explícitamente con Terraform. Tus clústeres y trabajos de Dataproc funcionarán correctamente
sin que tengas que hacer nada manualmente con respecto a esta API interna.
¿Cómo puedo solucionar los errores 403 Permission Denied en Terraform?
Los errores 403 Permission Denied
suelen indicar que la cuenta de servicio o las credenciales de usuario que usa Terraform no tienen los permisos de gestión de identidades y accesos necesarios para realizar una acción solicitada en un recurso Google Cloud específico. Para solucionar el problema, haz lo siguiente:
Identifica el recurso y el método de la API afectados: el mensaje de error suele especificar el tipo de recurso y la llamada a la API que ha fallado.
Comprueba los roles de gestión de identidades y accesos: verifica que el principal (cuenta de servicio o usuario) tenga asignados los roles de gestión de identidades y accesos correctos en el nivel adecuado (proyecto, carpeta, organización o recurso). Usa la herramienta para solucionar problemas de IAM en la Google Cloud consola.
Verifica que el servicio esté habilitado: confirma que el servicio de la API Google Cloud necesario esté habilitado en tu proyecto (por ejemplo, con
gcloud services enable
ogoogle_project_service
).Revisa las políticas de la organización: comprueba si alguna política de la organización restringe la acción.
¿Por qué se producen errores relacionados con la cuota (429 Too Many Requests o 403 Quota Exceeded)?
Los errores de cuota se producen cuando tu proyecto intenta consumir más recursos o hacer más solicitudes de API de lo que permiten sus cuotas actuales. Para solucionarlo, haz lo siguiente:
Identifica la cuota específica: el mensaje de error suele especificar la API y el límite de cuota que se ha superado.
Comprobar las cuotas actuales: visita la página Cuotas de la Google Cloud consola para ver el uso y los límites actuales.
Solicitar un aumento de cuota: si necesita más capacidad, puede solicitar un aumento de cuota directamente desde la página Cuotas.
Ten en cuenta lo siguiente: En el caso de algunos recursos, si el proyecto de tus credenciales es diferente del proyecto del recurso, es posible que las solicitudes de API se facturen según la cuota del proyecto de las credenciales.
user_project_override
A veces, se puede solucionar este problema usandouser_project_override
(consulta la referencia del proveedor) para forzar que la cuota se facture al proyecto del recurso.
¿Qué es una cuenta de servicio predeterminada gestionada por el usuario y cómo puedo gestionar sus permisos con Terraform?
Algunos Google Cloud servicios crean automáticamente cuentas de servicio gestionadas por el usuario (a menudo denominadas "cuentas de servicio predeterminadas") cuando se crea un proyecto o se habilita un servicio. Por lo general, tienen permisos amplios. Aunque los usuarios las gestionan, Google las crea. Puedes gestionar sus permisos
con recursos de gestión de identidades y accesos, como google_project_iam_member
, para modificar sus
roles. Si quieres realizar alguna acción en las cuentas de servicio predeterminadas, como quitarles los roles predeterminados con privilegios elevados o eliminarlas por completo, puedes usar el recurso google_project_default_service_accounts
.
Google también ofrece información sobre los tipos de cuentas de servicio predeterminadas.
¿Qué es una cuenta de servicio gestionada por Google y cómo puedo hacer referencia a ella en las configuraciones de Terraform?
Google crea y gestiona por completo las cuentas de servicio gestionadas por Google para determinados servicios. Existen fuera de los proyectos de los usuarios y los usuarios no pueden configurarlas directamente de la misma forma que las cuentas de servicio gestionadas por los usuarios. Sin embargo, es posible que tengas que concederles permisos de gestión de identidades y accesos para que interactúen con tus recursos. Puedes hacer referencia a la dirección de correo de una cuenta de servicio gestionada por Google para un servicio específico mediante la fuente de datos google_project_service_identity
o el recurso en Terraform para, a continuación, aplicarle políticas de gestión de identidades y accesos. Por ejemplo, esto es habitual en servicios como Cloud Build o Cloud Composer.
¿Qué ocurre si terraform destroy
un recurso que tiene disable_on_destroy
configurado?
El argumento disable_on_destroy
de google_project_service
y de algunos otros recursos (por ejemplo, google_storage_bucket
) controla si el recurso de nube subyacente se inhabilita o se elimina cuando se destruye el recurso de Terraform.
Si
disable_on_destroy
estrue
(o no se ha definido, ya que suele ser el valor predeterminado),terraform destroy
intentará inhabilitar (en el caso de las APIs) o eliminar (en el caso de los contenedores) el recurso de nube correspondiente.Si
disable_on_destroy
esfalse
,terraform destroy
quitará el recurso del estado de Terraform, pero dejará intacto el recurso de nube real (por ejemplo, la API habilitada o el bucket) en tu proyecto de Google Cloud . Esta opción suele ser la preferida para los servicios críticos que no se deben inhabilitar o eliminar por error.