Sitemap

AWS, CloudFormation & Serverless Framework. ¿Qué son?

5 min readDec 27, 2020
Press enter or click to view image in full size

Ya se ha hablado de las ventajas de usar AWS para desplegar nuestras funciones y servicios, son escalables, listas para usar y pagas por lo que usas.

Hay muchas formas de crear los servicios, usando la Consola de AWS, el CLI o el SDK mediante programación. Lo anterior te sirve para desplegar unos cuantos servicios manualmente, pero… y si necesitas desplegar DB, Lambdas y EC2 todo en un solo comando?

A medida que crece tu aplicación basada en estos microservicios (lambdas, SQS, DynamoDB y más) necesitamos herramientas para crear un entorno adecuado para desarrollar, probar, desplegar y escalar el código.

✨Cloud Formation

Amazon Web Services desarrolló una forma de crear la infraestructura y servicios de toda tu aplicación, basada en código y con todo lo que el código tiene de ventaja.

Así podrás desplegar tus funciones en distintas cuentas sin crear todo desde cero y manualmente. Además, puedes aprovechar el versionamiento de código (git), para tener el histórico de los cambios de tu infraestructura.

Todos los servicios que despliegues usando código, estarán identificados internamente en un mismo Stack, una vez creados, podrás actualizarlos o eliminarlos a tu preferencia.

Acá te muestro un ejemplo de como luciría crear una función lambda usando solo Cloud Formation:

Puedes crear tantos recursos como quieras. Este archivo YAML (o JSON) se despliega usando la Consola de AWS o el CLI de Amazon. Cada servicio, tiene que ir acompañado de sus Políticas de acceso y Roles. Así, AWS sabrá como comunicar los recursos.

https://cdn-images-1.medium.com/max/800/1*NtT3V65S8v0cP_S-B4OLhQ.png
Overview de una aplicación en producción usando Cloud Formation

Como podrás imaginar, a medida que tu aplicación se llena de microservicios, agregar más código a la plantilla de Cloud Formation puede que se vuelva inmanejable.

Para eso, llegaron los Frameworks. Aplicaciones que transforman la plantilla de Cloud Formation en algo completamente escalable, simple y legible para todos los desarrolladores, compatibles con muchos servicios y lenguajes.

Alguno de los actuales jugadores para Frameworks de Servicios Cloud son: AWS SAM, Terraform, Serverless Framework & Lono.

Serverless Framework

Serverless es una gran alternativa para crear Infraestructura usando código, podemos crear plantillas con una sintaxis sencilla, además es compatible con todos los servicios de AWS.

Tan solo imagina, que con un solo comando podrás desplegar tus instancias EC2, Redes, VPCs y su escalabilidad, crear queues, lambdas, bases de datos y todos los recursos necesarios para levantar en cualquier región y cuenta toda la lógica, red de tu aplicación.

Podemos iniciar con Serverless usando las plantillas pre definidas que posee, una vez tengamos instalado el framework, podemos iniciar y desplegar en segundos.

Para usar Serverless necesitamos tener instalado la Comand Line Interface de AWS, porque se usan las credenciales previamente configuradas.

Las credenciales de tu CLI están localizadas generalmente en: ./your-user/.aws/credentials

Puedes crear una plantilla de Infraestructura y Código para una función Lambda con el comando:

$ severless create --template nodejs-aws --path myService

Alguno de los lenguajes soportados son: Python, Ruby, Scala, Go y más. (Serverless laguajes supported).

Serverless genera un archivo javascript handler.js con el código de un hello world para una función lambda, también serverless.yaml donde estará ubicado la información de tu arquitectura, en ese archivo podrás crear todos los recursos que necesites.

Integración de servicios

Usando serverless framework podemos omitir algunos recursos en comparación al archivo de Cloud formation, los permisos y políticas se crearán internamente. Con esto, el archivo se vuelve más legible.

Una de las ventajas de usar la Serverless como framework es que integra diferentes servicios para iniciar las funciones lambda. Con pocas líneas, podrás crear fácilmente endpoints de API Gateways, CloudWatch events y otros desencadenadores.

https://cdn-images-1.medium.com/max/800/1*tuRc9uF22o_CxWVst8j5iQ.png
Ejemplo de creación de API Gateway

Una función lambda puedes invocarla manualmente, usando un Evento de CloudWatch, por medio de API Gateway, o algunos otros servicios. Serverless evita que crees esos recursos directamente, e internamente los creará si lo asignamos como un evento de una función Lambda.

https://cdn-images-1.medium.com/max/800/1*1GhCBfqtqaq-oTK1xc6IZQ.png
HelloFunction invocada cada 20 minutos.

Con la línea 5 y 6 del código que ves arriba, Serverless:

  1. Creará un evento de CloudWatch.
  2. Creará políticas de acceso para invocar la función.
  3. Agregará este evento como desencadenador de la función lambda.

Transaccionalidad

Cuando estamos desplegando nuestras funciones y servicios puede ocurrir alguna falla por conflictos entre los recursos o problemas de sintaxis de la plantilla.

Si esto ocurre, Serverless es capaz de automáticamente descartar todos los servicios creados o actualizados en el despliegue.

Serverless después de subir tus cambios y haber creado el stack, no termina su proceso de actualización o creación. Antes de terminar hace un Check completo de todos los recursos que debieron crearse o actualizarse, junto a las políticas de acceso y roles.

De esta manera, te aseguras de no afectar a tus usuarios finales en medio de una liberación de una nueva versión. Si algo falla, ese despliegue se descarta y continúa la versión que ya estaba funcionando.

Ambiente de desarrollo

Como lo mencioné al inicio, a medida que nuestra aplicación escala, crece y se hace de mas recursos. también crece la necesidad de tener un buen ambiente de desarrollo y despliegue.

Por esto, serverless se conecta facilmente con plugins de desarrollo local como local-stack o serverless-offline, estos funcionan con muchos de los recursos de amazon y pueden estar corriendo directamente en tu PC.

Por ejemplo, no necesitas desplegar una función lambda junto con toda una infraestructura de Api Gateway HTTP sino, probarlas localmente con serverless-offline, no son más que tres pasos:

  1. Instala el plugin como dependencia de desarrollo: npm i --save-dev serverless-offline
  2. Agrega al incio de tu template template el plugin offline:
https://cdn-images-1.medium.com/max/800/1*k-j61u9dh-8zRjSv5OiW8g.png

3. Ejecuta localmente con serverless offline --stage dev

Press enter or click to view image in full size
Ejecución de API Gateway & Lambdas en Local

Rápido monitoreo desde tu escritorio

Todos los recursos que despliegues desde una misma plantilla en Amazon estarán agrupados dentro de todo un Stack de Cloud Formation, por esto, podemos llamar los logs de estas funciones fácilmente directo desde tu consola:

serverless logs -f EmailChecker --stage test -t --startTime 5h
Press enter or click to view image in full size

Si conoces otra ventaja de los Frameworks Cloud o de Serverless no dudes en dejarlo en los comentarios!

Gracias por leer este post, hasta la próxima 👋🏼

@FlavioAandres

--

--

Flavio AAndres
Flavio AAndres

Written by Flavio AAndres

I like to experiment with all. Backend developer at @condorlabs.io. NodeJS/AWS/Serverless/+

No responses yet