¿Por qué Go es el nuevo rey de Serverless (y punto)?
\n\nCuando 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\nImagine: 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\nGo (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
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\nCómo configurar AWS Lambda en Go: guía paso a paso
\n\nAntes 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
Paso 1. Crear el proyecto
\nCree un nuevo directorio e inicialice el módulo:
\nmkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda\n\nPaso 2. Escribir la primera función
\nCree un archivo main.go. Aquí tiene un ejemplo mínimo de una función serverless en Go que procesa JSON y devuelve una respuesta:
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\nImportante: La función debe aceptar context.Context y devolver (T, error). Este es el estándar para Go Lambda.
Paso 3. Compilar para Linux
\nAWS Lambda funciona en Linux, por lo que el binario debe compilarse para ese sistema operativo:
\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\nTenga en cuenta: el archivo de salida debe llamarse bootstrap — este es un requisito de AWS Lambda para Go.
Paso 4. Empaquetar y subir
\nComprima el binario en un ZIP:
\nzip function.zip bootstrap\nAhora 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\nEjemplo avanzado: trabajar con S3 y DynamoDB
\nAhora 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\nInstale los SDK necesarios:
\ngo 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\