

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
<a name="concepts-activities"></a>

Con las actividades de Step Functions, puede configurar una tarea en su máquina de estado 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 (Amazon EC2), Amazon Elastic Container Service (Amazon ECS) o incluso en dispositivos móviles.

## Descripción general de
<a name="activities-overview"></a>

EnAWS 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Proporciona un Nombre de recurso de Amazon (ARN) para su estado de tarea. Utilice este ARN para sondear el estado de la tarea correspondiente al trabajo en su proceso de trabajo de 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, una AWS Lambda función o un dispositivo móvil: cualquier aplicación que pueda establecer una conexión HTTP, 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 proceso de trabajo de actividad sondea Step Functions mediante `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)` y envía el ARN de la actividad relacionada. `GetActivityTask` devuelve una respuesta que incluye `input` (una cadena de entrada JSON de la tarea) y un [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken) (un identificador único de 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` o `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`. Estas dos llamadas usan el `taskToken` que proporciona `GetActivityTask` para asociar el resultado con esa tarea.

### APIs Relacionado con las tareas de actividad
<a name="activities-api"></a>

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: 
+ `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`
+ `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`
+ `[ListActivities](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListActivities.html)`
+ `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`
+ `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`
+ `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)`

**nota**  
El sondeo de las tareas de actividad con `GetActivityTask` pueden provocar latencia en algunas implementaciones. Consulte [Evitar la latencia al sondear tareas de actividad](sfn-best-practices.md#bp-activity-pollers).

## Espera para que finalice una tarea de actividad
<a name="activities-wait"></a>

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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Tome nota del ARN de actividad.

1. Haga referencia a ese ARN en un estado de tarea de actividad en el definición de la máquina de estado y establezca `TimeoutSeconds`.

1. Implemente un proceso de trabajo de actividad que sondee el trabajo mediante `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`, haciendo referencia a ese ARN de actividad. 

1. Utilice `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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.

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

1. 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](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` o `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)` proporcione un estado. Si la ejecución no recibe ninguno de ellos ni una llamada a `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` 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 de proceso de trabajo de actividad en Ruby
<a name="example-ruby-activity-worker"></a>

El siguiente ejemplo de código de proceso de trabajo de actividad implementa un patrón consumidor-productor con un número configurable de subprocesos para sondeadores y procesos de trabajo de actividad. Los subprocesos de sondeador están realizando constantemente un sondeo largo de la tarea de actividad en Step Functions. Cuando se recupera una tarea de actividad, se pasa a través de una cola de bloqueo limitada para que el subproceso de actividad la recoja.
+ Para obtener más información, consulte la [Referencia de la API de AWS SDK para Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/).
+ Para descargar este código y los recursos relacionados, consulte el repositorio [step-functions-ruby-activity-worker](https://github.com/aws-samples/step-functions-ruby-activity-worker) en GitHub.

El siguiente código es el principal punto de entrada de este ejemplo de proceso de trabajo de actividad de Ruby.

```
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 el ARN y la región de su actividad. El código incluye valores predeterminados que puede configurar, como el número de subprocesos y el retraso de latido.


| Elemento | Description (Descripción) | 
| --- | --- | 
|  `require_relative`  |  Ruta relativa al siguiente código de proceso de trabajo de actividad de ejemplo.  | 
|  `region`  |  AWSRegió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
<a name="activities-nextsteps"></a>

Para obtener información más detallada sobre la creación de máquinas de estado que utilizan trabajadores de una actividad, consulte:
+ [Crear una máquina de estado de actividad con Step Functions](tutorial-creating-activity-state-machine.md)