Creando API Rest con Api Gateway | Lambda | DynamoDB en AWS
Tags: aws, lambda, api, dynamodb
Published: 2024-03-11 02:42:24

En el mundo de la ingeniería de datos me he encontrado con varios desafíos, uno de ellos es lograr el consumo de una API con los servicios que AWS ofrece.

En esta ocasión quise realizar un ejercicio simple, pero que permitirá entender los pasos iniciales para para realizar la creación de una API rest con AWS API-Gateway y la ejecución de una función lambda y el almacenamiento de los datos en una base de datos dynamoDB.


**1. Inicialmente analizaremos el flujo del proceso :**


El siguiente flujo muestra como realizaremos un petición HTTP (se utilizará postman), hacia el API gateway el cual ejecutará una función en lambda y guardará los datos en DynamoDB :




![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/juekrr1hrqpc78j1kvh6.png)



**2. creación de la función Lambda**

El siguiente Código permitirá mapear los endpoint al cual se le debe apuntar, para el envió de peticiones y realizará el almacenamiento de datos con la librería boto, adicionalmente arrojará los mensajes de error o ejecución.

El Código lo dejo en el siguiente repositorio de Github

https://github.com/andresguecha/APIGateway_Lamda_AWS.git

(créditos al autor : Hitchon1)

Para la creación de la función, vamos a la consola de AWS y seleccionamos el servicio lambda :


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgj3wms0qbtj1ogjh2r4.png)

- Creamos una nueva función, llamada "Procesing"
- El compilador Python 3.11
- Arquitectura x86_64


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r02xu4i50y8uzn2bnmlj.png)

- En permisos debemos crear un nuevo rol al que llamaremos "api-demo",


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5ih97kzw00pr0zuwxll.png)

- Tipo de identidad: Servicio de AWS
- Caso de uso: Lambda y continuar 
- se le deben asignar las siguientes políticas: "AmazonDynamoDBFullAccess" y "CloudWatchLogsFullAccess" 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jugyeiqsffp9f4x3biv.png)


Luego de crear el rol, se lo asignaremos a la función lambda y creamos la función.

Una vez creada la función, en la opción de Código, copiaremos el Código que anteriormente proporcione.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3pvswbz1a9qcg3brlrwp.png)
 
y lanzaremos la función en el botón "Deploy", ubicado en la parte superior del Código escrito.

3. creación de base de datos DynamoDB


En la consola de AWS, seleccionamos el servicio DynamoDB y crearemos una nueva tabla llamada "employee" y en clave de partición : employeeId.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/75ei6df3fakzn15b1mbr.png)

4.Creacion de API Rest

vamos a crear un API con los siguientes recursos:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/durjylfydayhw8ktl9zx.png)


De forma práctica explicare como crear un recurso y un Endpoint los demás se realizarán de la misma manera:


EndPoint empleados: 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20tdkf35ioektrt7fgqc.png)

y luego sobre el recurso creado crearemos el método, puede ser get, post, patch o delete.

En este punto existen pasos importantes el primero es seleccionar el método deseado (GET), el tipo de integración debe ser función lambda y check en "integración de proxy de lambda", este paso es esencial para que se puedan comunicar entre si los servicios.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hgo07ljkt62jj0m9ab1l.png)


Seleccionamos la función lambda y luego crear:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rdhymqnrl2pov434yq0x.png)

una vez creados todos los endpoint damos en el botón implementar API, y ya podemos probar nuestra solución.

4. Agregar Desencadenador a la función lambda

en la función lambda seleccionaremos el botón desencadenador 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99q96owtnror1bu4sd4h.png)

en origen seleccionaremos : API Gateway


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3xoqdv2eo5h3cz86c680.png)

Escogeremos el API que anteriormente creamos, el stage creado : "dev", securtiy  : "Open" y agregar


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/myukwwjrvcrpu3y8o30w.png)


perfecto, si llegaste hasta acá déjame decirte que ya tienes la solución creada ahora es hora de probarla!!.



5. ejecución de la solución.

Para saber la dirección del api que acabaste de crear puedes ir a la función lambda en la parte de configuración y allí aparecen los desencadenadores, allí debe estar nuestra api, y la dirección del API Endpoint :



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rg0ugye39p9bt0m6lc8.png)

Una vez tengamos dicha dirección utilizaremos el programa postman, el cual permitirá realizar el envió de peticiones HTTP, sin necesidad de la creación del backend.

en el método seleccionamos Post, a continuación copiamos nuestra url de la AP, en body seleccionamos raw  y tipo json, y copiamos el siguiente json :

```
{
    "employeeId": "15455",
    "full_name":"Dasmian Marley",
    "job_title":"Contador",
    "Salary":1500
}

```

lo puedes cambiar para realizar varias pruebas, no olvides cambiar el ID del empleado en cada petición.

Luego veremos el mensaje de que el proceso fue exitoso:



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k31u1gkgv6mq36t9caqf.png)



y si vamos a nuestra base de datos en dynamo, la información ya estará allí:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t2o3qfgm9mhvmull328y.png)

De esta manera logramos crear esta solución, que estoy seguro de que te va a ayudar bastante.

Los siguientes pasos para seguir pueden ser incorporar más servicios como "incognito", para temas de seguridad en la API, o incluso incluir procesos para ingeniería de datos como Glue, almacenamiento en s3, bueno un sin fin de soluciones más.

Gracias por tu tiempo.

No olvides seguirme en mis canales para que estes informado de todo nuestro contenido.

Demo Youtube:
https://youtu.be/7kISvQ1Wr_8


Instagram :

https://www.instagram.com/guecha_tech/