Sitemap

[Dicá rápida] Criando e publicando uma Lambda Function em Go na LocalStack

3 min readNov 18, 2024

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:

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.

--

--

No responses yet