Funções Serverless em Go: AWS Lambda com 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

Funções Serverless em Go: AWS Lambda — Guia Completo



A arquitetura Serverless continua ganhando popularidade entre os desenvolvedores devido à sua escalabilidade, redução de custos operacionais e ausência da necessidade de gerenciar servidores. AWS Lambda é um dos líderes nesta área. E se combinarmos o poder do serverless com o desempenho e a simplicidade do Go (Golang)? Neste artigo, vamos explorar como criar, configurar e fazer deploy de funções serverless em Go para AWS Lambda. Você aprenderá sobre as vantagens desta abordagem, escreverá sua primeira função e receberá dicas práticas de otimização.



Por que Go (Golang) é ideal para AWS Lambda?



A escolha da linguagem de programação para funções serverless é crucial. Go (Golang) possui várias vantagens únicas que o tornam um dos melhores candidatos para trabalhar com AWS Lambda:



  • Cold start rápido: Ao contrário de linguagens interpretadas (Python, Node.js), Go é compilado em um arquivo binário nativo. O tempo de inicialização (cold start) é medido em milissegundos, o que é crítico para APIs e microsserviços.
  • Baixo consumo de memória: Aplicações Go são leves e usam memória de forma eficiente, impactando diretamente o custo de execução das funções (você paga pela memória alocada).
  • Simplicidade de deploy: Você compila um único arquivo binário, faz upload para AWS Lambda, e ele funciona sem dependências externas (além da biblioteca padrão). Sem ambientes virtuais ou node_modules.
  • Alta performance: Go é uma linguagem compilada com suporte nativo a concorrência (goroutines). Isso permite processar milhares de requisições dentro de uma única função Lambda sem sobrecarga significativa.
  • Excelente integração com AWS SDK: O AWS SDK oficial para Go (v2) fornece clientes convenientes e tipados para todos os serviços AWS.


Criando sua primeira função Serverless em Go para AWS Lambda



Vamos escrever uma função simples que processa uma requisição HTTP através de AWS Lambda Function URL ou API Gateway. Para isso, precisaremos do pacote github.com/aws/aws-lambda-go.



Passo 1: Inicialização do projeto e instalação de dependências



mkdir my-lambda-gocd my-lambda-gogo mod init my-lambda-gogo get github.com/aws/aws-lambda-go/lambdago get github.com/aws/aws-lambda-go/events


Passo 2: Código da função (main.go)



Esta função receberá uma requisição JSON com o nome do usuário e retornará uma saudação.



package main

import (\t"context"\t"encoding/json"\t"fmt"\t"log"

\t"github.com/aws/aws-lambda-go/events"\t"github.com/aws/aws-lambda-go/lambda")

// Request struct para requisição de entradatype Request struct {\tName string `json:"name"`}

// Response struct para respostatype Response struct {\tMessage string `json:"message"`}

func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {\tvar req Request

\t// Parse do corpo da requisição\tif err := json.Unmarshal([]byte(request.Body), &req); err != nil {\t\tlog.Printf("Error parsing request: %v", err)\t\treturn events.APIGatewayProxyResponse{\t\t\tStatusCode: 400,\t\t\tBody: `{"error":"Invalid JSON"}`,\t\t\tHeaders: map[string]string{"Content-Type": "application/json"},\t\t}, nil\t}

\t// Formata a resposta\tmessage := fmt.Sprintf("Hello, %s! Welcome to Serverless Go.", req.Name)\tresp := Response{Message: message}

\tjsonResp, _ := json.Marshal(resp)

\treturn events.APIGatewayProxyResponse{\t\tStatusCode: 200,\t\tBody: string(jsonResp),\t\tHeaders: map[string]string{"Content-Type": "application/json"},\t}, nil}

func mai

Blogs

Book Recommendations