Ejemplos de orquestación con Step Functions - AWS Lambda

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.

Ejemplos de orquestación con Step Functions

Todo el trabajo de la máquina de estado de Step Functions se realiza a través de Tasks. Una Task realiza el trabajo mediante una actividad, una función de Lambda o pasando parámetros a las acciones de la API de otras integraciones de servicios de AWS admitidas para Step Functions.

Configuración de una función de Lambda como una tarea

Step Functions puede invocar funciones de Lambda directamente desde un estado Task en una definición de Lenguaje de estados de Amazon.

... "MyStateName":{ "Type":"Task", "Resource":"arn:aws:lambda:us-west-2:01234567890:function:my_lambda_function", "End":true ...

Puede crear un estado Task que invoque su función de Lambda con la entrada de la máquina de estado o cualquier documento JSON.

ejemplo event.json: entrada a la función de error aleatorio
{ "max-depth": 10, "current-depth": 0, "error-rate": 0.05 }

Configuración de una máquina de estado como un origen de eventos

Puede crear una máquina de estado de Step Functions que invoque una función de Lambda. En el ejemplo siguiente se muestra un estado Task que invoca la versión 1 de una función denominada my-function con una carga de evento que tiene tres claves. Cuando la función devuelve una respuesta correcta, la máquina de estado continúa con la siguiente tarea.

ejemplo Máquina de estado de ejemplo
... "Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1", "Payload": { "max-depth": 10, "current-depth": 0, "error-rate": 0.05 } }, "Next": "NEXT_STATE", "TimeoutSeconds": 25 }
Permisos

Su máquina de estado necesita permiso para llamar a la API de Lambda para invocar una función. Para concederle permiso, añada a su función la política AWS gestionada AWSLambdaRoleo una política en línea con ámbito funcional. Para obtener más información, consulte Cómo funciona AWS Step Functions con IAM en la Guía para desarrolladores de AWS Step Functions.

Los parámetros FunctionName y Payload mapean a los parámetros de la operación de la API Invocar. Además de estos, también puede especificar los parámetros InvocationType y ClientContext. Por ejemplo, para invocar la función de forma asíncrona y continuar al siguiente estado sin esperar un resultado, puede establecer InvocationType en Event:

"InvocationType": "Event"

En lugar de codificar de forma rígida la carga del evento en la definición de máquina de estado, puede usar la entrada de la ejecución de la máquina de estado. En el ejemplo siguiente se utiliza la entrada especificada cuando ejecuta la máquina de estado como carga del evento:

"Payload.$": "$"

También puede invocar una función de forma asíncrona y esperar a que realice una devolución de llamada con el SDK de AWS. Para ello, establezca el recurso del estado en arn:aws:states:::lambda:invoke.waitForTaskToken.

Para obtener más información, consulte Invocar Lambda con Step Functions en la Guía para desarrolladores de AWS Step Functions.

Gestión de errores de función y servicio

Cuando su función o el servicio de Lambda devuelve un error, puede volver a intentar la invocación o continuar en un estado diferente en función del tipo de error.

En el ejemplo siguiente se muestra una tarea de invocación que reintenta las excepciones de la API de Lambda en la serie 5XX (ServiceException), los aceleradores (TooManyRequestsException), los errores de tiempo de ejecución (Lambda.Unknown) y un error definido por función denominado function.MaxDepthError. También captura un error llamado function.DoublesRolledError y continúa a un estado llamado CaughtException cuando se produce.

ejemplo Ejemplo de patrón de captura y reintento
... "Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Retry": [ { "ErrorEquals": [ "function.MaxDepthError", "Lambda.TooManyRequestsException", "Lambda.ServiceException", "Lambda.Unknown" ], "MaxAttempts": 5 } ], "Catch": [ { "ErrorEquals": [ "function.DoublesRolledError" ], "Next": "CaughtException" } ], "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1", ...

Para la captura o el reintento cuando se producen errores en las funciones, cree un tipo de error personalizado. El nombre del tipo de error debe coincidir con errorType de la respuesta de error con formato que Lambda devuelve cuando se genera un error.

Para obtener más información sobre el control de errores en Step Functions, consulte Control de las condiciones de error con una máquina de estado de Step Functions en la Guía para desarrolladores de AWS Step Functions.

AWS CloudFormation y AWS SAM

Puede definir máquinas de estado utilizando una plantilla de AWS CloudFormation con AWS Serverless Application Model (AWS SAM). Con AWS SAM, puede definir la máquina de estado insertándola en la plantilla o en un archivo independiente. En el ejemplo siguiente se muestra una máquina de estado que invoca una función de Lambda que controla los errores. Se refiere a un recurso de función definido en la misma plantilla (no se muestra).

ejemplo Ejemplo de patrón de ramificación en una plantilla. yml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: An AWS Lambda application that uses AWS Step Functions. Resources: statemachine: Type: AWS::Serverless::StateMachine Properties: DefinitionSubstitutions: FunctionArn: !GetAtt function.Arn Payload: | { "max-depth": 5, "current-depth": 0, "error-rate": 0.2 } Definition: StartAt: Invoke States: Invoke: Type: Task Resource: arn:aws:states:::lambda:invoke Parameters: FunctionName: "${FunctionArn}" Payload: "${Payload}" InvocationType: Event Retry: - ErrorEquals: - function.MaxDepthError - function.MaxDepthError - Lambda.TooManyRequestsException - Lambda.ServiceException - Lambda.Unknown IntervalSeconds: 1 MaxAttempts: 5 Catch: - ErrorEquals: - function.DoublesRolledError Next: CaughtException - ErrorEquals: - States.ALL Next: UncaughtException Next: Success CaughtException: Type: Pass Result: The function returned an error. End: true UncaughtException: Type: Pass Result: Invocation failed. End: true Success: Type: Pass Result: Invocation succeeded! End: true Events: scheduled: Type: Schedule Properties: Description: Run every minute Schedule: rate(1 minute) Type: STANDARD Policies: - AWSLambdaRole ...

Esto crea una máquina de estado con la siguiente estructura:


        Máquina de estado con lógica de ramificación.

Para obtener más información, consulte AWS::Serverless::StateMachine en la Guía para desarrolladores de AWS Serverless Application Model.