Poner en cola las ejecuciones de flujos de trabajo con Cloud Tasks

Puedes usar Cloud Tasks para poner en cola un flujo de trabajo y ejecutarlo de forma asíncrona.

Cloud Tasks ofrece los siguientes controles:

  • Programar horas de entrega específicas
  • Gestionar porcentajes de entrega
  • Configurar el comportamiento de reintento
  • Acceder a tareas concretas de una cola y gestionarlas
  • Habilitar la anulación de tareas duplicadas

Estos controles pueden ser útiles, por ejemplo, para gestionar solicitudes que activan un flujo de trabajo y que podrían superar los límites de Workflows de forma inesperada. Si configuras una cola de Cloud Tasks con límites de frecuencia y reintentos, puedes asegurarte de que todas las solicitudes de este tipo se traduzcan en ejecuciones de flujo de trabajo.

Para obtener más información, consulta el artículo Información sobre Cloud Tasks.

Ten en cuenta lo siguiente:

  • Debes basar el límite de frecuencia en el límite de Workflows para las solicitudes de escritura a la API de ejecución. Si es necesario, puedes solicitar un ajuste de la mayoría de las cuotas en la Google Cloud consola. Más información sobre los ajustes de cuota

  • Cloud Tasks se ha diseñado para ofrecer una entrega "al menos una vez", pero Workflows no garantiza el procesamiento de las solicitudes duplicadas de Cloud Tasks exactamente una vez.

  • Puedes eliminar los retrasos en la ejecución y maximizar el rendimiento habilitando el registro de ejecuciones pendientes en Workflows. Las ejecuciones pendientes se realizan automáticamente en cuanto se dispone de la cuota de simultaneidad de ejecución. Para obtener más información, consulta Gestionar el retraso de las ejecuciones.

Antes de empezar

  1. Si aún no tienes un flujo de trabajo que quieras poner en cola, crea uno.
  2. Enable the Cloud Tasks API.

    Enable the API

Poner en cola una tarea para ejecutar un flujo de trabajo

  1. Crea una cuenta de servicio para que Cloud Tasks pueda enviar solicitudes a la API Workflows:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Sustituye SERVICE_ACCOUNT_NAME por un nombre que tenga entre 6 y 30 caracteres. Puede contener caracteres alfanuméricos en minúscula y guiones. Una vez que hayas creado una cuenta de servicio, no podrás cambiar su nombre.

  2. Para permitir que el principal que ejecutará tus comandos de Cloud Tasks actúe como una cuenta de servicio de Gestión de Identidades y Accesos (IAM), asigna un rol que permita al principal suplantar la cuenta de servicio.

  3. Asigna el rol workflows.invoker a la nueva cuenta de servicio para que tenga permiso para activar tu flujo de trabajo:

    gcloud projects add-iam-policy-binding PROJECT_NAME \
        --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
        --role roles/workflows.invoker

    Haz los cambios siguientes:

    • PROJECT_NAME: el nombre de tu proyecto Google Cloud .
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que has creado anteriormente.
  4. Si aún no tienes una cola de Cloud Tasks, créala.

  5. Crea una tarea que tenga como destino el endpoint HTTP de tu flujo de trabajo. Para ello, usa la cuenta de servicio que has creado anteriormente para autenticarte:

    gcloud tasks create-http-task \
        --queue="QUEUE_ID" \
        --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
        --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
        --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"

    Haz los cambios siguientes:

    • QUEUE_ID: el identificador que has asignado a tu cola de Cloud Tasks. Por ejemplo, my-queue.
    • PROJECT_NAME: el nombre de tu Google Cloud proyecto.
    • REGION_NAME: la región en la que se encuentra tu flujo de trabajo, como us-central1.
    • WORKFLOW_NAME: el nombre del flujo de trabajo para el que quieres crear una tarea.
    • DOUBLE_ESCAPED_JSON_STRING: una codificación JSON de cualquier argumento que envíes. Las comillas dobles que hay dentro de la cadena entre comillas se escapan con barras inversas (\). Por ejemplo: --body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio que has creado anteriormente.

    La tarea se crea y se añade a tu cola de Cloud Tasks. La tarea permanece en la cola hasta que se inicia la ejecución del flujo de trabajo y devuelve un código de estado HTTP 2xx. En ese momento, Cloud Tasks considera que la tarea se ha completado.

Siguientes pasos