Despliegue de Funciones Lambda en AWS: Guía Completa
Clase 35 de 38 • Curso de Infraestructura Como Código en AWS
Resumen
¿Cómo se despliega una función Lambda en AWS?
Desplegar funciones Lambda en AWS es fundamental para cualquier desarrollador que busque aprovechar las arquitecturas serverless. Este proceso no solo amplía las capacidades, sino que también simplifica la gestión de aplicaciones. A lo largo de este artículo, exploraremos las diferencias clave entre los dos métodos principales para desplegar una función Lambda, enfocándonos en su implementación con AWS CloudFormation y AWS SAM.
¿Qué es AWS Lambda?
AWS Lambda es un servicio de cómputo en la nube que permite ejecutar código en respuesta a eventos sin necesidad de administrar servidores. Dentro de AWS, la función Lambda actúa como una unidad fundamental en la arquitectura serverless.
¿Cuáles son las formas de desplegar una función Lambda?
Existen dos formas de desplegar una función Lambda en AWS:
- Serverless function (función Lambda): Utilizando AWS Lambda directamente.
- AWS SAM (Serverless Application Model): Herramienta que permite simplificar la infraestructura y gestionar aplicaciones basadas en servidor de manera eficiente.
¿Cómo desplegar utilizando AWS CloudFormation?
Cuando optamos por desplegar una función Lambda mediante CloudFormation, estamos creando un template (plantilla) que define los recursos de AWS necesarios. Dentro de esta plantilla:
- Es fundamental especificar el código almacenado en S3.
- La documentación de AWS provee ejemplos en JSON y YAML para ilustrar su uso adecuado.
- Componentes obligatorios incluyen el código de la función, el handler, y las configuraciones de memoria.
Resources:
MyLambdaFunction:
Type: 'AWS::Lambda::Function'
Properties:
Code:
S3Bucket: my-bucket
S3Key: my-function-code.zip
Handler: index.handler
Role: arn:aws:iam::123456789012:role/lambda-role
Runtime: nodejs14.x
¿Qué considerar al usar AWS SAM?
AWS SAM extiende CloudFormation, ofreciendo mayor simplicidad y eventos especializados para aplicaciones serverless. Al usar SAM, considera lo siguiente:
- Los nombres de las funciones no deben ser hard-coded (quemados explícitamente) en el código, facilitando la replicación en otras cuentas.
- Utilizar las funciones intrínsecas como
Ref
yGetAtt
puede optimizar la gestión y reutilización de las plantillas.
MyServerlessFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://my-bucket/my-function-code.zip
Handler: index.handler
Runtime: nodejs14.x
MemorySize: 128
¿Cuáles son las prácticas recomendadas para funciones Lambda?
- No quemar nombres de funciones: En aplicaciones serverless, evita codificar nombres de recursos directamente en el código.
- Entender los componentes obligatorios: Al usar CloudFormation o SAM, conoce qué campos son obligatorios. Por ejemplo, el
handler
yruntime
son siempre necesarios. - Documentación y ejemplos: La documentación oficial brinda ejemplos detallados para cada recurso, fundamental para ensamblar plantillas correctamente.
¿Cómo optimizar el uso de funciones intrínsecas?
Al trabajar con CloudFormation y SAM, el uso de funciones intrínsecas como Ref
y GetAtt
permite acceder a atributos lógicos y físicos de los recursos:
Ref
: Devuelve el nombre del recurso.GetAtt
: Obtiene un atributo específico del recurso.
Estas funciones son esenciales para establecer relaciones entre diferentes componentes del stack.
¿Qué tener en cuenta con el almacenamiento en S3?
- Al desplegar funciones Lambda, es crucial detallar correctamente el bucket en S3 donde reside el código.
- Asegúrate de especificar el bucket y el key del archivo en S3. Este archivo normalmente tiene la extensión
.zip
que contiene el código fuente.
¿Cómo mejorar la gestión al desplegar Lambda?
La gestión efectiva al desplegar Lambda se logra mediante:
- Aprovechamiento de plantillas reutilizables.
- Utilización de la infraestructura como código (IaC) para automatizar despliegues.
- Implementación de good practices como la definición de roles y políticas adecuadas con IAM.
El mundo del despliegue de funciones Lambda en AWS es vasto y dinámico, lleno de oportunidades para innovar y mejorar procesos. Con estas estrategias y conocimientos, tendrás una base sólida para no solo desplegar, sino también optimizar y escalar tus funcionalidades en la nube. ¡Sigue explorando y ampliando tus habilidades en este apasionante campo!