Funciones Serverless en Go: AWS Lambda de la A a la Z — Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Funciones Serverless en Go: AWS Lambda de la A a la Z



La arquitectura serverless se ha convertido en el estándar de facto para crear aplicaciones escalables y rentables en la nube. AWS Lambda es uno de los servicios más populares para ejecutar código sin administrar servidores. En este artículo, analizaremos cómo crear, configurar y desplegar funciones serverless en Go (Golang) en AWS Lambda, desde lo más básico hasta técnicas avanzadas.



¿Por qué Go para AWS Lambda?



Go es el lenguaje ideal para funciones serverless. Se compila en un único archivo binario, tiene un tiempo de arranque en frío mínimo (a menudo menos de 100 ms) y un bajo consumo de memoria. Esto lo convierte en una de las opciones más rápidas y económicas para Lambda.



  • Inicio rápido: El binario compilado se ejecuta instantáneamente.
  • Bajo costo: El consumo mínimo de recursos reduce las facturas de la nube.
  • Simplicidad de despliegue: Un solo archivo, sin dependencias del lado del servidor.
  • Excelente integración: Soporte nativo de AWS SDK para Go.


Configuración del entorno y primer Handler



Antes de escribir código, asegúrese de tener instalado:

  • Go versión 1.19+
  • Utilidad AWS CLI (configurada con claves de acceso)
  • Make o cualquier sistema de compilación (opcional)


Cree un nuevo módulo e instale el paquete oficial para Lambda:



mkdir my-lambda-functioncd my-lambda-functiongo mod init my-lambda-functiongo get github.com/aws/aws-lambda-go/lambda


Ahora escribamos una función muy simple que devuelve un saludo:



package main

import ( "context" "github.com/aws/aws-lambda-go/lambda")

type MyEvent struct { Name string `json:"name"`}

type MyResponse struct { Message string `json:"message"`}

func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) { if event.Name == "" { event.Name = "Invitado" } return MyResponse{Message: "¡Hola, " + event.Name + "!"}, nil}

func main() { lambda.Start(HandleRequest)}


Este código recibe un JSON con el campo name y devuelve un saludo personalizado. Tenga en cuenta: la función debe ser exportable (con mayúscula inicial) y la firma debe coincidir estrictamente con las expectativas del runtime.



Compilación y despliegue en AWS Lambda



Para un binario compatible con Linux (que es lo que espera Lambda), use la compilación cruzada:



GOOS=linux GOARCH=amd64 go build -o bootstrap main.gozip function.zip bootstrap


El nombre del archivo de salida debe ser bootstrap — este es un requisito del runtime de Go en AWS Lambda.



Ahora creemos la función a través de AWS CLI:



aws lambda create-function \    --function-name my-go-function \    --runtime provided.al2023 \    --role arn:aws:iam::123456789012:role/lambda-execution-role \    --handler bootstrap \    --zip-file fileb://function.zip


Tenga en cuenta --runtime provided.al2023 — este es el runtime especial para Go (basado en Amazon Linux 2023). Si tiene una versión anterior, use provided.al2.



Después de la creación, pruebe la función:



aws lambda invoke --function-name my-go-function \    --payload '{"name": "Mundo"}' output.jsoncat output.json


Debería ver: {"message":"¡Hola, Mundo!"}



Trabajo con eventos de AWS (S3, DynamoDB, API Gateway)



El verdadero poder de Lambda se revela al integrarse con otros servicios de AWS. Veamos un ejemplo de un handler para eventos de S3:



package main

import ( "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda")

func HandleS3Event(ctx context.Context, s3Event even

Blogs

Book Recommendations