En esta página, se proporcionan respuestas a las preguntas frecuentes que surgen cuando se usa Terraform para administrar recursos en Google Cloud, en particular, en lo que respecta a las interacciones con la API y los primeros pasos.
Comienza a usar Terraform
En esta sección, se abarcan los conceptos fundamentales y los pasos iniciales para los usuarios nuevos 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 administrar y aprovisionar la infraestructura de computación a través de archivos de definición legibles por máquina. Para obtener una descripción general completa de los conceptos y beneficios 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 administrar recursos en la nube y locales. Para obtener información sobre las ventajas de usar Terraform para tu flujo de trabajo de IaC, consulta Beneficios de usar Terraform.
¿Cómo instalo Terraform y ejecuto mi primera configuración?
Para comenzar a usar Terraform, primero debes descargar e instalar la CLI de Terraform en tu máquina local. Las instrucciones están disponibles 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 bucket de Cloud Storage) y, luego, usar terraform init para inicializar tu directorio de trabajo, terraform plan para obtener una vista previa de los cambios y terraform apply para aplicarlos.
¿Qué es el lenguaje de configuración de HashiCorp (HCL) y dónde puedo aprender su sintaxis?
El lenguaje de configuración de HashiCorp (HCL) es el lenguaje de configuración que usa Terraform. Está diseñado para ser legible por humanos y compatible con máquinas, para una escritura y comprensión claras y eficientes de 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 proporciona guías y ejemplos completos.
¿Dónde puedo encontrar ejemplos de configuraciones de Terraform para Google Cloud recursos?
Puedes encontrar numerosos ejemplos de configuraciones de Terraform para lo siguiente Google Cloud:
HashiCorp Terraform Registry: El registro oficial de Terraform Registry para el Google Cloud proveedor contiene documentación y ejemplos para cada recurso y fuente de datos.
Google Cloud Muestras de Terraform: Google proporciona una variedad de muestras de Terraform que demuestran cómo implementar y administrar 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 administrar y probar configuraciones complejas de Terraform, en especial cuando se trata de muchos recursos?
Para configuraciones complejas, considera usar las funciones de Terraform diseñadas para la escalabilidad y el mantenimiento:
Módulos: Encapsula y reutiliza patrones de infraestructura comunes.
Espacios de trabajo: Administra varias instancias distintas de una sola configuración.
terraform planyterraform validate: Usa estos comandos con frecuencia para validar la sintaxis y obtener una vista previa de los cambios sin la implementación real.Recursos de segmentación (usar con precaución): Para probar partes específicas, puedes usar
-targetde forma temporal conterraform applyoterraform destroy, aunque, por lo general, no se recomienda para operaciones de rutina debido a las complejidades de la administración de estados.Entornos dedicados: Realiza la implementación en entornos de desarrollo o pruebas para realizar pruebas antes de la producción.
Google Cloud Preguntas sobre API
Estas preguntas abordan consultas comunes sobre la interacción de Terraform con Google Cloud las APIs, incluidas las APIs públicas y privadas.
¿Puedo usar Terraform para administrar o importar APIs internas o privadas Google Cloud como dataproc-control.googleapis.com?
No. Las APIs internas o privadas Google Cloud forman parte de la Service Infrastructure administrada de Google y no se exponen para la administración, habilitación o importación directas del cliente con Terraform. Estas APIs se controlan automáticamente con Google Cloud. Si intentas administrarlas directamente con Terraform, se producirán errores.
Para obtener una explicación completa, consulta la guía Understanding Google Cloud APIs and Terraform guide.
¿Cuál es la diferencia entre habilitar una API y importar un recurso en Terraform?
Habilitar una API: Esto significa activar un servicio específico para Google Cloud tu proyecto y otorgarle los permisos necesarios para usar ese servicio. Cuando se usa Terraform en Google Cloud, esto suele hacerse con el recurso
google_project_service. Este es un requisito previo para crear recursos que dependen de esa API.Importar un recurso: Se refiere a incorporar un recurso Google Cloud existente (por ejemplo, una instancia de Compute Engine, un bucket de Cloud Storage) que se creó fuera de Terraform en la administración de Terraform. Importas recursos, no las APIs en sí.
Para obtener más detalles, consulta la guía Understanding Google Cloud APIs and Terraform Guide.
¿Qué sucede si no administro ni importo dataproc-control.googleapis.com de forma explícita? ¿Afectará mi capacidad para usar Managed Service para Apache Spark?
No, no afectará tu capacidad para usar Managed Service para Apache Spark. dataproc-control.googleapis.com es una API interna que usa Managed Service para Apache Spark para su propio control operativo. Su funcionalidad se administra automáticamente con
Google Cloudy no requiere que la habilites, importes o administres de forma explícita
con Terraform. Tus clústeres y trabajos de Managed Service para Apache Spark funcionarán correctamente sin ninguna intervención manual con respecto a esta API interna.
¿Cómo soluciono 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 IAM necesarios para
realizar una acción solicitada en un Google Cloud recurso específico. Para solucionar el problema, haz lo siguiente:
Identifica el recurso y el método de API afectados: Por lo general, el mensaje de error especifica el tipo de recurso y la llamada a la API que falló.
Verifica los roles de IAM: Verifica que la entidad principal (cuenta de servicio o usuario) tenga los roles de IAM correctos asignados en el nivel adecuado (proyecto, carpeta, organización o recurso). Usa el solucionador de problemas de IAM en Google Cloud la consola.
Verifica la habilitación del servicio: Confirma que el servicio de Google Cloud API requerido esté habilitado para tu proyecto (por ejemplo, con
gcloud services enableogoogle_project_service).Revisa las políticas de la organización: Verifica si alguna política de la organización restringe la acción.
¿Por qué encuentro 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 realizar más solicitudes a la API de lo que permiten sus cuotas actuales. Para solucionar el problema, sigue estos pasos:
Identifica la cuota específica: Por lo general, el mensaje de error especifica la API y el límite de cuota superado.
Verifica las cuotas actuales: Visita la página Cuotas en la Google Cloud consola para ver el uso y los límites actuales.
Solicita un aumento de la cuota: Si necesitas más capacidad, puedes solicitar un aumento de la cuota directamente desde la página Cuotas.
Considera
user_project_override: Para algunos recursos, si tu proyecto de credenciales difiere del proyecto de recursos, es posible que las solicitudes a la API se facturen en función de la cuota del proyecto de credenciales. El uso deuser_project_override(consulta la referencia del proveedor) a veces puede resolver este problema forzando la facturación de la cuota al proyecto del recurso.
¿Qué es una cuenta de servicio predeterminada administrada por el usuario y cómo puedo administrar sus permisos con Terraform?
Algunos Google Cloud servicios crean automáticamente cuentas de servicio administradas 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. Si bien son administradas por el usuario, las crea Google. Puedes administrar sus permisos con recursos de IAM como google_project_iam_member para modificar sus roles. Si deseas realizar acciones en las cuentas de servicio predeterminadas, como quitar sus roles predeterminados de alta prioridad o borrar las cuentas por completo, puedes usar el recurso google_project_default_service_accounts.
Google también proporciona orientación sobre los tipos de cuentas de servicio predeterminadas.
¿Qué es una cuenta de servicio administrada por Google y cómo la hago referencia en las configuraciones de Terraform?
Google crea y administra por completo las cuentas de servicio administradas por Google para ciertos servicios. Existen fuera de los proyectos de usuario y los usuarios no pueden configurarlas directamente de la misma manera que las cuentas de servicio administradas por el usuario. Sin embargo, es posible que debas otorgarles permisos de IAM para interactuar con tus recursos. Puedes hacer referencia a la dirección de correo electrónico de una cuenta de servicio administrada por Google para un servicio específico con la fuente de datos o el recurso google_project_service_identity en Terraform para, luego, aplicarle políticas de IAM. Por ejemplo, esto es común para servicios como Cloud Build o Managed Service para Apache Airflow.
¿Qué sucede cuando terraform destroy un recurso que tiene configurado disable_on_destroy?
El argumento disable_on_destroy en google_project_service y algunos otros recursos (por ejemplo, google_storage_bucket) controla si el recurso de nube subyacente se inhabilita o se borra cuando se destruye el recurso de Terraform.
Si
disable_on_destroyestrue(o no está configurado, ya que suele ser el valor predeterminado),terraform destroyintentará inhabilitar (para las APIs) o borrar (para los buckets) el recurso de nube correspondiente.Si
disable_on_destroyesfalse,terraform destroyquitará el recurso del estado de Terraform, pero dejará intacto el recurso de nube real (p.ej., la API habilitada o el bucket) en tu Google Cloud proyecto. Esto suele ser preferible para los servicios críticos que no se deben inhabilitar o borrar de forma accidental.