Pon en cola 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
  • Administrar las frecuencias de envío
  • Configurar el comportamiento de reintento
  • Acceder y administrar tareas individuales en una cola
  • Habilitar la anulación de duplicación de tareas

Estos controles pueden ser útiles, por ejemplo, para administrar solicitudes que activan un flujo de trabajo y que podrían exceder inesperadamente los límites de Workflows. Si configuras una cola de Cloud Tasks con límites de frecuencia y reintentos, puedes asegurarte de que todas esas solicitudes generen ejecuciones de flujos de trabajo.

Ten en cuenta que debes basar el límite de frecuencia en el límite de Workflows para las solicitudes de escritura a la API de Execution. Si es necesario, puedes solicitar un aumento de la mayoría de las cuotas en la consola de Google Cloud. Obtén más información sobre las solicitudes de aumento de cuota.

Para obtener más información, consulta Información sobre Cloud Tasks.

Antes de comenzar

  1. Si aún no tienes un flujo de trabajo que desees poner en cola, crea uno.
  2. Habilita la API de Cloud Tasks.

    Habilita la API

Poner en cola una tarea para ejecutar un flujo de trabajo

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Reemplaza SERVICE_ACCOUNT_NAME por un nombre que tenga entre 6 y 30 caracteres. Puede contener caracteres alfanuméricos en minúscula y guiones. Después de crear una cuenta de servicio, no puedes cambiar su nombre.

  2. Para permitir que la principal que ejecutará tus comandos de Cloud Tasks pueda actuar como una cuenta de servicio de Identity and Access Management (IAM), otorga un rol que permita a la principal actuar en nombre de la cuenta de servicio.

  3. Otorga a tu cuenta de servicio nueva el función workflows.invoker a fin de que la cuenta 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

    Reemplaza lo siguiente:

    • PROJECT_NAME: El nombre de tu proyecto de Google Cloud.
    • SERVICE_ACCOUNT_NAME: Es el nombre de la cuenta de servicio que creaste antes.
  4. Si aún no tienes una cola de Cloud Tasks, crea una.

  5. Crea una tarea que se oriente al extremo HTTP de tu flujo de trabajo mediante la cuenta de servicio que creaste con anterioridad para la autenticación:

    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"

    Reemplaza lo siguiente:

    • QUEUE_ID: Es el identificador que asignaste a tu cola de Cloud Tasks. Por ejemplo, my-queue.
    • PROJECT_NAME: Es el nombre del proyecto de Google Cloud.
    • REGION_NAME: Es la región en la que se encuentra tu flujo de trabajo, como us-central1.
    • WORKFLOW_NAME: Es el nombre del flujo de trabajo para el que deseas crear una tarea.
    • DOUBLE_ESCAPED_JSON_STRING: Es una codificación JSON de cualquier argumento que pases. Las comillas dobles dentro de la string entrecomillada se escapan mediante barras inversas (\). Por ejemplo: --body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • SERVICE_ACCOUNT_NAME: Es el nombre de la cuenta de servicio que creaste antes.

    Se creó la tarea y se agregará a la cola de Cloud Tasks. La tarea persiste en la cola hasta que se inicia la ejecución del flujo de trabajo y se muestra un código de estado HTTP 2xx. En ese momento, Cloud Tasks considera la tarea como completada.

¿Qué sigue?