Go para Serverless: AWS Lambda Functions de alto desempenho em Golang

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que Go é o novo rei do Serverless (e ponto final)?

\n\n

Quando se fala em arquitetura serverless, a maioria dos desenvolvedores pensa em JavaScript (Node.js) ou Python. É compreensível: são simples, populares e cheios de tutoriais. Mas há um problema: o cold start.

\n\n

Imagine: você executa uma função Lambda em Python. A primeira requisição após um período de inatividade leva de 3 a 5 segundos. O usuário espera. O negócio perde dinheiro. Agora imagine a mesma função em Go: 100 a 200 milissegundos. Sente a diferença?

\n\n

Go (Golang) é uma linguagem criada nos laboratórios do Google para resolver problemas onde desempenho e simplicidade são cruciais. No mundo serverless, ela oferece três vantagens principais:

\n
    \n
  • Cold start instantâneo — o binário compilado é executado em milissegundos.
  • \n
  • Baixo consumo de memória — você paga menos e obtém mais.
  • \n
  • Um único binário — sem dependências, é só subir e pronto.
  • \n
\n\n

Neste artigo, vamos explorar como escrever funções serverless em Go para AWS Lambda, com exemplos reais de código e comparações com alternativas. Se você está cansado de esperar a função Python "aquecer", seja bem-vindo.

\n\n

Como configurar AWS Lambda com Go: guia passo a passo

\n\n

Antes de escrever código, vamos entender as ferramentas necessárias. Para trabalhar com Go na AWS Lambda, você vai precisar de:

\n
    \n
  • Go instalado (versão 1.21+).
  • \n
  • Utilitário aws-cli (ou o console da AWS).
  • \n
  • Noção básica do que é um Handler.
  • \n
\n\n

Passo 1. Crie o projeto

\n

Crie um novo diretório e inicialize o módulo:

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

Passo 2. Escreva a primeira função

\n

Crie o arquivo main.go. Este é um exemplo mínimo de função serverless em Go que processa JSON e retorna uma resposta:

\n
package main\n\nimport (\n    "context"\n    "fmt"\n\n    "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — estrutura do evento de entrada\ntype MyEvent struct {\n    Name string `json:"name"`\n}\n\n// MyResponse — estrutura da resposta\ntype MyResponse struct {\n    Message string `json:"message"`\n    Status  int    `json:"status"`\n}\n\n// HandleRequest — handler principal da Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n    if event.Name == "" {\n        return MyResponse{Message: "Olá, anônimo!", Status: 200}, nil\n    }\n    return MyResponse{\n        Message: fmt.Sprintf("Olá, %s! Bem-vindo ao serverless com Go.", event.Name),\n        Status:  200,\n    }, nil\n}\n\nfunc main() {\n    lambda.Start(HandleRequest)\n}
\n\n

Importante: A função deve aceitar context.Context e retornar (T, error). Esse é o padrão para Go Lambda.

\n\n

Passo 3. Compile para Linux

\n

A AWS Lambda roda em Linux, então o binário precisa ser compilado para esse sistema:

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

Observe: o arquivo de saída deve se chamar bootstrap — é um requisito da AWS Lambda para Go.

\n\n

Passo 4. Empacote e faça o upload

\n

Compacte o binário em um arquivo ZIP:

\n
zip function.zip bootstrap
\n

Agora faça o upload para a AWS Lambda pelo console ou CLI. Pronto! Sua primeira função serverless em Go está funcionando.

\n\n

Exemplo avançado: integração com S3 e DynamoDB

\n

Agora que você já domina o básico, vamos criar algo útil. Suponha que precisamos processar uploads de arquivos no S3 e salvar metadados no DynamoDB. Esse é um cenário clássico para serverless.

\n\n

Instale os SDKs necessários:

\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