Construyendo una aplicación serverless en AWS con API Gateway y DynamoDB 1/2 — Away from Servers Series | serverless.pe

Carlos E. Cortez Bazan
6 min readApr 1, 2021

“Bienvenido a las tierras Lejanas de Servidores, donde abundan los cobros por milisegundos, y no tiene sentido dejar prendida la luz. Donde se reciben mensajes en universos paralelos al mismo tiempo y que contienen a las hordas de peticiones desesperadas, queriéndonos llevar de vuelta al INFRAmundo de las Virtual Machines. Sí, bienvenido a Serverless.”

“pobres aquellas peticiones no atendidas….”

¿Qué tal viaje no? Empecemos. Soy Carlos Cortez, trabajo en DB Solution en Chile como Senior cloud architect (2020), fundador & CTO de CENNTI (2019) y también de la comunidad oficial de AWS en Perú (2014), y vengo a que aprendamos paso a paso a trabajar con tecnología Serverless en AWS, y quién sabe si nos descarrilamos hacia… ok No.

Existen diferentes maneras de empezar con Serverless, iremos paso a paso, y en estos 2 tutoriales, aprenderemos a usar la consola de Lambda, IAM, Dynamodb y API Gateway, así como la CLI.

📢 📢 Spoiler Alert:

En los siguientes laboratorios, empezaremos con Serverless Framework y Terraform que nos permitirán agilizar y automatizar la creación de nuestros recursos como código. (Infrastructure as code)

1. 🧩 Creamos la base de datos en DynamoDB

Database Setup

Crearemos una tabla de dynamodb con las siguientes variables:

table name: books

partition key: id

default settings

Una manera de crearla es usando al CLI y cargando la definición de la tabla en un json:

Ahora creamos la tabla usando esta definición:

➜ aws dynamodb create-table — cli-input-json file://dynamodbdefinition.json

Si lo colocas en un archivo ejecutable debes de darle chmod +x create_dynamodb_table.sh

➜ sh create_dynamodb_table.sh{“TableDescription”: {“AttributeDefinitions”: [{“AttributeName”: “id”,“AttributeType”: “S”}],“TableName”: “books”,“KeySchema”: [{“AttributeName”: “id”,“KeyType”: “HASH”}],“TableStatus”: “CREATING”,“CreationDateTime”: 1617243727.79,“ProvisionedThroughput”: {“NumberOfDecreasesToday”: 0,“ReadCapacityUnits”: 5,“WriteCapacityUnits”: 5},“TableSizeBytes”: 0,“ItemCount”: 0,“TableArn”: “arn:aws:dynamodb:us-east-1:279524932952:table/books”,“TableId”: “7fead82f-2eaf-4239–9e27–974d2806a759”}}

Luego creamos un Rol en IAM para que sea usado por Lambda

2. 🧩 Creating the Lambda Role

Crearemos los recursos necesarios para que nuestro código pueda comunicarse a DynamoDB de manera bidireccional.

Especificaciones del rol:

Role Type: lambdaPolicy: dynamodb:* o usando Least Privileges PrinciplesName: LambdaRoleForDynamoDBAccess

En el que tenemos que asignarle un rol con suficientes permisos para crear tablas. Si estas probando en un ambiente controlado, siempre es bueno NO usar las FullAccess Policies por default en IAM, así que, usemos esta que está mucho más acotada:

Ahora, el json de la relación de confianza también es necesario, así lo creas por consola o por cli, puedes usar esta:

(opcionalmente) Por CLI:

3. Empezamos la creación de funciones Lambda λ.

Usaremos los archivos .js que estamos en este repositorio:

“Create book” Lambda:

name: create-booklanguage: nodejs 10.xrole: LambdaRoleForDynamoDBAccess

Configuremos los eventos de prueba “event tests”:

Configurar los eventos de test en una función lambda, creando un nuevo nombre de testing.

Actualizamos los eventos de prueba “event tests”:

Adicionalmente, Agregando un json de request como el siguiente.

{
“body”: “{\”title\”: \”Carlos Cortez Cloud Book\”}”
}

Ejecutemos de esta manera para probar:

y luego vamos a la consola de DynamoDB a revisar si se ha creado el nuevo elemento:

4. 🛰 Creating a POST API

Primero que todo, vamos a API Gateway, creamos un nuevo API Rest y empezamos:

Vamos hacia Resource, y crearemos un nuevo recurso llamado /books

El nuevo recurso /books aparecerá en la parte izquierda, para poder administrarlo:

Ahora, creamos un nuevo método POST en el nuevo recurso /books

Elegimos POST, puesto que vamos a realizar una escritura en DynamoDB y enviaremos datos desde el browser:

Seleccionamos nuestro nuevo método, y nos vamos a Integration Request,

Modificamos el Request de nuestro método de la siguiente manera, definiendo qué se va ejecutar una función Lambda, en modo proxy, y elegimos la función de la lista.

5. Generando datos desde la nueva API en Postman 📬📬📬

Ahora, vayamos de vuelta a nuestro Lambda para verificar que estén enlazados con el API Gateway con esa acción que acabamos de realizar.

Revisamos que exista la integración generada por API Gateway.

Ahora, podemos ir a ejecutar nuestro primer recurso de API rest desde un cliente local, si es de tu preferencia, por ejemplo: Postman

o por Post con el siguiente comando y probar diferentes títulos:

curl -Xv POST
https://cccndgwk5k.execute-api.us-east-1.amazonaws.com/production/books
-H ‘cache-control: no-cache’
-H ‘content-type: application/json’
-d ‘{“title”:”Be an AWS Architect Guide by CC 2nd Edition”}’

🔥🔥 ¿Con qué continuamos? 🔥🔥

Debemos de programar las siguientes funciones aún, Listar, Listar todos, Eliminar y Actualizar para tener nuestra app funcional desde el punto de vista del backend.

Siguiente post: (Al Aire el 08 de Abril)

Cuando esté publicado lo actualizaré aquí mismo

Si te gustó este post, dale un like, comparte y comenta.

☢ Rompiendo se aprende

Suscríbete a mi canal, Breaking the Cloud y Al día con AWS en https://cortez.cloud

⭐Suscríbete a mi canal :
http://bit.ly/aldiaconaws
https://aldiaconaws.cortez.cloud
https://aiformortals.cortez.cloud
https://dev.cortez.cloud

videos, noticas de AWS, análisis, demos, workshops

🔥🔥 Sígueme en mis redes 🔥🔥

follow <- me()

🦜 Mi Twitter: https://twitter.com/ccortezb

📺 Youtube Channel: http://bit.ly/aldiaconaws

📺 AWSUGPerú: https://www.youtube.com/awsusergroupperuoficial

📟 Mi Facebook: https://www.facebook.com/ccortezb/

🤳 Mi Instagram: ccortezbazan

📜 Mis cursos de AWS: https://cennticloud.thinkific.com

🕮 Mi blog — cortez.cloud

Muchas gracias, espero nos volvamos a ver

🔥🔥 Acerca de mí 🔥🔥

Cortez.Cloud/whoami

Les presento mi pequeña web personal https://www.Cortez.Cloud llamado “Breaking the Cloud”.

Seguiré creando contenido cada semana de AWS sobre Al/ML, Serverless, Security y como romper las reglas!

También mis próximas iniciativas, talleres, cursos, videos gratuitos, awsugperu y más.

--

--

Carlos E. Cortez Bazan

AWS UG Leader Perú / AWS ML Community Builder / Senior Cloud Architect