Implementación de buckets y funciones Lambda con Terraform y AWS S3

Clase 15 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

¿Cómo crear un bucket S3 utilizando Terraform?

Para almacenar nuestros archivos de funciones Lambda, es crucial contar con un bucket en Amazon S3, y la forma automatizada y eficiente de hacerlo es utilizando Terraform. Este enfoque no solo facilita el proceso, sino que asegura mantener la infraestructura como código. Sigue estos pasos para crear tu bucket:

  1. Crea un nuevo módulo de infraestructura:

    • Dentro de tu módulo, añade un directorio llamado S3.
    • Dentro de este directorio, crea un archivo de configuración para definir el bucket.
  2. Configura el bucket en Terraform:

    • Define un recurso AWS bucket en Terraform, por ejemplo, lambda_bucket.
    • Establece un nombre arbitrario para tu bucket, tal como CamilaLenisLambdaPlatzi.
    resource "aws_s3_bucket" "lambda_bucket" {
      bucket = "CamilaLenisLambdaPlatzi"
    }
    
  3. Habilita el versionamiento:

    • Añade el recurso versioning para el bucket para mantener un control de versiones.
    resource "aws_s3_bucket_versioning" "versioning" {
      bucket = aws_s3_bucket.lambda_bucket.id
      versioning_configuration {
        status = "Enabled"
      }
    }
    
  4. Integra el módulo en tu proyecto:

    • Asegúrate de incluir este módulo en el archivo principal de Terraform para que sea parte de tu infraestructura.
    module "s3" {
      source = "./S3"
    }
    
  5. Ejecuta comandos Terraform:

    • Inicia el módulo con terraform init.
    • Planea la creación del bucket con terraform plan.
    • Implementa con terraform apply.

Estos pasos configuran tu entorno para recibir y mantener los binarios de tus funciones Lambda.

¿Cómo crear y organizar funciones Lambda en tu proyecto?

Tener organizadas tus funciones Lambda es esencial para un desarrollo eficiente. Crear y estructurar tus funciones desde el inicio puede facilitar mucho el trabajo futuro. Aquí te mostramos cómo hacerlo:

  1. Configura el entorno del proyecto:

    • Dentro de tu proyecto, crea un directorio denominado Functions.
    • Dentro de este directorio, realiza subcarpetas para cada función que vas a manejar. Por ejemplo, getMetrics y handleGithubNotifications.
  2. Desarrolla las funciones básicas:

    • Crea archivos para tus funciones Lambda tomando como base ejemplos o mediante la asistencia de inteligencia artificial.
    • Utiliza la librería AWS Lambda para definir las funciones.
  3. Manejo de dependencias en Go:

    • Asegura que todas las dependencias se encuentren sincronizadas ejecutando go mod vendor. Si es necesario, primero realiza go get.
    go mod vendor
    
  4. Desarrolla un archivo make:

    • Configura un Makefile para automatizar el proceso de compilación y empaquetado.
    • Los comandos aseguran la compilación del código en binarios, la creación de archivos .zip y su subida a S3.
  5. Publica las funciones:

    • Utiliza el comando make publish para compilar y subir tus funciones Lambda a S3.

¿Cómo integrar las funciones Lambda con Terraform?

Después de tener tus funciones Lambda listas, el siguiente paso es integrarlas con Terraform, para garantizar que se gestionen y desplieguen automáticamente como parte de tu infraestructura.

  1. Crea un nuevo módulo para computar:

    • Agrega un directorio llamado compute donde guardarás tus configuraciones Lambda.
  2. Crea archivos de configuración por función:

    • Cada función tendrá su propio archivo de configuración en Terraform. Por ejemplo, getMetrics y handleGithubNotifications.
    resource "aws_lambda_function" "get_metrics" {
      function_name = "GetMetrics"
      s3_bucket     = var.lambda_bucket
      s3_key        = "getMetrics.zip"
      handler       = "bootstrap"
      runtime       = "go1.x"
      role          = var.repo_collector_role_arn
      ...
    }
    
  3. Integra el módulo de las funciones en el main:

    • Añade el módulo compute dentro de tu configuración principal para asegurar su despliegue junto con otras partes de la infraestructura.
  4. Publica la infraestructura:

    • Inicializa los módulos, planifica su actualización y despliegue con Terraform utilizando los comandos habituales: terraform init, terraform plan, y terraform apply.
  5. Verifica y prueba en AWS:

    • Una vez desplegados, asegúrate de que tus funciones aparezcan en el panel de Lambda de AWS y realiza pruebas Básicas para garantizar su correcto funcionamiento.

Mediante estos pasos, no solo estarás creando funciones Lambda eficientes, sino que estarás utilizando las mejores prácticas al integrar tu desarrollo con la infraestructura como código. ¡Mantente motivado y sigue aprendiendo para optimizar tus proyectos!