Dev (Back & Front)ARTIGO

Criando e publicando uma Lambda Function em Go na LocalStack

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

Criando e publicando uma Lambda Function em Go na LocalStack
Imagem: Thiago Adriano

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:

c
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

Thiago AdrianoAutor

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.

Ver perfil