Estado de un flujo de trabajo de tarea
Administración del estado y transformación de los datos
Obtenga información sobre la Transmisión de datos entre estados con variables y la Transformación de datos con JSONata.
Un estado Task ("Type": "Task") representa una única unidad de trabajo realizada por una máquina de estado. Una tarea realiza el trabajo mediante el uso de una actividad o una función AWS Lambda, mediante la integración con otros Servicios de AWS compatibles o mediante la invocación de una API de HTTPS, como Stripe.
Amazon States Language 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.
Invocación de una función con argumentos de JSONata
La siguiente definición de estado de tarea (JSONata) invoca una función de Lambda denominada .priceWatcher
Tenga en cuenta el uso de expresiones de JSONata para consultar los datos de entrada para usarlos en argumentos 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 %}"
}
}Invocación de una función con parámetros de 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
Step Functions es compatible con los siguientes tipos de tareas, que se pueden especificar en una definición de estado de tarea:
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 Llamada a API de HTTPS en flujos de trabajo de Step Functions.
En la definición de estado de tarea, sustituya el texto en cursiva con la siguiente sintaxis por la información específica del recurso AWS.
arn:partition:service:region:account:task_type:name
En la lista siguiente, se explican los componentes individuales de esta sintaxis:
-
partitiones la partición de AWS Step Functions que se utiliza, normalmenteaws. -
serviceindica el valor que Servicio de AWS utilizó para ejecutar la tarea y puede tener uno de los siguientes valores:-
statespara una actividad. -
lambdapara una función de Lambda. Si se integra con otros Servicios de AWS, por ejemplo, Amazon SNS o Amazon DynamoDB, utilicesnsodynamodb.
-
-
regiones el código de región de AWS en la que se ha creado el tipo de máquina de estado o la actividad de Step Functions, la función de Lambda o cualquier otro recurso de AWS que se haya creado. -
accountes el ID de Cuenta de AWS en el que ha definido el recurso. -
task_typees el tipo de tarea que se va a ejecutar. Puede ser uno de los siguientes valores:-
activity: una actividad. -
function: una función de Lambda. -
– el nombre de un servicio conectado compatible (consulte Integración de servicios con Step Functions).servicename
-
-
namees 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 hacer referencia a los ARN 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
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.
Los ARN de Resource de actividad usan la siguiente sintaxis.
arn:partition:states:region:account:activity:name
nota
Debe crear las actividades con Step Functions (mediante una acción de la API CreateActivity o la consola de Step Functions
Para obtener más información sobre la creación de una actividad y la implementación de procesos de trabajo, consulte Actividades.
Funciones de Lambda
Las tareas de 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 en función del tipo de integración.
Para una integración estándar de AWS SDK con una función de Lambda, el campo Resource contendrá el siguiente valor:
"arn:aws:states:::aws-sdk:lambda:invoke"
Recomendamos utilizar 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 del estado Task muestra un ejemplo de una integración optimizada con la función de Lambda denominada mediante JSONata.HelloWorld
"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 Servicio de AWS compatible
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 ARN de Resource de los servicios conectados usan la siguiente sintaxis.
arn:partition:states:region:account-id:servicename:APIname
nota
Para crear una conexión síncrona a un recurso conectado, añada .sync a la entrada APIname en el ARN. Para obtener más información, consulte Integración de los servicios de .
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
Además de los campos de estado comunes, 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, solo JSONata)-
Se utiliza para pasar información a las acciones de la API de los recursos conectados. Los valores pueden incluir expresiones de JSONata. Para obtener más información, consulte Transformación de datos con JSONata en Step Functions.
Output(Opcional, solo JSONata)-
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 estén dentro de objetos o matrices, se evaluará como JSONata si está rodeado por caracteres {% %}.
La salida también acepta directamente una expresión de JSONata, por ejemplo: “Output”: “{% jsonata expression%}”
Para obtener más información, consulte Procesamiento de entrada y salida.
Parameters(Opcional, solo JSONPath)-
Se utiliza para pasar información a las acciones de la API de los recursos conectados. Los parámetros pueden utilizar una combinación de JsonPath
y JSON estático. Para obtener más información, consulte Cómo pasar parámetros a una API de servicio en Step Functions. 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
Resourceespecificado. Como alternativa, también puede especificar un valor de JSONPath o una función intrínseca 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 valor de JSONPath, debe anteponerle la notación$..Para ver ejemplos del uso de este campo en el estado
Task, consulte Ejemplos del campo Credentials de estado de tarea. 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 recursos entre cuentas de AWS en Step Functions.nota
Este campo es compatible con los Tipos de tareas que utilizan funciones de Lambda y un servicio AWS compatible.
-
ResultPath(Opcional, solo JSONPath) -
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 campoOutputPath(si existe) antes de utilizarla como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida. -
ResultSelector(Opcional, solo JSONPath) -
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.
-
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.
-
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.
-
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. 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
TaskStartedActivityStartedoLambdaFunctionStarteden el historial de eventos de ejecución. En las actividades, el tiempo empieza a contar cuandoGetActivityTaskrecibe un token y se registraActivityStarteden 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
TimeoutSecondsespecificado. 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.nota
El tiempo de espera de una tarea HTTP es de un máximo de 60 segundos, incluso si
TimeoutSecondssupera ese límite. Consulte Cuotas relacionadas con la tarea HTTP -
TimeoutSecondsPath(Opcional, solo JSONPath) -
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.nota
Un estado
Taskno puede incluir tantoTimeoutSecondscomoTimeoutSecondsPath. El tiempo de espera de la tarea HTTP es de 60 segundos como máximo, incluso si el valor deTimeoutSecondsPathsupera 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.HeartbeatSecondsdebe ser un valor entero positivo, distinto de cero, inferior al valor del campoTimeoutSeconds. El valor predeterminado es99999999. 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.En las actividades, el tiempo empieza a contar cuando
GetActivityTaskrecibe un token y se registraActivityStarteden el historial de eventos de ejecución. -
HeartbeatSecondsPath(Opcional, solo JSONPath) -
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.nota
Un estado
Taskno puede incluir tantoHeartbeatSecondscomoHeartbeatSecondsPath.
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
En los siguientes ejemplos se muestra cómo puede especificar la definición de estado de tarea en función de sus necesidades.
Tiempos de espera de estado de tarea e intervalos de latido
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
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
En este ejemplo, cuando se completa el trabajo AWS Glue se ejecuta el estado siguiente.
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
Especificación del ARN del rol de IAM codificado de forma rígida
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 un ARN de rol de IAM
En el siguiente ejemplo se especifica un valor de JSONPath, que se resolverá 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
En el siguiente ejemplo, se utiliza la función intrínseca States.Format, 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)"
},
...
}
}
}