Entrega · Servicios sin servidor
¿Cómo gestionar múltiples versiones y despliegues de funciones Lambda?
Traducción al español del artículo original. Puedes abrir su versión en inglés desde los enlaces de esta página.
Problema por resolver
En el mundo de la computación serverless, administrar funciones Lambda de manera eficiente es fundamental. Al trabajar con múltiples versiones y despliegues, los desarrolladores emplean distintas estrategias para asegurar transiciones fluidas y reducir las interrupciones. Entre ellas están los despliegues automatizados y las funciones inmutables, pero no bastan sin un uso adecuado de la administración de versiones de Lambda.
Versiones y aliases de Lambda
Versiones de funciones y aliases
Lambda permite crear versiones de sus funciones. Cada versión representa una instantánea del código y de la configuración. Los aliases pueden apuntar a versiones específicas y permiten transiciones fluidas durante los despliegues. Por ejemplo, el alias ProdV1 podría apuntar siempre a la última versión estable, mientras que ProdRelease1 podría usarse para probar nuevas funcionalidades.
Despliegues
Despliegues Canary
Para reducir los riesgos durante las actualizaciones, puedes considerar despliegues Canary. Crea una versión nueva de la función Lambda y desplaza gradualmente el tráfico hacia ella. Supervisa el rendimiento y recopila comentarios antes de desplegar la actualización para todos los usuarios. Así, cualquier problema puede detectarse y mitigarse temprano.
La administración cuidadosa de versiones, los despliegues Canary y la automatización son fundamentales para manejar múltiples versiones y despliegues de funciones Lambda. Elige el enfoque que mejor se ajuste a los requisitos de tu aplicación y a tu flujo de desarrollo.
Probar la solución
Conjunto de herramientas
- Una plantilla SAM con una configuración sencilla de AWS Lambda.
- Una función Python “Hello World” con su Dockerfile correspondiente.
- Antes, debes crear un repositorio ECR donde se alojarán las imágenes Docker.
Un usuario de AWS con credenciales autorizadas para crear:
- Funciones Lambda.
- Roles y políticas de IAM.
- API Gateway, sus etapas y despliegues.
- Acceso completo a CloudFormation.
Solo necesitas acceso a CloudFormation si quieres desplegar las funciones usando la plantilla alojada en este repositorio.
Tipos de despliegues en AWS Lambda
En AWS Lambda puedes elegir el tipo de preferencia de despliegue: Canary o Linear. Cada uno utiliza una forma diferente de desplazar el tráfico.
- Canary: el tráfico se desplaza en dos incrementos. Estos se definen mediante el porcentaje que se enviará a la nueva versión y el intervalo, en minutos, antes de mover el tráfico restante en el segundo incremento.
- Linear: el tráfico se desplaza en incrementos iguales, con el mismo número de minutos entre cada uno.
Desplegar la primera versión de la función
Para nuestras funciones usaremos una imagen Docker construida a partir del Dockerfile de este repositorio. La versión 1 imprimirá el mensaje “This is my version number 1” y la otra “This is my version number 2”.
Esta prueba se desplegará con Linear10PercentEvery1Minute, que desplaza el tráfico en incrementos iguales cada minuto.
Si quieres desplegar la función con la plantilla SAM de este repositorio, comenta dos líneas de la configuración del primer despliegue para ver cómo funciona antes de usar la preferencia Linear o Canary. Después podrás habilitarla.
Recuerda usar el comando sam deploy --guided para ejecutar los despliegues con SAM.
En esta etapa puedes probar la función Lambda con el endpoint HTTP de API Gateway que se creó.
Desplegar la nueva versión de Lambda con un despliegue Linear
Para el segundo despliegue, debemos descomentar las dos líneas correspondientes a la preferencia de despliegue.
Recuerda también cambiar la versión de la imagen en template.yaml.
Después de completar el segundo despliegue, puedes ir al panel de Lambda, a la pestaña de aliases, y ver cómo el tráfico se desplaza hacia la nueva versión. Cada minuto se moverá una parte igual del tráfico a esta versión si no se producen errores.
Probar la aplicación
En esta parte puedes probar el endpoint HTTP. Después de varias solicitudes, quizá veas la respuesta de cada versión usando la misma ruta y el mismo API Gateway.
Probar la versión 1
Probar la versión 2
Siguientes pasos e implementaciones
- Implementa alarmas de CloudWatch para ejecutar un rollback si la nueva versión genera errores en tus métricas personalizadas o predefinidas.
- Implementa hooks en Lambda para validar que las funciones se ejecutan antes y después del desplazamiento del tráfico.
Recuerda eliminar tus recursos de la nube si ya no los necesitas para evitar costos adicionales, usando sam delete.
Código fuente
sam-automation/lambda_function en GitHub — plantillas para desplegar servicios serverless con SAM.