Criando e publicando Api .Net 6 com trigger via controller para AWS Lambda (usando GitHub Actions)

Leonardo Bombilio Goncalves
9 min readNov 1, 2022

--

O que é AWS Lambda

Vamos começar do começo, Lambda é um serviço de nuvem em formado ondemand, isso significa que você paga literalmente o quanto precisar usar, mas como assim ? poise o Lambda ou serviços como o Lambda como a Function da Azure ou o Google Function do Google Cloud sempre terão um trigger/gatilho que ira fazer um input de dados ou somente acordar a aplicação para que ela execute o que foi programado que ela execute, pode ser no acaso da AWS um arquivo novo no S3 (sistema de armazenamento da AWS) ou até a Alexa SIIMMM uma skill da alexa pode acordar seu Lambda.

O dimensionamento da Lambda é totalmente feito pela Amazon ou seja se você tiver 10 milhões de requisições para sua lambda é os servidores da Amazon que terá a responsabilidade de aumentar o numero de serviços rodando para atender as suas requisições, e o valor é cobrado por tempo de utilização do Lambda fazendo ele um dos tipos mais baratos para aplicações.

Pré-requisitos para começarmos a criação do projeto

A Amazon fornece uma extensão para o Visual Studio que auxilia e muito o processo de criação de funções Lambda então temos de ter instalados os seguintes:

  1. Instalar Visual Studio aqui
  2. Instalar a Extensão da Amazon aqui

Feito isso vamos começar !!!

Criando o Projeto

Abra seu Visual Studio e Clique em Criar Novo Projeto/ Create New Project

Agora irá ver que novas opções aparecem como template isso por que a extensão da AWS para o Visual Studio as trouxe para facilitar nossa vida vamos escolher a AWS Serverless Application (.Net Core — C#)

Logo após escolher o nome da aplicação você terá estas escolhas

Veja que a extensão tras dezenas de templates para o Lambda porém como estamos fazendo uma API vamos seguir com a opção:

Pronto já temos uma template criada para Lambda com um trigger via controller:

Pré-Requisito para publicação

Se você não criou um usuário do IAM, siga este link para criar um usuário do IAM e este passo a passo:

Se ainda não tem um grupo de usuários crie um

Após criar o usuário copie ID de chave de Acesso, Chave de acesso secreta e senha e os guarde em um bloco de notas por que vamos utilizar nas publicações

Publicando na AWS de Forma local

Agora com sua template criada e usuário IAM também, a publicação na AWS Lambda pode ser feito dessa forma:

Volte ao Visual Studio e Clique em Extensions -> AWS Toolkit -> Getting Started

Agora preencha a AccesKey e Secret Key que você guardou no passo anterior

Clique em Save and Close

Agora clique com o botão direito em seu projeto e escolha Publich to AWS Lambda

Escolha um nome para StackName

Crie um novo bucket s3 caso ainda não tenha um

Agora sim clique em publish e espere a magica acontecer …

Criado com sucesso

para chamar a api copie a AWS Serverless URL e coloque sua rota e pronto :

Publicando com GitHub Actions

Bom o Github oferece esteira de deploy gratuita para quem utiliza sua ferramenta de gerenciamento, subi meu código para o GitHub o link caso queiram esta aqui https://github.com/LeonardoGonSantos/ProjectExampleLambdaFunction

podem entrar para dar uma olhada caso queiram, bom após isso o conceito de ter uma esteira de deploy é sempre que uma atualização ocorrer dentro de uma branch especifica ele pode publicar automaticamente sua solução para a nuvem, digamos que a branch master é nossa branch principal a qual deve sempre estar publicada no ambiente produtivo, agora toda vez que a branch master receber um commit, através de pull Request ou de um commit direto você quer que sua aplicação seja “buildada”, tenha sua imagem publicada na AWS Lambda para que possa ser executada em ambiente produtivo ou de testes, bom esclarecido os passos vamos a mão na massa.

Criando Esteira de deploy

Ao entrar em seu projeto no github com seu codigo já “hospedado” lá, clique em Actions

Nesta aba do menu, tem todas as execuções do GithubActions que são as esteiras de deploy, agora para criar uma nova esteira clique em “New Workflow”

No nosso caso estamos criando uma esteira de deploy para .Net então o GitHub tem algumas opções pre prontas para build .net, por isso procure por .net e clique em “Configure”

Agora o GitHub criou um arquivo para você com a extensão yml, é um padrão para desenvolvimento de esteiras de deploy, builds automatizados entre outros tipos de atividades bom vamos analisar o arquivo criado

Esta primeira parte diz respeito a qual branch será o trigger da nossa esteira, então se sua branch não tiver nome de master mas sim de main altere este nome

Esta parte diz respeito ao build da nossa solução, caso seu projeto não seja .net 6 altere a versão para a qual você usa em “dotnet-version:”, você pode reparar que se esta habtuado a usar o .net cli conhecera os comandos empregados ali como “dotnet restore”, “dotnet build — no-restore” enfim ele esta rodando o cli do dotnet para poder executar o build da nossa solução

E por fim o GitHub deixa uma etapa para testes unitários , caso seu projeto tenha deixe essa parte porém como estou realizando um exemplo vou retirar da pipe

Feito a parte de build do .net vamos para a publicação na AWS tem uma biblioteca aberta que pode nos ajudar nesse deploy “Amazon.Lambda.Tools” por isso vamos instalar ela para que possamos usar suas funcionalidades para o deploy na AWS fazemos isso dessa forma:

Agora temos a ferramenta para utilizar ela tem vários comandos e funcionalidades porém a que vamos usar é para deploy na AWS Lambda dessa forma

este comando espera algumas variáveis as quais são:

— region “deve ser colocado a region onde esta sua function lambda”

— s3-bucket “nome da sua instancia s3 onde será armazenado a imagem da sua solução”

o bucket deve estar na mesma região que a lambda

— function-name “o nome que você quer que tenha sua function na aws”

Feito isso agora você precisa colocar as credenciais de acesso IAM para que possa ter permissão para publicar, se você ainda não criou veja que temos uma seção neste artigo ensinando isso com o nome de Pre Requisitos para publicação bom agora vamos adicionar essas duas linhas

essa variável que será incluída no ambiente de publicação ou seja na hora que você rodar sua esteira de deploy contem as chaves de publicação sua ACCES KEY ID e a SECRET ACCES KEY que de novo salvamos na etapa de Pre Requisitos para publicação p esta forma irá pegar os valores das secrets que você tem configurado no seu github actions e dessa forma somente você tem acesso a elas não ficam expostas em seu repositório vamos criar elas:

Vá em Settings

Agora clique em Secrets

Depois em Actions

Clique em New Repository Secret

Agora sim vamos criar primeiro a “AWS_ACCESS_KEY_ID” e depois cole o valor dela em baixo assim:

Clique em add Secret e agora vamos adicionar a outra -> New Repository Secret novamente e agora é a vez da segunda variável “AWS_SECRET_ACCESS_KEY” e depois cole o valor dela assim:

feito isso sua pipe esta configurada, e seu arquivo yml deve ter ficado dessa forma:

OBS: não esqueça de após criar seu arquivo clicar em commit changes

Bom feito isso agora hora de ver a magica acontecer no menu Actions

temos todas as publicações já executadas e agora tem que ter uma acontecendo ou já executada em seu historico pois o seu commit do arquivo yml cria um commit na master p qual é um trigger para sua esteira de deploy então deve ter algo assim aqui:

Clique nele

agora em build

Nesta pagina você tem todos os logs do que esta acontecendo

Na aba deploy lambda

Logo no final

Após finalizar a publicação tem a url da nossa aplicação colocando ela no postman e fazendo um get em nosso end point a function será acordada e terá a resposta do end point

Muito obrigado por ter lido até aqui e espero ter ajudado, mas caso não ou tenha alguma duvida pode abrir uma issue em meu repo no gitHub ou um comentário aqui tento te ajudar da maneira que puder.

Caso tenha curiosidade para ver os outros comandos o repo no git para a ferramenta de deploy é https://github.com/aws/aws-extensions-for-dotnet-cli, tem deploy para ECS, ElasticBeanstalk e Lambda.

--

--

Leonardo Bombilio Goncalves

Back-End a 8 anos tenho uma vasta experiência com soluções financeiras e sou movido por compartilhar conhecimento e desafios profissionais