Desplegar Google Cloud Run con Terraform.

Desplegar Google Cloud Run con Terraform.

Ejemplo de despliegue utilizando Módulos y recursos.

Seguimos en la serie de ejemplos de despliegue de servicios de Google Cloud Platform (GCP) con Terraform. Hoy vamos a desplegar Google Cloud Run utilizando el módulo oficial de Google para Terraform y el recurso de Terraform directamente.

Configuración Google

Prerrequisitos:

  • Cuenta de Google Cloud Platform

  • gcloud instalado y configurado

  • API habilitadas en la consola de Google Cloud Platform

  • Terraform instalado

  • Verificamos que estamos logueados desde la consola y que estamos parados en el proyecto donde queremos desplegar nuestros Cloud Run

$ gcloud auth list 
# Output                                                                                             gcloud terraform-functions
# Credentialed Accounts
# ACTIVE  ACCOUNT
# *       xxxxxx@gmail.com

Configuramos el proyecto sobre el que queremos trabajar:

gcloud config set project xxxxxx   
# Output                                                              gcloud terraform-functions
# Updated property [core/project].

Configuramos las credenciales para que el Terraform pueda tomarlas y realizar el despliegue

gcloud auth application-default login
# Output                    
# https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=XXXXXX-XXX
# Credentials saved to file: [/Users/XXXXX/.config/gcloud/application_default_credentials.json]
# These credentials will be used by any library that requests Application Default Credentials (ADC).
# Quota project "terraform-functions" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.

Con esta configuración pasamos al código de Terraform que analizaremos en el siguiente paso.

✏️ Repositorio Terraform

El código de los ejemplos mostrados en este post están todos en el siguiente repositorio, en la carpeta cloud-run

https://github.com/olcortesb/tf-gcp-samples/tree/main/cloud-run

En esta carpeta están los ejemplos de despliegue con Módulo y con Recursos:

📘 Despliegue con Módulo:

El despliegue con módulo lo realicé utilizando el módulo oficial de Google:

https://github.com/GoogleCloudPlatform/terraform-google-cloud-run

// cloud-run/cloudrun-from-module.tf
module "cloud_run" {
  source  = "GoogleCloudPlatform/cloud-run/google"
  version = "~> 0.10.0"

  # Required variables
  service_name = "hello-run-module"
  project_id   = var.project_id
  location     = var.region
  image        = "gcr.io/cloudrun/hello"
}

📃 Despliegue con el Recurso:

El despliegue del cloud run de recurso se realizó con el recurso oficial de terraform para cloud run v2:

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service

// cloud-run/cloudrun-from-scratch.tf
resource "google_cloud_run_v2_service" "default" {
  name     = "hello-run-resource"
  location = var.region
  client   = "terraform"
  ingress  = "INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER"
  template {
    containers {
      name  = "hello-run-resource"
      image = "gcr.io/cloudrun/hello"
    }
  }
}

resource "google_cloud_run_v2_service_iam_member" "noauth" {
  location = google_cloud_run_v2_service.default.location
  name     = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  member   = "allUsers"
}

Una vez revisadas nuestras configuraciones

terraform plan
terraform apply

✅ Resultados:

En la consola podemos ver los dos cloud Run desplegados con cada método.

La principal diferencia es con la configuración por default, el módulo se despliega con una autorización que permite invocar el cloud run din balancer. Mientras el recurso necesitara más configuración para acceder fuera de una VPC.

Al acceder a la URL en función del método que elijamos veremos la siguiente página que indica que el contenedor sé desplegó correctamente.

⚠️ Borrar la infraestructura

Luego que terminemos las pruebas recordar hacer un

terraform destroy

Gracias por leer

Saludos.

Referencias