

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.

# Estado de un flujo de trabajo de tarea
<a name="state-task"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos con JSONata](transforming-data.md).

Un estado `Task` (`"Type": "Task"`) representa una única unidad de trabajo realizada por una máquina de estado. Una tarea realiza su trabajo mediante una actividad o AWS Lambda función, mediante la integración con otras [compatibles Servicios de AWS](supported-services-awssdk.md#supported-services-awssdk-list) o mediante la invocación de una API HTTPS, como Stripe.

[Amazon States Language](concepts-amazon-states-language.md) representa tareas estableciendo un tipo de estado en `Task` y proporcionando a la tarea el Nombre de recurso de Amazon (ARN) de la actividad, la función de Lambda o el punto de conexión de la API de HTTPS. 

**Invoca una función con argumentos JSONata **

La siguiente definición de estado de tarea (JSONata) invoca una función de Lambda denominada. `priceWatcher`

Tenga en cuenta el uso de JSONata expresiones para consultar los datos de entrada para usarlos en Arguments y el resultado de la tarea en el campo de asignación.

```
"Get Current Price": {
  "Type": "Task",
  "QueryLanguage" : "JSONata",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Next": "Check Price",
  "Arguments": {
    "Payload": {
    "product": "{% $states.context.Execution.Input.product %}"
    },
    "FunctionName": "arn:aws:lambda:<region>:account-id:function:priceWatcher:$LATEST"
  },
  "Assign": {
    "currentPrice": "{% $states.result.Payload.current_price %}"
  }
}
```

**Invoca una función con parámetros JSONPath **

La siguiente definición de estado de tarea (JSONPath) invoca una función de Lambda denominada. `HelloFunction`

```
"Lambda Invoke": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "Payload.$": "$",
    "FunctionName": "arn:aws:lambda:region:account-id:function:HelloFunction:$LATEST"
  },
  "End": true
}
```

## Tipos de tareas
<a name="task-types"></a>

Step Functions es compatible con los siguientes tipos de tareas, que se pueden especificar en una definición de estado de tarea:
+  [Actividad](#state-task-activity) 
+  [Funciones de Lambda](#state-task-lambda) 
+  [Un compatible Servicio de AWS](#state-task-connector) 
+ [Una tarea HTTP](call-https-apis.md)

Para especificar un tipo de tarea, proporcione su ARN en el campo `Resource` de una definición de estado de tarea. En el ejemplo siguiente se muestra la sintaxis del campo `Resource`. Todos los tipos de tareas, excepto el que invoca una API de HTTPS, utilizan la siguiente sintaxis. Para obtener información sobre la sintaxis de la tarea HTTP, consulte [Llama a HTTPS APIs en los flujos de trabajo de Step Functions](call-https-apis.md).

En la definición del estado de la tarea, sustituya el texto en cursiva de la siguiente sintaxis por la información específica del AWS recurso.

```
arn:partition:service:region:account:task_type:name
```

En la lista siguiente, se explican los componentes individuales de esta sintaxis:
+  `partition`es la AWS Step Functions partición que se va a utilizar, por lo general. `aws`
+  `service`indica la que Servicio de AWS se utiliza para ejecutar la tarea y puede tener uno de los siguientes valores:
  +  `states` para una [actividad](#state-task-activity).
  +  `lambda` para una [función de Lambda](#state-task-lambda). Si se integra con otros Servicios de AWS, por ejemplo, Amazon SNS o Amazon DynamoDB, utilice o. `sns` `dynamodb`
+  `region`es el [código de AWS región](https://docs.aws.amazon.com/general/latest/gr/rande.html) en el que se ha creado la actividad o el estado de Step Functions, el tipo de máquina, la función Lambda o cualquier otro AWS recurso.
+  `account`es el Cuenta de AWS ID con el que ha definido el recurso.
+  `task_type` es el tipo de tarea que se va a ejecutar. Puede ser uno de los siguientes valores:
  +  `activity`: una [actividad](#state-task-activity).
  +  `function`: una [función de Lambda](#state-task-lambda).
  +  `servicename`: el nombre de un servicio conectado compatible (consulte [Integración de servicios con Step Functions](integrate-optimized.md)).
+  `name` es el nombre del recurso registrado (el nombre de la actividad, el nombre de la función de Lambda o la acción de la API de servicio).

**nota**  
Step Functions no admite la creación de referencias ARNs entre particiones o regiones. Por ejemplo, `aws-cn` no puede invocar tareas en la partición `aws` y viceversa.

En las secciones siguientes, se proporcionan más detalles sobre cada tipo de tarea.

### Actividad
<a name="state-task-activity"></a>

Las actividades representan procesos o subprocesos de trabajo implementados y alojados por usted, que realizan una tarea específica. Solo son compatibles con los flujos de trabajo estándar, pero no con los flujos de trabajo rápidos.

La actividad `Resource` ARNs utiliza la siguiente sintaxis.

```
arn:partition:states:region:account:activity:name
```

**nota**  
Debe crear actividades con Step Functions (mediante una [CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)acción de API o la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/)) antes de utilizarlas por primera vez.

Para obtener más información sobre la creación de una actividad y la implementación de procesos de trabajo, consulte [Actividades](concepts-activities.md).

### Funciones de Lambda
<a name="state-task-lambda"></a>

Las tareas Lambda ejecutan una función mediante. AWS Lambda Para especificar una función de Lambda, utilice el ARN de la función de Lambda del campo `Resource`.

La forma del campo `Resource` de la función de Lambda varía según el tipo de integración.

Para una integración de AWS SDK estándar con una función Lambda, el `Resource` campo contendrá el siguiente valor:

```
"arn:aws:states:::aws-sdk:lambda:invoke"
```

**Recomendamos** emplear la integración optimizada para las funciones de Lambda, utilizando el siguiente valor para el campo `Resource`:

```
"arn:aws:states:::lambda:invoke"
```

La siguiente definición de `Task` estado muestra un ejemplo de una integración optimizada con una función de Lambda denominada `HelloWorld` using. JSONata

```
"Optimized call to Lambda function (JSONata)": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Output": "{% $states.result.Payload %}",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:HelloWorld:$LATEST",
        "Payload": {
          "key": "{% $states.input.myKey %}"
        }
      },
  "Next": "NextState"
}
```

### Un compatible Servicio de AWS
<a name="state-task-connector"></a>

Cuando se hace referencia a un recurso conectado, Step Functions llama directamente a las acciones de la API de un servicio compatible. Especifique el servicio y la acción en el campo `Resource`.

Los servicios conectados `Resource` ARNs utilizan la siguiente sintaxis.

```
arn:partition:states:region:account-id:servicename:APIname
```

**nota**  
Para crear una conexión sincrónica a un recurso conectado, añádala `.sync` a la *APIname* entrada del ARN. Para obtener más información, consulte [Integración de los servicios de ](integrate-services.md).

Por ejemplo:

```
{
 "StartAt": "BATCH_JOB",
 "States": {
   "BATCH_JOB": {
     "Type": "Task",
     "Resource": "arn:aws:states:::batch:submitJob.sync",
     "Parameters": {  
       "JobDefinition": "preprocessing",
       "JobName": "PreprocessingBatchJob",
       "JobQueue": "SecondaryQueue",
       "Parameters.$": "$.batchjob.parameters",
       "RetryStrategy": {
          "attempts": 5
        }
     },
     "End": true
    }
  }
}
```

## Campos de estado de tarea
<a name="task-state-fields"></a>

Además de los [campos de estado comunes](statemachine-structure.md#amazon-states-language-common-fields), los estados `Task`, disponen de los siguientes campos:

** `Resource` (Obligatorio)**  
Un URI, en concreto, un ARN que identifica de forma inequívoca la tarea específica que se va a ejecutar.

**`Arguments`(Opcional, únicamente) JSONata **  
Se utiliza para pasar información a las acciones de la API de los recursos conectados. Los valores pueden incluir JSONata expresiones. Para obtener más información, consulte [Transformación de datos con JSONata In Step Functions](transforming-data.md).

**`Output`(Opcional, JSONata únicamente)**  
Se utiliza para especificar y transformar la salida del estado. Cuando se especifica, el valor anula el valor predeterminado de salida del estado.   
El campo de salida acepta cualquier valor JSON (objeto, matriz, cadena, número, booleano, nulo). Cualquier valor de cadena, incluidos los que se encuentran dentro de objetos o matrices, se evaluará como JSONata si estuviera rodeado de \$1%%\$1 caracteres.  
 La salida también acepta una JSONata expresión directamente, por ejemplo: «Output»: «\$1% jsonata expression%\$1»   
Para obtener más información, consulte [Procesamiento de entrada y salida](concepts-input-output-filtering.md).

**`Parameters`(Opcional, únicamente JSONPath )**  
Se utiliza para pasar información a las acciones de la API de los recursos conectados. Los parámetros pueden usar una combinación de JSON estáticos y [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/). Para obtener más información, consulte [Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md).

**`Credentials` (opcional)**  
Especifica un rol de destino que debe asumir la función de ejecución de la máquina de estado antes de invocar el `Resource` especificado. Como alternativa, también puede especificar un JSONPath valor o una [función intrínseca](intrinsic-functions.md) que se resuelva en un ARN de rol de IAM en tiempo de ejecución en función de la entrada de ejecución. Si especifica un JSONPath valor, debe añadirle el prefijo de la notación. `$.`  
Para ver ejemplos del uso de este campo en el estado `Task`, consulte [Ejemplos del campo Credentials de estado de tarea](#task-state-example-credentials). Para ver un ejemplo del uso de este campo para acceder a un AWS recurso multicuenta desde su máquina de estados, consulte. [Acceso a AWS recursos multicuenta en Step Functions](tutorial-access-cross-acct-resources.md)  
Este campo es compatible con los [Tipos de tareas](#task-types) que utilizan [funciones Lambda](#state-task-lambda) y [un servicio compatible AWS](integrate-services.md).

** `ResultPath`(Opcional, JSONPath únicamente)**  
Especifica dónde se colocan (en la entrada) los resultados de la ejecución de la tarea especificada en `Resource`. La entrada se filtra según el contenido del campo `OutputPath` (si existe) antes de utilizarla como salida del estado. Para obtener más información, consulte [Procesamiento de entrada y salida](concepts-input-output-filtering.md).

** `ResultSelector`(Opcional, JSONPath únicamente)**  
Pase un conjunto de pares clave-valor, donde los valores sean estáticos o se seleccionen del resultado. Para obtener más información, consulte [ResultSelector](input-output-inputpath-params.md#input-output-resultselector).

** `Retry` (opcional)**  
Una matriz de objetos, denominados "reintentadores", que definen una política de reintentos si el estado encuentra errores en tiempo de ejecución. Para obtener más información, consulte [Ejemplos de máquina de estado que usan Retry y Catch](concepts-error-handling.md#error-handling-examples).

** `Catch` (opcional)**  
Una matriz de objetos, denominados "receptores", que definen un estado alternativo. Este estado se ejecuta si el estado encuentra errores en tiempo de ejecución y su política de reintentos está agotada o no se ha definido. Para obtener más información, consulte [Estados alternativos](concepts-error-handling.md#error-handling-fallback-states).

** `TimeoutSeconds` (opcional)**  
Especifica el tiempo máximo que puede ejecutarse una actividad o tarea antes de que se agote el tiempo de espera y se produzca un error [States.Timeout](concepts-error-handling.md#statestimeout). El valor del tiempo de inactividad debe ser un número entero positivo, distinto de cero. El valor predeterminado es `99999999`.  
El tiempo de inactividad empieza a contar cuando se ejecuta el evento de inicio, por ejemplo, cuando se registran eventos `TaskStarted`, `ActivityStarted` o `LambdaFunctionStarted` en el historial de eventos de ejecución. En las actividades, el tiempo empieza a contar cuando `GetActivityTask` recibe un token y se registra `ActivityStarted` en el historial de eventos de ejecución.  
Cuando se inicia una tarea, Step Functions espera a que el proceso de trabajo de la tarea o actividad responda correctamente o no dentro del período `TimeoutSeconds` especificado. Si el proceso de trabajo de la tarea o actividad no responde dentro de este tiempo, Step Functions marca la ejecución del flujo de trabajo como fallida.  
El tiempo de espera de una tarea HTTP es de un máximo de 60 segundos, incluso si `TimeoutSeconds` supera ese límite. Consulte [Cuotas relacionadas con la tarea HTTP](service-quotas.md#service-limits-http-task)

** `TimeoutSecondsPath`(Opcional, JSONPath únicamente)**  
 Si desea proporcionar un valor de tiempo de espera de forma dinámica a partir de la entrada de estado con una ruta de referencia, utilice `TimeoutSecondsPath`. Una vez resuelta, la ruta de referencia debe seleccionar campos cuyos valores sean enteros positivos.  
Un estado `Task` no puede incluir tanto `TimeoutSeconds` como `TimeoutSecondsPath`. El tiempo de espera de la tarea HTTP es de 60 segundos como máximo, incluso si el valor de `TimeoutSecondsPath` supera ese límite.

** `HeartbeatSeconds` (opcional)**  
Determina la frecuencia de las señales de latido que envía un proceso de trabajo de actividad durante la ejecución de una tarea. Los latidos indican que una tarea aún se está ejecutando y necesita más tiempo para completarse. Los latidos impiden que se agote el tiempo de espera de una actividad o tarea durante la duración de `TimeoutSeconds`.  
`HeartbeatSeconds` debe ser un valor entero positivo, distinto de cero, inferior al valor del campo `TimeoutSeconds`. El valor predeterminado es `99999999`. Si transcurre más tiempo que los segundos especificados entre los latidos de la tarea, el estado de la tarea produce el error [States.Timeout](concepts-error-handling.md#statestimeout).  
En las actividades, el tiempo empieza a contar cuando `GetActivityTask` recibe un token y se registra `ActivityStarted` en el historial de eventos de ejecución.

** `HeartbeatSecondsPath`(Opcional, JSONPath únicamente)**  
Si desea proporcionar un valor de latido de forma dinámica desde la entrada de estado mediante una ruta de referencia, utilice `HeartbeatSecondsPath`. Una vez resuelta, la ruta de referencia debe seleccionar campos cuyos valores sean enteros positivos.  
Un estado `Task` no puede incluir tanto `HeartbeatSeconds` como `HeartbeatSecondsPath`.

Un estado `Task` debe establecer el campo `End` en `true` si el estado finaliza su ejecución, o bien debe proporcionar un estado en el campo `Next` que se ejecuta cuando finaliza el estado `Task`.

## Ejemplos de definición de estado de tarea
<a name="task-state-example"></a>

En los siguientes ejemplos se muestra cómo puede especificar la definición de estado de tarea en función de sus necesidades.
+ [Especificar tiempos de espera de estado de tarea e intervalos de latido](#task-state-example-timeouts)
  + [Ejemplo de notificación de latido y tiempo de espera estático](#task-state-example-static)
  + [Ejemplo de notificación de latido y tiempo de espera dinámico](#task-state-example-dynamic)
+ [Uso del campo Credentials](#task-state-example-credentials)
  + [Especificación del ARN del rol de IAM codificado de forma rígida](#example-credentials-specify-role-arn)
  + [Especificar JSONPath como ARN de rol de IAM](#example-credentials-specify-dynamic-jsonpath)
  + [Especificar una función intrínseca como ARN del rol de IAM](#example-credentials-specify-dynamic-intrinsic-function)

### Tiempos de espera de estado de tarea e intervalos de latido
<a name="task-state-example-timeouts"></a>

Es aconsejable definir un valor de tiempo de espera y un intervalo de latido para actividades de ejecución prolongada. Para hacer esto se puede especificar los valores de tiempo de espera y latido o configurarlos de forma dinámica.

#### Ejemplo de notificación de latido y tiempo de espera estático
<a name="task-state-example-static"></a>

Cuando se complete `HelloWorld`, se ejecutará el siguiente estado (que aquí se llama `NextState`).

Si esta tarea no puede completarse en un plazo de 300 segundos o no envía notificaciones de latido a intervalos de 60 segundos, la tarea se marca como `failed`. 

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:region:123456789012:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "HeartbeatSeconds": 60,
  "Next": "NextState"
}
```

#### Ejemplo de notificación de latido y tiempo de espera dinámico
<a name="task-state-example-dynamic"></a>

En este ejemplo, cuando se complete el AWS Glue trabajo, se ejecutará el siguiente estado.

Si esta tarea no se completa dentro del intervalo establecido de manera dinámica por el trabajo AWS Glue , la tarea se marca como `failed`. 

```
"GlueJobTask": {
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "myGlueJob"
  },
  "TimeoutSecondsPath": "$.params.maxTime",
  "Next": "NextState"
}
```

### Ejemplos del campo Credentials de estado de tarea
<a name="task-state-example-credentials"></a>

#### Especificación del ARN del rol de IAM codificado de forma rígida
<a name="example-credentials-specify-role-arn"></a>

En el siguiente ejemplo se especifica un rol de IAM de destino que debe asumir el rol de ejecución de una máquina de estado para acceder a una función de Lambda entre cuentas denominada `Echo`. En este ejemplo, el ARN del rol de destino se especifica como un valor codificado de forma rígida.

```
{
  "StartAt": "Cross-account call",
  "States": {
    "Cross-account call": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
      },
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo"
      },
      "End": true
    }
  }
}
```

#### Especificar JSONPath como ARN de rol de IAM
<a name="example-credentials-specify-dynamic-jsonpath"></a>

El siguiente ejemplo especifica un JSONPath valor, que se convertirá en un ARN de rol de IAM en tiempo de ejecución.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "$.roleArn"
      },
      ...
    }
  }
}
```

#### Especificar una función intrínseca como ARN del rol de IAM
<a name="example-credentials-specify-dynamic-intrinsic-function"></a>

En el siguiente ejemplo, se utiliza la función intrínseca [`States.Format`](intrinsic-functions.md#asl-intrsc-func-generic), que se convierte en un ARN de rol de IAM en tiempo de ejecución.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)"
      },
      ...
    }
  }
}
```