Bucket S3 para Lambdas con Terraform

Clase 15 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

Montar funciones en AWS Lambda sin pasos manuales es posible y eficiente. Aquí verás cómo crear un bucket en S3 con Terraform, compilar funciones en Go con Makefile y desplegarlas desde artefactos versionados. Todo queda como infraestructura como código, con procesos repetibles y auditables.

¿Cómo crear un bucket S3 para Lambdas con Terraform?

Configurar el bucket donde vivirán los binarios es el primer paso. Se organiza dentro del módulo de infraestructura en una carpeta S3 y se define como recurso de Terraform con versionamiento y output para compartir su nombre con otros módulos.

  • Crear carpeta S3 dentro del módulo de infraestructura.
  • Definir recurso del bucket: nombre arbitrario, por ejemplo, camila-lennis-lambda-plazzi.
  • Habilitar versioning con “Enabled” para conservar cambios.
  • Exponer un output con el nombre del bucket para otros módulos.
  • Registrar el módulo S3 en el main de infraestructura.

¿Qué comandos de Terraform se ejecutan?

  • terraform init.
  • terraform plan.
  • terraform apply.

¿Cómo compilar y publicar funciones Lambda con Go y Make?

Se crean dos funciones: getMetrics y handleGitHubWebhook. Cada una tiene su carpeta, un main mínimo con handler que imprime un saludo y un Makefile que compila a un binario bootstrap, lo comprime a .zip y lo sube al bucket en S3.

  • Crear carpeta functions en el proyecto y subcarpetas: getMetrics y handleGitHubWebhook.
  • Escribir el main con la librería de AWS Lambda y un handler básico que responde “Hello from getMetrics!”.
  • Sincronizar dependencias con Go: primero go get, luego go mod vendor.
  • Crear un Makefile por función con tareas: build, zip y publish a S3.
  • Instalar la herramienta de empaquetado: go install github.com AWS aws-lambda-go cmd build-lambda-zip latest.

¿Qué estructura de carpetas se organizó?

  • infraestructura/S3: módulo del bucket para binarios.
  • proyecto/functions/getMetrics: código, main y Makefile.
  • proyecto/functions/handleGitHubWebhook: código, main y Makefile.

¿Qué comandos y herramientas se usaron en Go y Make?

  • go get.
  • go mod vendor.
  • make publish para compilar, comprimir en .zip y subir a S3.
  • Uso de la API de AWS S3 para el upload.

¿Qué error común apareció con S3 y cómo se resolvió?

  • Acceso denegado al subir: el nombre del bucket era distinto.
  • Recordatorio clave: los nombres de S3 son globales.
  • Solución: corregir a camila-lennis-lambda-plazzi y reintentar make publish.

¿Cómo desplegar Lambdas desde S3 con Terraform?

Con los artefactos en S3, se crea el módulo compute/lambdas en Terraform. Cada función referencia el objeto en S3, usa bootstrap como handler, define timeout, liga el Role ARN creado previamente y configura source code hash para detectar cambios. Se declaran variables en var.tf y se registra el módulo en el main.

  • Crear carpeta compute con archivos para cada función: getMetrics y handleGitHubWebhook.
  • Definir data de S3 que apunte al .zip de cada función.
  • Crear el recurso aws_lambda_function por función con handler bootstrap.
  • Asignar RepoCollectorRoleARN como rol de ejecución.
  • Configurar source code hash para versionar despliegues.
  • Añadir variables lambda_bucket y repo_collector_arn en var.tf.
  • Registrar el módulo compute en el main y pasarle esas variables.

¿Qué variables y roles se conectan?

  • lambda_bucket: nombre del bucket con los binarios.
  • repo_collector_arn: ARN del rol que ejecuta las funciones.
  • Variables de entorno por defecto, por ejemplo d.

¿Qué validaciones finales en AWS se realizaron?

  • Confirmar en la consola de Lambda la existencia de: handleGitHubWebhook y getMetrics.
  • Probar con un evento simple: ver respuesta “Hello from getMetrics!”.
  • Verificar que el código vive en AWS y que el despliegue fue automatizado con Terraform y Make.

¿Te gustaría que se muestre un ejemplo de Makefile completo o cómo estructurar los nombres de S3 y keys para múltiples entornos? Escribe tus preguntas y casos, y afinamos el flujo para tu equipo.