paint-brush
Función paso a paso de AWS: Adición de reintentos y notificaciones de error a una función de Lambdapor@wendiesun
17,097 lecturas
17,097 lecturas

Función paso a paso de AWS: Adición de reintentos y notificaciones de error a una función de Lambda

por Wendie Sun2021/11/27
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

AWS Step Function es una herramienta de infraestructura como código como Serverless. Le permite crear una función de paso en la consola de AWS y luego usarla para enviar un correo electrónico si falla después de todos los reintentos. La función de paso se puede utilizar para crear varios reintentadores para manejar diferentes errores. Por ejemplo, un reintentador vuelve a ejecutar la función Lambda después de que falla con un cierto error. Este reintentador se aplicará a todos los errores, y todos los errores pueden activar el receptor.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Función paso a paso de AWS: Adición de reintentos y notificaciones de error a una función de Lambda
Wendie Sun HackerNoon profile picture

Mi equipo tiene una función lambda que está programada para ejecutarse cada hora. Tiene éxito el 90 % de las veces, pero falla el 10 % de las veces debido a un error de red.


Cuando falla, lo hace en silencio. Y tenemos que revisar regularmente sus registros y compensar manualmente lo que falta. Esto es bastante inconveniente.


Queremos una mejor manera de hacer esto. Queremos que la lambda vuelva a intentarlo automáticamente varias veces después de que falle. Y si sigue fallando después de todos los intentos, queremos recibir una notificación por correo electrónico.


Y lo logramos usando la función de pasos de AWS. Nos ahorró toneladas de tiempo y nos gusta cómo simplifica la lógica y reduce la cantidad de código (y errores) que de otro modo tendríamos que escribir.


Esta publicación le mostrará cómo hacerlo.


Primero veremos cómo crear una función de paso en la consola de AWS y luego cómo hacerlo a través de una herramienta de infraestructura como código como Serverless.



Crear una función de paso en la consola de AWS

1. Agregue la lambda

Vaya a la consola de AWS > Funciones de pasos > haga clic en Crear máquina de estado .


Seleccione Diseñe su flujo de trabajo visualmente , elija el Tipo estándar y presione Siguiente .


En Workflow Studio, arrastre un bloque Lambda: Invoke al primer estado.


En Configuración > Parámetros de API > Nombre de la función , elija la lambda de destino en el menú desplegable.


En Configuración > Configuración adicional > Estado siguiente , elija Ir al final .

Configuración de invocación de Lambda


2. Agregar un recuperador

Un reintentador define un conjunto de reglas de reintento, como el máximo de reintentos y el intervalo de reintento. Un reintentador vuelve a ejecutar la lambda después de que falla con cierto error.


Step Function le permite agregar varios reintentadores para manejar diferentes errores. Para mantenerlo simple, agregaremos un reintentador que se ejecuta en todos los errores.


En Manejo de errores > Reintentar en caso de errores , haga clic en Agregar nuevo reintentador .


En Recuperador n.° 1 > Errores , seleccione Estados.TODOS . Esto significa que este reintentador se aplicará a todos los errores.


Establezca el intervalo en 5 segundos, Max intenta en 2 y la tasa de retroceso en 1.


Los intentos de intervalo y máximo son fáciles de entender, la tasa de retroceso determina cómo aumenta el intervalo de reintento. Por ejemplo, si el intervalo es de 5 segundos y la tasa de retroceso es de 2, la lambda esperará 5 segundos antes de volver a intentarlo después del primer error, 10 segundos después del segundo error, 20 segundos después del tercero, y así sucesivamente.


Lambda Invoke > Manejo de errores > Reintentar en errores


3. Agrega un receptor

Un receptor define un conjunto de reglas de manejo de errores si la lambda falla después de todos los reintentos.


Quiero enviar un correo electrónico con AWS Simple Notification Service si todos los reintentos fallaron.


En Manejo de errores > Capturar errores , haga clic en Agregar un nuevo receptor .


En Catcher #1 > Errors , seleccione States.ALL . Esto significa que el receptor puede activarse por todos los errores.


En Catcher #1 > Estado alternativo , haga clic en Agregar nuevo estado . Esto creará una nueva rama de manejo de errores en el flujo de trabajo.


Busque SNS en la barra de búsqueda de la izquierda y arrastre un bloque de publicación de Amazon SNS al estado alternativo.


Lambda Invoke > Manejo de errores > Capturar errores A continuación, haga clic en el bloque SNS: Publicar para editarlo.


En Configuración > Parámetros de API > Tema , seleccione un tema. Por ejemplo, el tema HelloFuncFailed aquí me enviará un correo electrónico. Consulte esta documentación sobre cómo configurar SNS para enviar correos electrónicos.


Publicación en redes sociales

Ahora que agregamos Lambda, definimos las reglas de reintento y captura en la función de paso, puede hacer clic en Siguiente para revisar la definición y luego crear la máquina de estado.



Implementar la función de pasos con Serverless

Para que sea más fácil compartir y mantener la configuración de la función de paso, también puede implementar la misma función de paso con una herramienta de infraestructura como código. A continuación se muestra la definición sin servidor para la función de paso que creamos anteriormente.


 # serverless.yml service: myService provider: name: aws runtime: nodejs12.x functions: hello: handler: hello.handler # required, handler set in AWS Lambda name: hello-function stepFunctions: stateMachines: helloStepFunc: name: helloStepFunc definition: StartAt: HelloLambda States: HelloLambda: Type: Task Resource: Fn::GetAtt: [hello, Arn] End: true Retry: - ErrorEquals: - States.ALL IntervalSeconds: 5 # 5 seconds MaxAttempts: 3 BackoffRate: 1 Catch: - ErrorEquals: - States.ALL Next: SNSNotifcation SNSNotifcation: Type: Task Resource: arn:aws:states:::sns:publish Parameters: Subject: Hello Lambda failed after retries Message.$: $ TopicArn: xxx:HelloFuncFailed # your topic arn here End: true plugins: - serverless-step-functions # need to run $npm install --save-dev serverless-step-functions


La plantilla anterior asume que el código lambda está definido en un archivo hello.js en el mismo directorio. También puede hacer referencia a un Lambda existente por su nombre de recurso de Amazon (Arn). Consulte la documentación sin servidor para obtener más detalles.



Conclusión

Así es como se usa AWS Step Function para agregar reintentos de errores y lógicas de notificación a una función lambda. Puede crear una función de paso a través de una consola de AWS o crear una mediante una herramienta de infraestructura como código, como Serverless.


Step Function le ha ahorrado mucho tiempo a mi equipo. Simplifica nuestra lógica de manejo de errores y nos permite implementar un conjunto de reglas bastante complejas con unas pocas líneas de código.


Con suerte, hay algo que puede llevar y aplicar a su proyecto. Y por favor, hágamelo saber si tiene alguna pregunta. 🙂