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 una infraestructura de nube mediante código. Aprende a usar Terraform para aprovisionar infraestructura en Google Cloud.

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

Completarás lo siguiente:

  1. Habilitar la API de Workflows con Terraform
  2. Crear una cuenta de servicio para el flujo de trabajo con Terraform
  3. Definir e implementar un flujo de trabajo con Terraform
  4. Ejecutar 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 Terraform integrado. Si necesitas instalar Terraform, consulta la documentación de Terraform en HashiCorp.

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita las APIs de Cloud Resource Manager and Identity and Access Management (IAM):

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  10. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  11. Habilita las APIs de Cloud Resource Manager and Identity and Access Management (IAM):

    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]
      }

      Los siguientes argumentos se usan en el flujo de trabajo de muestra:

      • name: El nombre de tu flujo de trabajo.
      • region: Es la ubicación del flujo de trabajo.
      • description: Es una descripción del 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, el flujo de trabajo usa la cuenta de servicio predeterminada de Compute Engine para su identidad. Si deseas obtener más información, consulta Otorga permiso a un flujo de trabajo para acceder a los recursos de Google Cloud.
      • labels: Es una lista de pares clave-valor para asignar a este flujo de trabajo que te ayuda a organizar tus instancias de Google Cloud. Para obtener más información, consulta ¿Qué son las etiquetas?
      • user_env_vars: Son las 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.

      Otros argumentos opcionales incluyen los siguientes:

      • crypto_key_name: Es 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: El nivel de registro que se aplica a las llamadas y 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 ni name, se elige un valor aleatorio para el nombre.

Crea y ejecuta el flujo de trabajo

Implementar tus recursos de Terraform para crear el flujo de trabajo y, luego, ejecutarlo

  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 recursos.

  5. Confirma que se creó 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
    

Limpia

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.

      Borra un proyecto de Google Cloud:

      gcloud projects delete PROJECT_ID

¿Qué sigue?