DEV Community

Cover image for Go + Github Actions + Terraform + Lambda + ARM64
Felipe Siqueira
Felipe Siqueira

Posted on

Go + Github Actions + Terraform + Lambda + ARM64

Eae, bora falar um pouco sobre Lambdas em Go?
A AWS recentemente depreciou o runtime go1.x e recomenda a todos migrarem para o provided.al2. Link
Com isso em mente resolvi criar um projetinho simples fazendo desde o Github Actions, provisionamento de infra com o Terraform e o deploy da Lambda em ARM64.

A primeira coisa que eu fiz foi criar o código da Lambda em Go. Um código bem simples apenas para printar um hello world.

main.go

Depois de criado o código da Lambda, é necessário rodar o comando para criar o módulo Go.

go mod init

Os arquivos go.mod e go.sum foram criados.
Depois de criada a Lambda, vamos partir para o Terraform.
Vamos utilizar ele para provisionar a infra do projeto.

main.tf

Repare que utilizamos o runtime provided.al2023, que é o runtime mais novo criado pela AWS e também o architecture arm64.

Depois do arquivo de terraform criado, vamos criar o Github Actions para funcionar como nosso CI/CD.
Crie um arquivo chamado pipeline.yml dentro da pasta .github/workflows.

Como vamos usar uma Lambda em ARM64, temos algumas peculiaridades no momento de fazer o build. Temos que passar as variáveis GOOS=linux GOARCH=arm64.

Github Actions

Agora no job de deploy vamos fazer o terraform init, format check, validate, plan e apply, para validar se tudo está correto e realmente provisionar a infra.

Github Actions

Outro ponto importante, para conseguirmos fazer todo o provisionamento na AWS precisamos passar para o Terraform algumas chaves de acesso. Como não é nada recomendado deixar as chaves no arquivo do Actions, Eu acabei deixando elas no secret do Github.

Github Actions

Depois do push com as alterações a pipeline vai ficar assim:

Github Actions

Github Actions

Github Actions

Caso tudo funcione perfeitamente(eu sei, eu sei... nada funciona de primeira rsrs) a Lambda será criada na AWS.

AWS Lambda

E... voilà, Lambda funcionando!

Todo o código está nesse repo: https://github.com/FRSiqueiraBR/go-terraform-lambda

Criei essa Lambda pra usar de base para outros projetos pessoais, esperam que tenham gostado, deixem sugestões e melhorias nos comentários ✋. Bye!

Top comments (2)

Collapse
 
leonardossev profile image
Leonardo Santos

Curti que vai direto ao ponto! Vou deixar como referência para futuros projetos e futuros estudos! Valeu por compartilhar, mano!!

Collapse
 
luizdaniel profile image
Luiz Daniel

Muito bom e direto. Curti demais. Parabéns.