Crea un flujo de trabajo con Terraform

En esta guía de inicio rápido, se muestra cómo crear, implementar y ejecutar tu primer flujo de trabajo con Terraform. Terraform es una herramienta de infraestructura como código que te permite crear, cambiar y mejorar de forma predecible tu infraestructura de nube mediante código. Obtén información para usar Terraform y aprovisionar infraestructura en Google Cloud.

En esta guía de inicio rápido, el flujo de trabajo de ejemplo envía una solicitud a una API pública y, luego, muestra la respuesta de la API.

Completarás lo siguiente:

  1. Habilita la API de Workflows con Terraform.
  2. Crea una cuenta de servicio para el flujo de trabajo con Terraform.
  3. Definir e implementar un flujo de trabajo con Terraform
  4. Ejecuta el flujo de trabajo con Google Cloud CLI.

Antes de comenzar

Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno de Google Cloud restringido.

Ten en cuenta que Cloud Shell ya tiene integrado Terraform. Si necesitas instalar Terraform, consulta la documentación de Terraform de HashiCorp.

  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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com

Crea un archivo de configuración de Terraform

Crea un archivo de configuración de Terraform llamado main.tf y, luego, incluye los recursos del Proveedor de Google para Terraform que se usan en esta guía de inicio rápido.

Ten en cuenta que puedes usar la interpolación para sustituciones como variables de referencia, atributos de recursos y funciones de llamada.

  1. Crea un directorio:

    mkdir terraform
  2. Ve al directorio terraform:

    cd terraform
  3. Agrega un archivo nuevo, main.tf, al directorio:

    nano main.tf
  4. Agrega los siguientes recursos al archivo main.tf:

    1. Asigna el ID del proyecto:

      provider "google" {
      project = "PROJECT_ID"
      }

      Reemplaza PROJECT_ID por el ID del proyecto.

    2. Habilita la API de Workflows:

      # Enable Workflows API
      resource "google_project_service" "default" {
        service            = "workflows.googleapis.com"
        disable_on_destroy = false
      }

    3. Crea una cuenta de servicio para el flujo de trabajo:

      # Create a dedicated service account
      resource "google_service_account" "default" {
        account_id   = "sample-workflows-sa"
        display_name = "Sample Workflows Service Account"
      }

    4. Define el flujo de trabajo con el recurso google_workflows_workflow:

      # Create a workflow
      resource "google_workflows_workflow" "default" {
        name            = "sample-workflow"
        region          = "us-central1"
        description     = "A sample workflow"
        service_account = google_service_account.default.id
        labels = {
          env = "test"
        }
        user_env_vars = {
          url = "https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam"
        }
        source_contents = <<-EOF
        # This is a sample workflow that you can replace with your source code
        #
        # The workflow does the following:
        # - Retrieves the current date from a public API and stores the
        #   response in `currentDate`
        # - Retrieves a list of Wikipedia articles from a public API related
        #   to the day of the week stored in `currentDate`
        # - Returns the list of articles in the workflow output
        #
        # Note that when you define workflows in Terraform, variables must be
        # escaped with two dollar signs ($$) and not a single sign ($)
      
        - getCurrentDate:
            call: http.get
            args:
                url: $${sys.get_env("url")}
            result: currentDate
        - readWikipedia:
            call: http.get
            args:
                url: https://en.wikipedia.org/w/api.php
                query:
                    action: opensearch
                    search: $${currentDate.body.dayOfWeek}
            result: wikiResult
        - returnOutput:
            return: $${wikiResult.body[1]}
      EOF
      
        depends_on = [google_project_service.default]
      }
      
      

En el flujo de trabajo de ejemplo, se usan los siguientes argumentos:

  • name: El nombre de tu flujo de trabajo.
  • region: La ubicación de tu flujo de trabajo.
  • description: Es una descripción de tu flujo de trabajo.
  • service_account: Es la dirección de correo electrónico o el ID único de la cuenta de servicio asociada con la versión más reciente del flujo de trabajo. Esta cuenta de servicio representa la identidad del flujo de trabajo y determina qué permisos tiene. Si no especificas una cuenta de servicio durante la creación del flujo de trabajo, este usa la cuenta de servicio predeterminada de Compute Engine para su identidad. Para obtener más información, consulta Cómo otorgar permiso a un flujo de trabajo para acceder a recursos de Google Cloud.
  • labels: Es una lista de pares de etiquetas clave-valor que se asignarán a este flujo de trabajo para ayudarte a organizar tus instancias de Google Cloud. Para obtener más información, consulta ¿Qué son las etiquetas?
  • user_env_vars: Son variables de entorno definidas por el usuario asociadas con esta revisión del flujo de trabajo. Para obtener más información, consulta Usa variables de entorno.
  • source_contents: Es el código de Workflows que se ejecutará. Para conocer el límite de tamaño de archivo, consulta Límites de recursos.

Entre otros argumentos opcionales, se incluyen los siguientes:

  • crypto_key_name: El ID de recurso de una clave de Cloud Key Management Service en el siguiente formato:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

    Para obtener más información, consulta Usa claves de encriptación administradas por el cliente.

  • call_log_level: Es el nivel de registro que se aplicará a las llamadas y las respuestas de llamadas durante las ejecuciones de este flujo de trabajo. Los valores posibles son:

    • CALL_LOG_LEVEL_UNSPECIFIED
    • LOG_ALL_CALLS
    • LOG_ERRORS_ONLY
    • LOG_NONE

    Para obtener más información, consulta Registro de llamadas.

  • project: Es el ID del proyecto al que pertenece el recurso. Si no se proporciona, se usa el proyecto del proveedor.

  • name_prefix: Crea un nombre único que comienza con el prefijo especificado. Si no se especifican este valor y name, se elige un valor aleatorio para el nombre.

Crea y ejecuta el flujo de trabajo

Implementa tus recursos de Terraform para crear el flujo de trabajo y, luego, ejecútalo.

  1. Inicializa Terraform en el directorio:

    terraform init
  2. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan

    Puedes ignorar la nota sobre no usar la opción -out.

  3. Crea el flujo de trabajo:

    terraform apply
  4. En el mensaje Ingresa un valor, escribe yes para continuar con la creación de los recursos.

  5. Confirma que se haya creado un flujo de trabajo:

    gcloud workflows list --location us-central1

    El resultado debería ser similar al siguiente ejemplo:

    NAME                                                                    STATE   REVISION_ID  UPDATE_TIME
    projects/project-name/locations/us-central1/workflows/sample-workflow   ACTIVE  000001-f9a   2024-02-24T13:38:58.353765906Z
  6. De manera opcional, puedes ejecutar el flujo de trabajo:

    gcloud workflows execute sample-workflow

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

  1. Borra todos los recursos que creaste con Terraform:
    terraform destroy
  2. Borra el flujo de trabajo que creaste:
    gcloud workflows delete sample-workflow
    Cuando se te pregunte si deseas continuar, ingresa y.
  3. Como alternativa, puedes borrar el proyecto de Google Cloud para evitar que se generen cargos. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

¿Qué sigue?