Funções Serverless em Go: AWS Lambda de A a Z — Guia Completo

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

Funções Serverless em Go: AWS Lambda de A a Z



A arquitetura serverless tornou-se o padrão de facto para criar aplicações escaláveis e econômicas na nuvem. AWS Lambda é um dos serviços mais populares para executar código sem gerenciar servidores. Neste artigo, vamos abordar como criar, configurar e fazer deploy de funções serverless em Go (Golang) no AWS Lambda, desde o básico até técnicas avançadas.



Por que Go para AWS Lambda?



Go é a linguagem ideal para funções serverless. Ela compila em um único arquivo binário, tem tempo mínimo de cold start (geralmente menos de 100 ms) e baixo consumo de memória. Isso a torna uma das opções mais rápidas e baratas para Lambda.



  • Início rápido: O binário compilado é executado instantaneamente.
  • Baixo custo: O consumo mínimo de recursos reduz as contas da nuvem.
  • Simplicidade de deploy: Um único arquivo — sem dependências no lado do servidor.
  • Excelente integração: Suporte nativo ao AWS SDK para Go.


Configuração do ambiente e primeiro Handler



Antes de escrever código, certifique-se de ter instalado:

  • Go versão 1.19+
  • Utilitário AWS CLI (configurado com chaves de acesso)
  • Make ou qualquer sistema de build (opcional)


Crie um novo módulo e instale o pacote oficial para Lambda:



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


Agora vamos escrever uma função simples que retorna uma saudação:



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 = "Convidado" } return MyResponse{Message: "Olá, " + event.Name + "!"}, nil}

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


Este código recebe um JSON com o campo name e retorna uma saudação personalizada. Observe: a função deve ser exportável (começar com letra maiúscula) e a assinatura deve corresponder estritamente às expectativas do runtime.



Compilação e deploy no AWS Lambda



Para um binário compatível com Linux (que é o que o Lambda espera), use a compilação cruzada:



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


O nome do arquivo de saída obrigatoriamente deve ser bootstrap — este é um requisito do runtime Go no AWS Lambda.



Agora vamos criar a função via 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


Observe o --runtime provided.al2023 — este é o runtime especial para Go (baseado no Amazon Linux 2023). Se você tiver uma versão antiga, use provided.al2.



Após a criação, teste a função:



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


Você deve ver: {"message":"Olá, Mundo!"}



Trabalhando com eventos AWS (S3, DynamoDB, API Gateway)



O verdadeiro poder do Lambda se revela na integração com outros serviços AWS. Vejamos um exemplo de handler para eventos do 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