Libera el poder de tus aplicaciones Serverless con AWS Cloud Development Kit y SST
Tags: serverless, infrastructureascode, aws, development
Published: 2023-09-12 15:46:40


He trabajado varios años desarrollando software y una de las tareas más retadoras y recurrentes en mis proyectos es  escoger qué herramientas utilizar para mi  equipo de trabajo y cuales se adaptarán mejor dentro del flujo de desarrollo de software de mi organización. El día de hoy te contaré un poco acerca de qué factores tomar en cuenta para agregar el desarrollo de una aplicación serverless dentro del proceso de Integración Continua y Entrega Continua (CI/CD)  de mi organización utilizando AWS Cloud Development Kit (CDK) y el framework de creación de aplicaciones full stack SST.

Cuando comencé el diseño de la primera aplicación serverless de mi organización se me abrió un mundo de herramientas y procesos que podía escoger para implementarlas en mi proyecto, sin embargo para no perderme entre todas las opciones, por que sabemos pueden llegar a ser abrumadoras, así que definí el siguiente framework para la tomar la decisión final:

1. **Automatización**: Debe ser fácil de integrar a mi proceso de CI/CD, tengo muchos ambientes en donde necesito hacer despliegues y no quiero que mi equipo de trabajo tenga que hacer nada manual.
1. **Curva de aprendizaje:** Debe ser fácil de usar, ya que los tiempos de mi proyecto (como los de todos) eran limitados, así que mi equipo debía pasar más tiempo haciendo que aprendiendo a hacer. Siempre tomo en cuenta los skills de mi equipo.
1. **Pruebas locales:** Los desarrolladores deben probar  sus cambios de forma local y en ambientes aislados para asegurarme que sus cambios no fallan en la etapa de testing y no rompen ninguna funcionalidad existente.
1. **Pruebas Unitarias**: Debe  ayudar a mi equipo a realizar pruebas de código y este debía ser validado dentro del proceso de CI/CD para asegurar la calidad del código generado.
1. **Rapidez**: Debe optimizar el tiempo dentro de mi ciclo de desarrollo, como lo mencioné mi aplicación debía llegar lo más pronto posible a producción.

**¿Qué herramientas utilicé?**

[SST (Serverless Stack)](https://docs.sst.dev/): SST es un marco de desarrollo específico para aplicaciones serverless en AWS. Proporciona una estructura y una serie de comandos para ayudarte a crear y desplegar aplicaciones serverless utilizando servicios como AWS Lambda, API Gateway y más. SST se enfoca en simplificar la configuración y el despliegue de aplicaciones serverless, permitiéndote escribir código y definir recursos de manera más eficiente.

¿Por qué?

**Local development** 

SST nos permite ejecutar nuestro código localmente, esto quiere decir que nos permite agregar breakpoints dentro del código y debuguear paso a paso nuestras funciones, super importante es que lo hace local lo cual permite a los developers trabajar de una forma más rápida que si lo desplegamos dentro de AWS.

**Testing**

SST nos ayuda a realizar pruebas de Dominio, de API’s y de nuestros stacks lo que nos ayuda a garantizar la calidad del código que estamos generando, para mi este es un plus genial.

**AWS CDK**

Under the hood, SST  es una plataforma de desarrollo que está creada sobre AWS CDK y para desplegar la aplicación crea uno o varios stacks de AWS CloudFormation con la infraestructura que requiera mi aplicación serverless, por ejemplo todas mis funciones de AWS Lambda, Amazon API Gateway, roles y demás, incluso puede crear bases de datos. Además de cubrir todos los puntos de mi lista de “must have”.

Sin embargo mi aplicación era grande y existen algunos recursos de infraestructura que SST al tratarse de una plataforma de desarrollo no soporta, como cuáles? la creación de una Amazon Virtual Private Cloud (VPC), AWS Step Functions, etc. Infraestructura como tal, Para solventar esto utilice AWS CDK, lo interesante de esta combinación es que, ya que SST está creado sobre AWS CDK se adaptan perfectamente lo que crea una sinergia bastante poderosa entre ambas aplicaciones.

Asi pues en mi approach final cree 2 staks uno para la aplicación serverless y el otro para la infraestructura relacionada a mi aplicación, dentro de un mismo repositorio. En un solo Pipeline y con una sola sentencia despliego ambos staks de forma automática en min. en todos mis ambientes. :) 

![Arquitectura](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4fo27owym32rz62re4n.png)

Para ver un ejemplo en codigo de esta implementación puedes ir acá: <https://github.com/hsaenzG/serverless-with-cdk-sst/blob/main/README.md>

Esta es una de muchas implementaciones que se pueden utilizar para obtener el beneficio de una plataforma de desarrollo de aplicaciones serverless sin dejar de lado el resto de infraestructura como código que tu aplicación requiera, hay más, muchas herramientas que de acuerdo al ciclo de desarrollo que cuente tu organización puedes adoptar. 
Espero que este artículo te ayude a tomar la decisión que mejor se acople a tu caso.