DEV Community

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

Posted on

2

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!

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

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.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more