Preguntas frecuentes sobre Terraform en Google Cloud

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 y terraform 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 con terraform apply o terraform 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:

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

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

  3. 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 o google_project_service).

  4. Revisa las políticas de la organización: comprueba si alguna política de la organización restringe la acción.

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:

  1. Identifica la cuota específica: el mensaje de error suele especificar la API y el límite de cuota que se ha superado.

  2. Comprobar las cuotas actuales: visita la página Cuotas de la Google Cloud consola para ver el uso y los límites actuales.

  3. Solicitar un aumento de cuota: si necesita más capacidad, puede solicitar un aumento de cuota directamente desde la página Cuotas.

  4. 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 usando user_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 es true (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 es false, 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.