Crear un flujo de trabajo con Terraform

En esta guía de inicio rápido se muestra cómo crear, desplegar 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 tu infraestructura de nube de forma predecible mediante código. Consulta cómo usar Terraform para 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, a continuación, devuelve la respuesta de la API.

Deberás hacer lo siguiente:

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

Antes de empezar

Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los siguientes pasos. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .

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

  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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

    gcloud init
  5. 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.

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

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

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  8. Install the Google Cloud CLI.

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

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

    gcloud init
  11. 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.

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

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

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  14. Crear un archivo de configuración de Terraform

    Crea un archivo de configuración de Terraform llamado main.tf e 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. Crear un directorio:

      mkdir terraform
    2. Ve al directorio terraform:

      cd terraform
    3. Añade un archivo nuevo, main.tf, al directorio:

      nano main.tf
    4. Añade los siguientes recursos al archivo main.tf:

      1. Asigna el ID del proyecto:

        provider "google" {
        project = "PROJECT_ID"
        }

        Sustituye PROJECT_ID por el ID de tu proyecto.

      2. Habilita la API 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 mediante 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
        
          deletion_protection = false # set to "true" in production
        
          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 del flujo de trabajo.
  • region: la ubicación de tu flujo de trabajo.
  • description: una descripción de tu flujo de trabajo.
  • service_account: la dirección de correo o el ID único de la cuenta de servicio asociada a la versión más reciente del flujo de trabajo. Esta cuenta de servicio representa la identidad del flujo de trabajo y determina los permisos que tiene. Si no especificas una cuenta de servicio durante la creación del flujo de trabajo, este usará la cuenta de servicio predeterminada de Compute Engine para su identidad. Para obtener más información, consulta Conceder permiso a un flujo de trabajo para acceder a recursos Google Cloud .
  • labels: 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 el artículo ¿Qué son las etiquetas?
  • user_env_vars: variables de entorno definidas por el usuario asociadas a esta revisión del flujo de trabajo. Para obtener más información, consulta Usar variables de entorno.
  • source_contents: el código de Workflows que se va a ejecutar. Para consultar el límite de tamaño de archivo, consulta Límites de recursos.

Otros argumentos opcionales son los siguientes:

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

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

    Para obtener más información, consulta el artículo Usar claves de cifrado gestionadas por el cliente.

  • call_log_level: el nivel de registro que se aplicará 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: el ID del proyecto al que pertenece el recurso. Si no se proporciona, se usará el proyecto del proveedor.

  • name_prefix: crea un nombre único que empieza por el prefijo especificado. Si no se especifican estos valores, se elegirá un valor aleatorio para el nombre.name

Crear y ejecutar el flujo de trabajo

Despliega tus recursos de Terraform para crear el flujo de trabajo y, a continuación, ejecútalo.

  1. Inicializa Terraform en el directorio:

    terraform init
  2. Comprueba que los cambios que propones con Terraform coinciden 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 la petición Introduce un valor, escribe yes para continuar con la creación de recursos.

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

    gcloud workflows list --location us-central1

    La salida debería ser similar a la siguiente:

    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. También puedes ejecutar el flujo de trabajo:

    gcloud workflows execute sample-workflow

Limpieza

Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.

  1. Elimina todos los recursos que hayas creado con Terraform:
    terraform destroy
  2. Elimina el flujo de trabajo que has creado:
    gcloud workflows delete sample-workflow
    Cuando se te pregunte si quieres continuar, escribe y.
  3. También puedes eliminar tu Google Cloud proyecto para evitar que se te apliquen cargos. Al eliminar tu proyecto Google Cloud , se detendrá la facturación de todos los recursos utilizados en ese proyecto.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

Siguientes pasos