6e1e327bed6827ede0ea7ae07d1b53c01fefd5ec
iot-lambda-dashboardApi
Resumen
Proyecto serverless simple que expone un endpoint GET /readings protegido por Cognito y API Gateway HTTP API. La Lambda (Go) realiza un Scan sobre una tabla DynamoDB existente y devuelve los items en JSON.
Estructura
iot-lambda-dashboardApi/
├── template.yml # CloudFormation template
├── go.mod
├── main.go # Handler y lógica simple (versión inicial sin capas)
└── README.md
Requisitos
- Go (>=1.20) para compilar el binario
- AWS CLI configurado con credenciales y permisos para crear recursos CloudFormation
- S3 bucket para alojar el paquete zip de la Lambda
- Tener desplegado el stack
iot-cognito(o disponer de UserPoolId y AppClientId) - Una tabla DynamoDB existente con los items de lecturas
Variables/Parámetros del template
El template CloudFormation requiere los siguientes parámetros al desplegar:
- TableName: nombre de la tabla DynamoDB existente
- LambdaS3Bucket: bucket S3 que contiene el zip desplegable
- LambdaS3Key: key (ruta) al objeto zip con el binario
- CognitoUserPoolId: User Pool ID (puede obtenerse desde el stack iot-cognito export)
- CognitoUserPoolClientId: App Client ID (puede obtenerse desde el stack iot-cognito export)
Construir y empaquetar la Lambda (localmente)
- Compilar para Linux (runtime go1.x en Lambda):
GOOS=linux GOARCH=amd64 go build -o main main.go
- Empaquetar en zip:
zip deployment.zip main
- Subir a S3:
aws s3 cp deployment.zip s3://<your-bucket>/path/deployment.zip
Despliegue
Ejemplo de despliegue usando aws cloudformation deploy pasando los parámetros necesarios:
aws cloudformation deploy \
--template-file template.yml \
--stack-name iot-lambda-dashboardApi \
--parameter-overrides \
TableName=<DDB_TABLE_NAME> \
LambdaS3Bucket=<S3_BUCKET_NAME> \
LambdaS3Key=<S3_KEY> \
CognitoUserPoolId=<COGNITO_USER_POOL_ID> \
CognitoUserPoolClientId=<COGNITO_APP_CLIENT_ID>
Notas:
- En proyectos integrados, obtener Cognito values desde el stack
iot-cognitoconaws cloudformation list-exportsy pasar sus valores aquí.
Probar el endpoint
- Obtener un JWT (id/access token) desde Cognito (por ejemplo usando el flujo de la SPA o directamente desde la consola si se tienen credenciales).
- Llamar al endpoint:
curl -H "Authorization: Bearer <JWT_TOKEN>" https://<api-id>.execute-api.<region>.amazonaws.com/readings
Respuesta esperada
JSON con la forma:
{
"data": [
{
"deviceId": "ARDUINO-01",
"timestamp": "2026-09-02T18:00:00Z",
"temperature": 24.7,
"humidity": 58.2
}
]
}
Consideraciones pedagógicas
- Esta implementación inicial es intencionalmente simple: toda la lógica está en
main.goy utilizaScanen DynamoDB. - Posteriormente los alumnos deben refactorizar: separar responsabilidades, mejorar acceso a datos, evitar Scan, añadir paginación y filtros, tests, etc.
Errores y códigos de estado
- 200 -> éxito
- 400 -> petición inválida (no implementado ampliamente en esta versión)
- 401 -> no autenticado (manejado por API Gateway/Cognito Authorizer)
- 500 -> error interno del servidor
No crear tabla DynamoDB desde este template
La tabla DynamoDB debe existir previamente y su nombre se pasa mediante el parámetro TableName.
Contacto
Proyecto educativo — implementación simple para fines didácticos.
Languages
Go
100%