Go Golang

3 fev, 2025

Criando e publicando uma Lambda Function em Go na LocalStack

Publicidade

Dando continuidade aos meus posts anteriores sobre LocalStack, hoje vou mostrar como criar uma Lambda Function em Go e publicá-la em um ambiente local que simula os serviços da AWS.

O objetivo é explorar como configurar, testar e integrar funções Lambda de maneira eficiente em um ambiente de desenvolvimento isolado, utilizando o LocalStack.

Caso tenha interesse em ler os artigos anteriores sobre este tema, segue link de cada um deles abaixo:

Go

Para o nosso exemplo prático, vamos criar uma função que calcula o retorno esperado de um investimento com base em parâmetros fornecidos pelo usuário, como valor inicial, taxa de juros e período de tempo.

Dentro do diretório que você escolheu para o seu projeto, crie um arquivo chamado main.go e atualize ele com o seguinte trecho de código:

package main

import (
 "context"

 "github.com/aws/aws-lambda-go/lambda"
)

// Estrutura de entrada
type Input struct {
 InitialAmount float64 `json:"initial_amount"` // Valor inicial
 Rate          float64 `json:"rate"`           // Taxa de juros em porcentagem
 Periods       int     `json:"periods"`        // Número de períodos
}

// Estrutura de saída
type Output struct {
 FinalAmount float64 `json:"final_amount"` // Valor final do investimento
}

// handler processa o cálculo do investimento
func handler(ctx context.Context, input Input) (Output, error) {
 // Calcular o valor final: FV = PV * (1 + i)^n
 finalAmount := input.InitialAmount * pow(1+(input.Rate/100), input.Periods)

 // Criar o output
 output := Output{
  FinalAmount: finalAmount,
 }

 return output, nil
}

// Função auxiliar para cálculo de potência
func pow(base float64, exp int) float64 {
 result := 1.0
 for i := 0; i < exp; i++ {
  result *= base
 }
 return result
}

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

Obs.: Não esqueça de executar o comando go mod tidy para importar os pacotes.

Como o foco deste post não será demostrar o código Go, eu deixei alguns comentários no exemplo anterior para facilitar o seu entendimento.

Com a função criada, o próximo passo é compilar o código para gerar o binário necessário para execução no ambiente da AWS Lambda. Para isso, execute o seguinte comando no terminal:

GOOS=linux GOARCH=amd64 go build -o main main.go

Agora vamos zipar a nossa function:

zip function.zip main

Obs.: Para os próximo passos você precisa estar com o seu ambiente configurado, caso não esteja com ele cpmfogirado ainda, recomendo a leitura do meu artigo anterior, onde demonstro este passo a passo.

Com a Localstack rodando e o seu aws cli configurado apontando para o seu ambiente local.

Execute o seguinte comando no seu terminal para publicar a sua function:

aws --endpoint-url=http://localhost:4566 lambda create-function \
    --function-name InvestmentLambda \
    --runtime go1.x \              
    --role arn:aws:iam::000000000000:role/lambda-role \
    --handler main \
    --zip-file fileb://function.zip

Analisando este comando, ele envia o código da nossa função Lambda (contido no arquivo function.zip) para o LocalStack. A função é registrada com o nome InvestmentCalculator, configurada para rodar no runtime Go, e está pronta para ser invocada em ambiente local.

Caso tenha interesse em verificar se ele foi publicado corretamente, basta acessar o Dashboard da LocalStack e acessar as suas lambdas:

Para testar este fluxo, vamos criar um arquivo .http que simula a invocação da nossa função Lambda diretamente no LocalStack.

### Invoke the Investment Lambda Function
POST http://localhost:4566/2015-03-31/functions/InvestmentLambda/invocations
Content-Type: application/json
X-Amz-CLI-Binary-Format: raw-in-base64-out

{
  "initial_amount": 1000,
  "rate": 5,
  "periods": 12
}

Executando este request na nossa function, nós temos o seguinte resultado:

Resultado ao executar a lambda function em Go

Bem simples né?

Bom, como o foco deste artigo e ser algo rápido e prático, eu finalizo ele aqui e qualquer dúvida que você tenha neste processo, deixe uma mensagem nos comentários 🙂

Até mais pessoal.

Artigo publicado originalmente em https://programadriano.medium.com/dic%C3%A1-r%C3%A1pida-criando-e-publicando-uma-lambda-function-em-go-na-localstack-48590fc4293d