Tutorial de Pub/Sub de Terraform


En este tutorial se muestra cómo desplegar una función de Pub/Sub subiendo un archivo ZIP del código fuente de la función a un segmento de Cloud Storage y usando Terraform para aprovisionar los recursos. Terraform es una herramienta de código abierto que te permite aprovisionar Google Cloud recursos con archivos de configuración declarativos.

En este tutorial se usa una función de Node.js como ejemplo, pero también funciona con funciones de Python, Go y Java. Las instrucciones son las mismas independientemente del tiempo de ejecución que utilices. Consulta las páginas de referencia de HashiCorp para obtener información detallada sobre el uso de Terraform con la API Cloud Functions v2.

Objetivos

  • Consulta cómo usar Terraform para desplegar una función de Pub/Sub.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

For details, see Cloud Run functions pricing.

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Si ya tienes instalada la CLI de gcloud, actualízala ejecutando el siguiente comando:

    gcloud components update
  15. Asigna los roles roles/run.invoker y roles/cloudbuild.builds.builder a la cuenta de servicio predeterminada de Compute.
  16. Prepara tu entorno de desarrollo.

    Ir a la guía de configuración de Node.js

  17. Configurar un entorno

    En este tutorial, ejecutarás comandos en Cloud Shell. Cloud Shell es un entorno de shell con la CLI de Google Cloud ya instalada, incluidos la CLI de Google Cloud y los valores ya definidos para tu proyecto actual. Cloud Shell puede tardar varios minutos en inicializarse:

    Abrir Cloud Shell

    Preparar la aplicación

    En Cloud Shell, sigue estos pasos:

    1. Clona el repositorio de la aplicación de ejemplo en tu instancia de Cloud Shell:

      git clone https://github.com/terraform-google-modules/terraform-docs-samples.git
    2. Cambia al directorio que contiene el código de ejemplo de Cloud Run Functions:

      cd terraform-docs-samples/functions/pubsub

      El ejemplo de Node.js que se usa en este tutorial es una función básica de Pub/Sub "Hello World". Este es el archivo main.tf:

      terraform {
        required_providers {
          google = {
            source  = "hashicorp/google"
            version = ">= 4.34.0"
          }
        }
      }
      
      resource "random_id" "bucket_prefix" {
        byte_length = 8
      }
      
      
      resource "google_service_account" "default" {
        account_id   = "test-gcf-sa"
        display_name = "Test Service Account"
      }
      
      resource "google_pubsub_topic" "default" {
        name = "functions2-topic"
      }
      
      resource "google_storage_bucket" "default" {
        name                        = "${random_id.bucket_prefix.hex}-gcf-source" # Every bucket name must be globally unique
        location                    = "US"
        uniform_bucket_level_access = true
      }
      
      data "archive_file" "default" {
        type        = "zip"
        output_path = "/tmp/function-source.zip"
        source_dir  = "function-source/"
      }
      
      resource "google_storage_bucket_object" "default" {
        name   = "function-source.zip"
        bucket = google_storage_bucket.default.name
        source = data.archive_file.default.output_path # Path to the zipped function source code
      }
      
      resource "google_cloudfunctions2_function" "default" {
        name        = "function"
        location    = "us-central1"
        description = "a new function"
      
        build_config {
          runtime     = "nodejs22"
          entry_point = "helloPubSub" # Set the entry point
          environment_variables = {
            BUILD_CONFIG_TEST = "build_test"
          }
          source {
            storage_source {
              bucket = google_storage_bucket.default.name
              object = google_storage_bucket_object.default.name
            }
          }
        }
      
        service_config {
          max_instance_count = 3
          min_instance_count = 1
          available_memory   = "256M"
          timeout_seconds    = 60
          environment_variables = {
            SERVICE_CONFIG_TEST = "config_test"
          }
          ingress_settings               = "ALLOW_INTERNAL_ONLY"
          all_traffic_on_latest_revision = true
          service_account_email          = google_service_account.default.email
        }
      
        event_trigger {
          trigger_region = "us-central1"
          event_type     = "google.cloud.pubsub.topic.v1.messagePublished"
          pubsub_topic   = google_pubsub_topic.default.id
          retry_policy   = "RETRY_POLICY_RETRY"
        }
      }

    Inicializar Terraform

    En el directorio terraform-docs-samples/functions/pubsub que contiene el archivo main.tf, ejecuta este comando para añadir los complementos necesarios y crear el directorio .terraform:

    terraform init
    

    Validar la configuración de Terraform

    Obtén una vista previa de la configuración de Terraform. Este paso es opcional, pero te permite verificar que la sintaxis de main.tf es correcta. Este comando muestra una vista previa de los recursos que se crearán:

    terraform plan
    

    Aplica la configuración de Terraform

    Despliega la función aplicando la configuración. Cuando se te solicite, introduce yes:

    terraform apply
    

    Activar la función

    Para probar la función de Pub/Sub, sigue estos pasos:

    1. Publica un mensaje en el tema (en este ejemplo, el nombre del tema es functions2-topic):

      gcloud pubsub topics publish TOPIC_NAME --message="Friend"
    2. Lee los registros de la función para ver el resultado, donde FUNCTION_NAME es el nombre de tu función (en este ejemplo, el nombre de la función es function):

      gcloud functions logs read FUNCTION_NAME

      Deberías ver un registro que incluya el nuevo mensaje "Friend".

    Limpieza

    Una vez que hayas completado el tutorial, puedes eliminar todo lo que hayas creado para no incurrir en más costes.

    Terraform te permite eliminar todos los recursos definidos en el archivo de configuración ejecutando el comando terraform destroy:

    terraform destroy
    

    Escribe yes para permitir que Terraform elimine tus recursos.