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 configuradoAPI 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
https://github.com/olcortesb/tf-gcp-samples/tree/main/cloud-run
https://github.com/GoogleCloudPlatform/terraform-google-cloud-run
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service
https://cloud.google.com/functions/docs/concepts/overview?hl=es-419
https://cloud.google.com/run/docs/deploy-functions?hl=es-419#terraform