El objetivo de esta guía es aclarar cómo interactúa Terraform con las APIs de Google Cloud (diferenciando entre las APIs públicas y privadas) y explicar conceptos clave, como la habilitación de APIs y la importación de recursos. Es fundamental para gestionar de forma eficaz tus recursos con Terraform y evitar errores comunes. Google Cloud
APIs públicas y privadas Google Cloud
LosGoogle Cloud servicios exponen varias APIs que permiten que las aplicaciones y las herramientas (como Terraform) interactúen con los recursos y los gestionen. Estas APIs se dividen en dos categorías:
APIs públicas
Finalidad: son las interfaces principales para que los clientes y las herramientas creen, configuren y gestionen Google Cloud recursos (por ejemplo, Instancias de Compute Engine, segmentos de Cloud Storage y conjuntos de datos de BigQuery.
Exposición: las APIs públicas están bien documentadas, tienen endpoints REST definidos y están pensadas para el consumo externo. Son las APIs con las que se ha creado el proveedor de Terraform de google
para interactuar.
Ejemplos: compute.googleapis.com
, storage.googleapis.com
y bigquery.googleapis.com
.
APIs privadas (internas)
Finalidad: estas APIs son internas de los servicios de Google Cloud y Google las usa para el funcionamiento interno, la orquestación y el aprovisionamiento de sus servicios gestionados. Exponen funcionalidades que no están pensadas para la interacción o la gestión directa de los clientes.
Exposición: las APIs privadas no suelen estar documentadas públicamente, no tienen endpoints externos estables y no están diseñadas para que herramientas de terceros, como Terraform, accedan directamente a ellas. Son un detalle de implementación del servicio.
Ejemplo: dataproc-control.googleapis.com
es una API interna que Dataproc usa para su plano de control operativo. Los clientes no interactúan directamente con esta API ni la gestionan.
Habilitación de APIs frente a importación de recursos en Terraform
Es fundamental entender la diferencia entre "habilitar una API" e "importar un recurso" para usar Terraform de forma eficaz con Google Cloud.
Habilitar una API
- Qué significa: Cuando "habilitas una API" en Google Cloud, activas un servicio Google Cloud específico para tu proyecto. De esta forma, tu proyecto tendrá los permisos y el acceso necesarios para usar las funciones de ese servicio y crear recursos gestionados por él.
Contexto de Terraform: en Terraform, esto se suele hacer con el recurso google_project_service
. Este recurso verifica que una API pública especificada (por ejemplo, compute.googleapis.com
) está habilitada en tu Google Cloud proyecto.
Finalidad: habilitar una API es un requisito para crear o gestionar recursos que pertenezcan a ese servicio. Por ejemplo, debes habilitar compute.googleapis.com
para poder crear recursos google_compute_instance
.
Ejemplo (Terraform):
```hcl
resource "google_project_service" "compute_api" {
project = "your-gcp-project-id"
service = "compute.googleapis.com"
disable_on_destroy = false
}
```
Nota importante: El recurso google_project_service
se ha diseñado exclusivamente para gestionar el estado de habilitación de las APIs de acceso público Google Cloud . No está diseñada para APIs internas o privadas, por lo que no funcionará con ellas. Si intentas usarla para APIs privadas, se producirán errores, ya que esas APIs no se exponen a través de la superficie de la API pública para dicha gestión.
Importar un recurso
Qué significa: en Terraform, "importar" se refiere a incorporar un recurso de nube que ya existe (uno que se ha creado manualmente o mediante otro proceso fuera de Terraform) a la gestión de Terraform. Cuando importas un recurso, Terraform genera una entrada de estado para él, lo que te permite gestionar su ciclo de vida (actualizaciones, eliminación) mediante tu configuración de Terraform.
Contexto de Terraform: esto se consigue con el comando terraform import
o mediante el uso de bloques import
introducidos en Terraform 1.5 o versiones posteriores.
Propósito: obtener el control de los recursos que no se aprovisionaron inicialmente con Terraform.
Ejemplo (CLI de Terraform):
```bash
terraform import google_compute_instance.my_instance projects/your-gcp-project-id/zones/us-central1-a/instances/my-vm
```
Cómo abordar las preocupaciones sobre las APIs privadas (por ejemplo, dataproc-control.googleapis.com
)
A veces, los clientes se encuentran referencias a APIs privadas (como
dataproc-control.googleapis.com
para Dataproc) en los registros o en la documentación y se preguntan si deben habilitarlas o importarlas con Terraform.
No es necesario que los clientes hagan nada: si se identifica una API como privada o interna Google Cloud , no es necesario que la habilite explícitamente mediante google_project_service
ni que intente importarla con Terraform.
Gestión interna: estas APIs son cruciales para el funcionamiento interno de los servicios deGoogle Cloud . Google las gestiona automáticamente y no están diseñadas para que los clientes interactúen directamente con ellas ni para que las gestionen a través de herramientas públicas.
Sin repercusión en el uso del servicio: el hecho de que no puedas "importar" ni gestionar explícitamente una API privada de este tipo con Terraform no afectará a tu capacidad de usar el servicio asociado (por ejemplo, Google Cloud Dataproc funcionará correctamente sin que tengas que gestionar dataproc-control.googleapis.com
). Google se encarga de las interacciones internas necesarias con la API.
Centrarse en las APIs públicas: al gestionar Google Cloud recursos con Terraform, debes centrarte únicamente en habilitar y configurar las APIs públicas que correspondan a los servicios y recursos que quieras aprovisionar.
Conclusión
Si conoces la diferencia entre las APIs públicas y privadas, y los roles específicos de las APIs de habilitación y los recursos de importación en Terraform, podrás gestionar tu infraestructura de forma eficaz. No intentes gestionar ni importar APIs privadas de forma explícita, ya que son componentes internos gestionados por Google. Google Cloud Google Cloud Google Cloud Centra tus configuraciones de Terraform en las APIs expuestas públicamente y sus recursos correspondientes.