Step Functions para no morir. Parte 3: Servicios AWS
Tags: aws, javascript, lambda, tutorial
Published: 2022-02-15 13:30:24

![Buenas buenas meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jrr0beho7jl00bhbkx0.png)

Ésta es la tercera parte de la serie Step Functions para morir. 

En este capítulo vamos a estar viendo 
- AWS
- Lambda
- SQS
- IAM Role

y... mucho muy importante, vamos a tener le primer video de la serie :3

##AWS
Vamos a hablar de AWS...
Que básicamente es de lo que vengo hablando desde el capítulo 1. 
AWS es un proveedor de la nube que nos va a permitir usar sus servicios para la construcción de máquinas de estados, conocida como  el servicio de StepFunctions. La verdad, es que nos permite crear un montón de cosas más, además de tener distintos de servicios, pero nos concentremos en lo que necesitamos :D 
Para este capítulo voy a necesitar que creen una cuenta en AWS. La cuenta se crea [aquí](https://portal.aws.amazon.com/billing/signup#/start)

Una vez que ya esté creada pasemos a hablar de los servicios que vamos a usar en la máquina de estado del próximo capítulo. 

##Lambda
AWS Lambda es un servicio informático sin servidor y basado en eventos que le permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend sin necesidad de aprovisionar o administrar servidores.

Las lambdas son iniciadas por eventos, estos eventos pueden ser una cola SQS, un evento de API Gateway, la carga de un documento en un bucket S3, etc. 

Tienen una capa gratuita de por vida con la cual vamos a poder hacer nuestro desarrollo de ejemplo sin ningún costo. 

![Lambda capa gratuita](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9dvy3mzx26a64d66p2ea.png)

**Disclaimer**: Siempre chequeénlo por las dudas. ~~Ya veo que cambian los términos y condiciones y me acusan de estafa.~~ 

En este momento la capa gratuita es de 1 millón de solicitudes al mes. 

Las lambdas exportan funcionan de la siguiente manera: 
- Al ser iniciadas reciben un evento por parámetro con el que vamos a estar trabajando.
- Se debe exportar una función principal llamada handler, que va a contener el trabajo que realiza la lambda.

_(Todo esto va a ser explicado de manera práctica en el próximo capítulo)_

####Buenas prácticas.
Una lambda debe ser... 
-  `Atómica`:
 - Las lambdas deben ser funciones `compactas`, no deben contener muchas líneas de código. 
 - Tiene que estar `enfocado en una función,` ésta debe resolver siempre el mismo problema y responder de la misma manera.  
- `Independiente` del resto de la máquina de estado, es decir, no debe conocer el contexto en el cual va a ser utilizado. 
- `Liviana`, las lambdas deben pesar poco para que su respuesta sea rápida y el consumo de memoria mínimo. Si una lambda no puede ser de esta manera, posiblemente estemos necesitando hacer uso de otro servicio de la nube. 

##SQS

Amazon Simple Queue Service (Amazon SQS) es un servicio de colas de mensajes completamente administrado que permite desacoplar y ajustar la escala de microservicios, sistemas distribuidos y aplicaciones sin servidor.

Es decir, es una cola de mensajes escalable, en donde se guardan los mensajes que se envían de un servicio a otro. 

El servicio de SQS también cuando con una capa gratuita de por vida y permite un millón de solicitudes, a tener que en cuenta que no se renuevan por mes.

![sqs capa gratuita](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmexwofjpvuh7ynjffxx.png)

####Tipos de colas. 

Este tipo de servicio de SQS tiene dos tipos de colas: 
- `Colas estándar`: 
 - Admiten un número casi ilimitado de mensajes.
 -  Van entregando los mensajes a medida que se van procesando, es decir, no tiene importancia el orden en el que fueron enviados a la cola. 
 - Los mensajes son enviados aunque sea una vez al servicio al cual se entregan. 
- `Colas FIFO`: 
 - Admiten hasta 300 mensajes por segundo. 
 - Respeta la consigna de “primero en entrar, primero en salir”, es decir, el orden se respeta. 
 - Los mensajes son enviados una vez, pero quedan pendientes hasta que el cliente los recibe y los procesa. 


##IAM 
Un rol de IAM es una identidad de IAM que puede crear en su cuenta y que tiene permisos específicos. Un rol de IAM es similar a un usuario de IAM en que se trata de una identidad de AWS con políticas de permisos que determinan lo que la identidad puede hacer y lo que no en AWS. 

Es decir, vamos a crear un usuario con permisos para poder trabajar, de tal manera que en nuestra computadora no tengamos los datos del usuario base, ya que si por alguna razón pudieran acceder a ese usuario, podrían generarnos cargos en nuestras cuentas. 


###Como crear un usuario en AWS 

Voy a adjuntar un video de como creo un usuario para nuestro proyecto. Quien no tenga tiempo para verlo, abajo va en paso a paso. 

Partimos con esta base: 
1 - Tiene creada la cuenta en AWS.
2 - Tienen Nodejs instalado.
3 - Tienen serverless instalado. 

{% youtube WPrzOGPdFng %}

Comencemos... 

Una vez que estamos logueados en la navbar tenemos que configurar la región en la que queremos trabajar. 


![navbar aws](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcky2li2tpyleku68xdf.png)

En región vamos a elegir Norte de Virginia, mejor conocida como `us-east-1`.

En la lupa vamos a escribir el servicio a utilizar: `IAM`. 


![Búsqueda IAM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1flbu47k9o3o27wux0zm.png)

Seleccionamos la primera opción. 

![Consola IAM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lazw0rjqeyzt0f8gvhj2.png)

~~Pido disculpas por los números tan feos.~~

1 - Seleccionamos la palabra `Usuarios` del menú lateral. 
2 - Y hacemos click en la opción `Agregar Usuarios`. 


![Agregar usuario Consola](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9f41qhicd14yflp2v8yq.png)

1 - En nombre de usuario vamos a elegir el nombre que queremos usar, en este caso yo uso el mio.
2 - A la hora de elegir el tipo de acceso, vamos a escoger la opción de `clave de acceso` con un ID de Acceso  y una clave secreta, porque es lo que necesitamos para configurar el perfil en para serverless. 


![Grupos de permisos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3tfffyenuxsesswpnl6.png)

Todos los usuarios necesitan tener permisos, para saber a que tienen acceso. 
Es por eso que vamos a crear un grupo de acceso que puede ser asignado a distintos usuarios si así lo quisiéramos. 


![Crear grupo consola](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14g252snrrthntc7l9f5.png)

1 - El nombre de grupo de usuarios es a elección, lo ideal sería que fuese descriptivo de los permisos, en este caso en Admins porque le voy a dar accesos de administrador. 
2 - En este punto tenemos todos los permisos que podemos asignarles, junto con una breve descripción. Elijo la opción  `AdministratorAcces`. 


![Añadir etiquetas consola](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a54yvs0ujgewg7o9s24u.png)

Vamos a continuar sin elegir ninguna etiqueta. Y vamos a encontrarnos con la pantalla de previsualización de nuestro usuario, una vez que vemos todo ok, le damos continuar. 

![Previsualización del usuario creado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jvgl9pvz2o1jr1dg8h2c.png)

Y vamos a la pantalla de nuestro usuario recién creado. 

**IMPORTANTE:** La `Clave de acceso secreta` solo se permite visualizar en la creación de usuario, es decir, copien ese dato o descarguen el `.csv` porque lo vamos a estar utilizando.  


![Usuario creado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kbkfdkwdk8mf8cvr084e.png)


###Como configurar un usuario de AWS en Serverless Framework

Vamos a configurar el usuario que creamos en serverless. 
Para eso vamos a abrir la consola y correr es el siguiente comando. 

```
serverless config credentials --provider aws --key keyID --secret keySecret --profile giuli
``` 

- En **--provider** va AWS ya que es el proveedor de la nube que vamos a utilizar.
- En **--key** va el `key ID` o, si AWS está, en español, es `ID de clave de acceso`. (Reemplacen el keyID)
- En **--secret** va el `secret key`  o `Clave de acceso secreta`, la que teníamos que haber guardado. (Reemplacen el keySecret)
- La configuración **--profile**  no es obligatorio, si no se lo agregamos, el usuario se va a guardar como usuario `default`. En mi caso, que tengo otros usuarios configurados, prefiero que tenga un nombre para poder identificarlo. 

Si la consola no tira ningún error, entonces ya se registró el usuario. 

Pueden chequear su usuario creado, partiendo de la carpeta base de su computadora, en la carpeta `aws` (carpeta oculta) en el archivo `crendentials`.

##Fin
Bueno, ya tenemos creada nuestra cuenta de AWS, y tenemos configurado nuestro usuario. 
¿Eso es todo? 

![Muy inteligente meme homer](https://i.makeagif.com/media/4-18-2016/FRchgy.gif)

No.

El capítulo que viene va a ser un poco largo. 
Vamos a crear la maquina de estado completa, junto con la creación de las lambdas, y la cola de sqs que vamos a necesitar :D 

Recuerden que si este post les fue útil, pueden invitarme un cafecito. 

[![Invitame un café en cafecito.app](https://cdn.cafecito.app/imgs/buttons/button_2.svg)](https://cafecito.app/giulianaeolmos)

Nos vemos la semana que viene. 

Besis.