¿Por qué Serverless?
Serverless es la siguiente evolución de Computación en la nube ☁️💻☁️ (Cloud Computing).
IaaS - Infraestructura como Servicio
Anteriormente la mejor alternativa que teníamos en AWS era EC2 (Elastic Cloud Computing). EC2 es IaaS o infraestructura como servicio. Es decir se puede renter un servidor de amazon con ciertas prestaciones y sobre este instalar todo lo que necesitamos para ejecutar nuestras aplicaciones. Con todas las ventajas de escalamiento bajo demanda.
La ventaja de utilizar EC2 es que podemos pagar solamente por los recursos que necesitamos y no debemos preocuparnos por el mantenimiento de hardware.
FaaS - Funciones c omo Servicio
FaaS toma esta idea aún más allá. Ahora no solamente no debemos preocuparnos por el hardware en el que se ejecutan nuestras aplicaciones, si no ahora no nos preocupamos ni el sistema operativo o runtime que necesita para ejecutarse. Con una PaaS solamente nos preocupamos en nuestra aplicación.
Otra de las enormes ventajas de funciones Lambda o serverless es que solamente pagamos por lo que consumimos. Es decir solamente nos generá un gasto por los recursos y el tiempo en que nuestras funciones se ejecutan. No pagamos por tiempo Idle.
Con FaaS, nosotros desplegamos código como funciones independientes y configuramos reglas para su ejecución.
AWS Lambda
Lambda es la plataforma FaaS de Amazon.
Creando nuestra priemro función Lambda
1: Ingregar a la consosola de AWS Lambda
Vamos a console.aws.amazon.com/lambda/, iniciamos sesión de ser necesario.
2: Creamos una nueva función
Dependiendo si ya hemos creado una función anteriormente nos encontramos con pantallas distintas, Pero en cualquiera damos click al botón Create function
para crear una nueva función.
3: Creamos la función:
Seleccionamos Author from scratch
, le damos un nombre a nuestra función y yo quiero escribirla en nodejs así que no cambiamos nada más. Y creamos la función dandole click en Create Function
Listo, hemos creado nuestra primero función.
El código de la función se puede observar en la sección Function Code
.
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
Lo que hace esto es simplemente responder a cualquier evento con el contenido de response
.
4: Probando nuestra función
Para probar nuestra función, podemos encontrar en la parte superior la opcion Test
. En esta configuramos el evento que es el parámetro que le podemos enviar a nuestra función.
Cambiamos el objeto json por el siguiente, y luego creamos el evento de prueba.
{
"producto": "Computador",
"categoria": "Tecnología",
"precio": 10
}
Con el evento creado lo podemos observar el evento creado se encuentra en la parte superior junto a Test
.
Al ejecutar la función nos retorna el resultado en el cuadro marcado como Salida
junto con mucha información util de la función como: el tiempo de ejecución, maxima memoria utilizada y el Log output
que nos va a ser muy util para poder debugear nuestras funciones ya que es ahí en donde se muestra el console.log()
.
Oficialmente ya creaste tu primera función Lambda. En los siguientes pasos aprenderaz a hacerla más util.
5: (Extra) Utilizando datos del evento
Para acceder a las propiedades del evento como producto
o precio
que definimos en el EventoPrueba
simplemente llamamos a sus propiedades.
event
es simplemente un objecto json
y lo podemos tranfromar como cualquier otro.
exports.handler = async (event) => {
console.log(`Producto: ${event.producto}`);
console.log(`Categoría: ${event.categoria}`);
console.log(`Precio: ${event.precio}`);
const jsonResponse = {
producto: event.producto,
precio: event.precio,
};
const response = {
statusCode: 200,
body: JSON.stringify(jsonResponse),
};
return response;
};
Guardamos los cambios y nuevamente ejecutamos la prueba.
Podemos comprobar el resultado y como en la salida de la función, tanto en los logs.
6: (Extra) Configuaciones de la función lambda
En esta ultima sección hablaremos brevemente como conectar nuestra función con otros servicios de AWS, pero esta configuración no la realizaremos en esta publicación.
Sección Designer
En esta sección podemos configurar 3 cosas:
- Triggers: Cuando se activa nuestra función. Puede conectarse con:
- LLamada aplicaciones
- Cambio en AWS S3
- Cambio en AWS DynamoDB
- Otros servcios externos
- Layers: Utilizado para importar paquetes pesados a nuestra función. Mejora el rendimiendo de las funciones.
- Destinations: Permite utilizar la salida de la función como entrada de:
- Otra función
- SNS (Simple Notification Service )
- SQS (Simple Queue Service)
Entornos de variable
La sección de Variables de Entorno se explica sólo. Aquí podemos almacenar variables que no queremos quemarlas en el código. Un excelente ejemplo de esto son las llaves de apis.
Tags -Etiquetas
Las etiquetas facilitan la administración de proyectos más grandes. Esta información no configura nada. Es unicamente para nosotros. En las etiquetas solemos encontrar datos como el entorno que esta desplegado y tal vez el proyecto al que pertenece.
Configuración básica
La siguiente configuración es una de las más importante ya que esta determina la capacidad computacional y el costo.
La capacidad computacional en las funciones Lambda esta ligado a la cantidad de RAM. Y la cantiadad de memoria va desde 128MB hasta 3GB.
El tiempo de ejecución máximo denominado como timeout tiene un límite de 15 minutos.
Si en álgun momento necesitamos ejecutar un método por más de 15 minutos debemos utilizar servicios como Step Functions
.
Monitoreo
Esta sección de monitoreo es muy util porque nos avisará como se esta comportando nuestra función. Como observamos en la siguiente imagen podemos observar el número de invocaciones, la duración de las mismas entre otros datos.
Felicidades 🙌🎉
¡Si llegaste hasta aquí estoy seguro que aprendiste bastante!
Si te gusto y te aportó valor el post me gustaría mucho que lo compartas o me comentes en Twitter cómo te parecio el post y si tienes algún tema en específico que quisieras que cubra me gustaría conocerlo.