Conexión y Configuración de Lambda con AWS y Postgres
Clase 21 de 30 • Curso de Ciberseguridad para Desarrollo Web
Resumen
¿Cómo configurar la conexión a la base de datos al desarrollar una función Lambda?
Cuando estás desarrollando funciones Lambda, especialmente para aplicaciones en AWS, una de las partes más críticas es configurar correctamente la conexión a tu base de datos. En este caso en particular, discutiremos cómo establecer una conexión a una base de datos Postgres desde una función Lambda, asegurándonos de hacerlo de manera eficiente y segura.
¿Cómo crear la estructura del proyecto?
-
Configura el directorio y los archivos necesarios:
- Crea un nuevo directorio
database
dentro de tu proyecto de seguimiento de GitHub (GitHub Tracker). - Dentro de este directorio, crea un archivo
database.go
.
- Crea un nuevo directorio
-
Implementación de lógica de conexión:
- El paquete de
database
debe incluir la lógica necesaria para conectarse a una base de datos. Aunque es transversal a todas las bases de datos, este ejemplo se centrará en Postgres.
- El paquete de
-
Define el método de conexión:
- Usa un método
Connect
que reciba un objetocontext
y devuelva una conexión SQL. - Utiliza
syncMuter
en una variabledbOnce
para garantizar que la conexión se realice solo una vez.
- Usa un método
¿Cómo obtener credenciales con el Cliente de Secrets Manager?
- Configuración de las variables de entorno:
- Extrae información como host, puerto, usuario y un
secret ID
de las variables de entorno.
- Extrae información como host, puerto, usuario y un
- Manipulación con AWS Secrets Manager:
- Crea un cliente para Secrets Manager para acceder al API y obtener el
secret ID
. - Desempaque el secreto que viene como un mapa de JSON a un mapa de strings.
- Crea un cliente para Secrets Manager para acceder al API y obtener el
¿Cómo añadir dependencias y sincronizarlas?
-
Incluir el driver de Postgres:
- Asegúrate de tener el driver de Postgres entre tus dependencias para garantizar la conexión correcta.
-
Descarga dependencias con Go:
- Utiliza
go get
para obtener librerías necesarias, incluidasconfig
y el SDK de AWS.
- Utiliza
-
Sincroniza con el archivo vendor:
- Usa
go mod vendor
para asegurar que todas las dependencias estén correctamente alineadas ygo mod dig
para validarlas.
- Usa
¿Cómo configurar la función Lambda getMetrix?
-
Estructura de la respuesta:
- Define la respuesta que devolverá la Lambda, la cual incluirá autor, número de commits y detalles de cada commit.
-
Validar parámetros de entrada:
- Extrae y valida el email desde los
path parameters
del request. Si falta, retorna unbadRequest
.
- Extrae y valida el email desde los
-
Conexión a la base de datos:
- Utiliza la lógica de conexión configurada previamente para establecer la comunicación con la base de datos y manejar posibles errores.
-
Manipulación de datos:
- Con los commits obtenidos, utiliza una función
parseResponse
para transformarlos en un objeto de respuesta que pueda ser enviado por el API Gateway.
- Con los commits obtenidos, utiliza una función
-
Conversión a JSON:
- Empaquétalos utilizando marshall para transformar la respuesta a un JSON y ajusta los headers a
application/json
.
- Empaquétalos utilizando marshall para transformar la respuesta a un JSON y ajusta los headers a
¿Qué más considerar antes de probar la función Lambda?
-
Datos en la base de datos:
- Inserta registros dummy en la base de datos usando herramientas como
pgAdmin
para garantizar que haya datos al probar la Lambda.
- Inserta registros dummy en la base de datos usando herramientas como
-
Configuración en AWS:
- Asegúrate de que la función Lambda tenga permisos para acceder al API de Secrets mediante la configuración en Terraform y verifica los grupos de seguridad para conexiones IP.
Este proceso asegura que tu función Lambda no solo se conecte de manera eficiente a tu base de datos, sino que también maneje de manera segura y lógica cualquier posible error en el proceso. ¡No hay mejor momento para poner en práctica estos conocimientos y seguir experimentando para optimizar tus soluciones en AWS!