Saltar a contenido

06 — Proyecto GCP y APIs

Anterior: 05 — Configuración del proyecto y estado de Terraform

Antes de que Terraform pueda crear recursos, necesitamos un proyecto de GCP y debemos habilitar las APIs que Terraform gestionará.


Crear un proyecto de GCP

Si aún no tienes un proyecto de GCP, crea uno:

# Crear un nuevo proyecto
gcloud projects create mycoolproject-prod --name="My Cool Project"

# Establecerlo como tu proyecto activo
gcloud config set project mycoolproject-prod

Si ya tienes un proyecto, salta a establecer el proyecto activo:

gcloud config set project mycoolproject-prod

Obtén tu ID de proyecto (lo necesitarás para Terraform):

gcloud projects describe mycoolproject-prod --format='value(projectId)'

Habilitar APIs de GCP

Terraform gestiona estos servicios de GCP, así que necesitamos habilitar sus APIs:

# Habilitar APIs necesarias para esta guía
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  cloudscheduler.googleapis.com \
  tasks.googleapis.com \
  storage.googleapis.com \
  secretmanager.googleapis.com

Estas APIs alimentan Cloud Run, Cloud Storage, Secret Manager y más.


ID de Proyecto vs Número de Proyecto

  • Project ID — tu identificador único (ej., mycoolproject-prod)
  • Project Number — un identificador numérico (ej., 123456789012)

Terraform usa ambos: - project en la configuración del provider = ID del proyecto - Algunos recursos necesitan el número de proyecto para enlaces de IAM

Obtén tu número de proyecto:

gcloud projects describe mycoolproject-prod --format='value(projectNumber)'

Agrega ambos a infrastructure/terraform.tfvars:

project_id      = "mycoolproject-prod"
project_number  = "123456789012"
region          = "southamerica-east1"

Terraform: Habilitar APIs vía recurso

Alternativamente, puedes dejar que Terraform habilite las APIs automáticamente usando el recurso google-project-service-enforcement. Agrega a main.tf:

# Habilitar APIs requeridas
resource "google_project_service" "apis" {
  for_each = toset([
    "run.googleapis.com",
    "cloudbuild.googleapis.com",
    "artifactregistry.googleapis.com",
    "cloudscheduler.googleapis.com",
    "tasks.googleapis.com",
    "storage.googleapis.com",
    "secretmanager.googleapis.com",
  ])

  project = var.project_id
  service = each.value

  disable_dependent_services = false
  disable_on_destroy         = false
}

Este enfoque hace que la habilitación de APIs sea parte de tu estado de Terraform — útil para reproducibilidad.