Más información sobre las actividades de Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Más información sobre las actividades de Step Functions

Con las actividades de Step Functions, puede configurar una tarea en su máquina de estados en la que el trabajo real lo realice un trabajador que esté fuera de Step Functions. Por ejemplo, podría tener un programa de trabajo ejecutándose en Amazon Elastic Compute Cloud (AmazonEC2), Amazon Elastic Container Service (AmazonECS) o incluso en dispositivos móviles.

Información general

En AWS Step Functions, las actividades son una forma de asociar el código que se ejecuta en algún lugar (lo que se conoce como trabajador de actividades) con una tarea específica en una máquina de estados. Puede crear una actividad con la consola de Step Functions o llamando a CreateActivity. Esto proporciona un nombre de recurso de Amazon (ARN) para el estado de la tarea. Úselo ARN para sondear el estado de la tarea correspondiente al trabajo de su trabajador en actividad.

nota

Las actividades no tienen control de versiones y se espera que sean compatibles con versiones anteriores. Si debe realizar un cambio incompatible con versiones anteriores en una actividad, cree una nueva actividad en Step Functions utilizando un nombre único.

Un trabajador de actividades puede ser una aplicación que se ejecuta en una EC2 instancia de Amazon, un AWS Lambda función, un dispositivo móvil: cualquier aplicación que pueda establecer una HTTP conexión, alojada en cualquier lugar. Cuando Step Functions llega a un estado de tarea de actividad, el flujo de trabajo espera a que un proceso de trabajo de actividad realice un sondeo de una tarea. Un trabajador de la actividad sondea Step Functions mediante GetActivityTask el uso y el envío ARN de la actividad relacionada. GetActivityTaskdevuelve una respuesta que incluye input (una cadena de JSON entrada para la tarea) y un taskToken(un identificador único para la tarea). Después de que el proceso de trabajo de actividad completa su trabajo, puede proporcionar un informe de si la operación se ha realizado correcta o incorrectamente mediante SendTaskSuccess o SendTaskFailure. Estas dos llamadas usan el taskToken que proporciona GetActivityTask para asociar el resultado con esa tarea.

APIsRelacionado con las tareas de la actividad

Step Functions permite APIs crear y enumerar actividades, solicitar una tarea y gestionar el flujo de su máquina de estados en función de los resultados de su trabajador.

Las siguientes son las Step Functions APIs relacionadas con las actividades:

nota

El sondeo de las tareas de actividad con GetActivityTask pueden provocar latencia en algunas implementaciones. Consulte Evitar la latencia al sondear las tareas de actividad.

Espera para que finalice una tarea de actividad

Establezca TimeoutSeconds en la definición de la tarea para configurar cuánto tiempo espera un estado. Para mantener la tarea activa y en espera, envíe periódicamente un latido de su proceso de trabajo de actividad mediante SendTaskHeartbeat dentro del tiempo configurado en TimeoutSeconds. Si configura un tiempo de espera largo y envía activamente un latido, una actividad en Step Functions puede esperar hasta un año a que se complete una ejecución.

Por ejemplo, si necesita un flujo de trabajo que espere el resultado de un proceso largo, haga lo siguiente:

  1. Cree una actividad con la consola o mediante CreateActivity. Tome nota de la actividadARN.

  2. Haga referencia a eso ARN en el estado de una tarea de actividad en la definición y el conjunto de su máquina de estadosTimeoutSeconds.

  3. Implemente un trabajador de actividades que sondee en busca de trabajo utilizando esa actividad GetActivityTask ARN y haciendo referencia a ella.

  4. Utilice SendTaskHeartbeat periódicamente dentro del tiempo establecido en HeartbeatSeconds en la definición de tarea de máquina de estado para evitar que se agote el tiempo de espera de la tarea.

  5. Comience una ejecución de su máquina de estado.

  6. Comience su proceso de trabajo de actividad.

La ejecución se pone en pausa en el estado de la tarea de actividad y espera a que el proceso de trabajo de actividad realice un sondeo de una tarea. Una vez que se proporciona un taskToken a su proceso de trabajo de actividad, su flujo de trabajo esperará a que SendTaskSuccess o SendTaskFailure proporcione un estado. Si la ejecución no recibe ninguno de ellos ni una llamada a SendTaskHeartbeat antes del tiempo configurado en TimeoutSeconds, se producirá un error en la ejecución y el historial de ejecución contendrá un evento ExecutionTimedOut.

Ejemplo: Activity Worker en Ruby

En el siguiente ejemplo, el código de Activity Worker implementa un patrón consumidor-productor con un número configurable de subprocesos para los encuestadores y los trabajadores activos. Los hilos de sondeo sondean constantemente durante mucho tiempo la tarea de actividad en Step Functions. Cuando se recupera una tarea de actividad, pasa a través de una cola de bloqueo limitada para que la retome el hilo de actividad.

El siguiente código es el punto de entrada principal para este ejemplo de Ruby activity Worker.

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # Start method block contains your custom implementation to process the input activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

Debe especificar su actividad ARN y región. El código incluye valores predeterminados que puede configurar, como el número de subprocesos y el retraso del latido.

Elemento Descripción

require_relative

Ruta relativa al siguiente código de proceso de trabajo de actividad de ejemplo.

region

AWS Región de tu actividad.

workers_count

Número de subprocesos del proceso de trabajo de actividad. Para la mayoría de las implementaciones, deberían ser suficientes entre 10 y 20 subprocesos. Cuanto más tiempo tarde la actividad en procesarse, más subprocesos podría necesitar. Para realizar una estimación, multiplique el número de actividades de proceso por segundo por la latencia de procesamiento de actividades del percentil 99th, en segundos.

pollers_count

Número de subprocesos de los sondeadores. Deberían ser suficientes entre 10 y 20 subprocesos para la mayoría de las implementaciones.

heartbeat_delay

Retraso entre latidos, en segundos.

input Lógica de implementación de la actividad.

Siguientes pasos

Para obtener información más detallada sobre la creación de máquinas de estado que utilizan trabajadores de una actividad, consulte: