Go y Serverless: cómo escribir funciones de AWS Lambda que envidian los desarrolladores de Python

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

¿Por qué Go es el nuevo rey de Serverless (y punto)?

\n\n

Cuando se habla de arquitectura serverless, la mayoría de los desarrolladores piensan en JavaScript (Node.js) o Python. Es lógico: son simples, populares y hay toneladas de tutoriales escritos para ellos. Pero hay un problema: el arranque en frío.

\n\n

Imagine: ejecuta una función Lambda en Python. La primera solicitud después de un periodo de inactividad tarda 3-5 segundos en procesarse. El usuario espera. El negocio pierde dinero. Ahora imagine la misma función en Go: 100-200 milisegundos. ¿Nota la diferencia?

\n\n

Go (Golang) es un lenguaje creado en las profundidades de Google para resolver problemas donde importan el rendimiento y la simplicidad. En el mundo serverless, ofrece tres ventajas clave:

\n
    \n
  • Arranque en frío instantáneo — el binario compilado se inicia en milisegundos.
  • \n
  • Bajo consumo de memoria — paga menos y obtiene más.
  • \n
  • Un solo binario — sin dependencias, simplemente súbalo y olvídese.
  • \n
\n\n

En este artículo, analizaremos cómo escribir funciones serverless en Go para AWS Lambda, veremos ejemplos de código reales y los compararemos con alternativas. Si está cansado de esperar a que se "caliente" una función de Python, bienvenido.

\n\n

Cómo configurar AWS Lambda en Go: guía paso a paso

\n\n

Antes de escribir código, revisemos las herramientas necesarias. Para trabajar con Go en AWS Lambda necesitará:

\n
    \n
  • Go instalado (versión 1.21+).
  • \n
  • La utilidad aws-cli (o la consola de AWS).
  • \n
  • Comprensión básica de qué es un Handler.
  • \n
\n\n

Paso 1. Crear el proyecto

\n

Cree un nuevo directorio e inicialice el módulo:

\n
mkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda
\n\n

Paso 2. Escribir la primera función

\n

Cree un archivo main.go. Aquí tiene un ejemplo mínimo de una función serverless en Go que procesa JSON y devuelve una respuesta:

\n
package main\n\nimport (\n    "context"\n    "fmt"\n\n    "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — estructura del evento de entrada\ntype MyEvent struct {\n    Name string `json:"name"`\n}\n\n// MyResponse — estructura de la respuesta\ntype MyResponse struct {\n    Message string `json:"message"`\n    Status  int    `json:"status"`\n}\n\n// HandleRequest — manejador principal de Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n    if event.Name == "" {\n        return MyResponse{Message: "¡Hola, anónimo!", Status: 200}, nil\n    }\n    return MyResponse{\n        Message: fmt.Sprintf("¡Hola, %s! Bienvenido a serverless con Go.", event.Name),\n        Status:  200,\n    }, nil\n}\n\nfunc main() {\n    lambda.Start(HandleRequest)\n}
\n\n

Importante: La función debe aceptar context.Context y devolver (T, error). Este es el estándar para Go Lambda.

\n\n

Paso 3. Compilar para Linux

\n

AWS Lambda funciona en Linux, por lo que el binario debe compilarse para ese sistema operativo:

\n
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
\n

Tenga en cuenta: el archivo de salida debe llamarse bootstrap — este es un requisito de AWS Lambda para Go.

\n\n

Paso 4. Empaquetar y subir

\n

Comprima el binario en un ZIP:

\n
zip function.zip bootstrap
\n

Ahora súbalo a AWS Lambda a través de la consola o CLI. ¡Listo! Su primera función serverless en Go ya está funcionando.

\n\n

Ejemplo avanzado: trabajar con S3 y DynamoDB

\n

Ahora que domina lo básico, escribamos algo útil. Supongamos que necesitamos procesar la carga de archivos en S3 y guardar los metadatos en DynamoDB. Este es un escenario clásico para serverless.

\n\n

Instale los SDK necesarios:

\n
go get github.com/aws/aws-lambda-go/events\ngo get github.com/aws/aws-sdk-go-v2/service/s3\ngo get github.com/aws/aws-sdk-go-v2/service/dynamodb
\n\

Blogs

Book Recommendations