top of page

Coffee and Tips Newsletter

Inscreva-se na nossa newsletter semanal

Nos vemos em breve!

Guia Completo: Como Criar e Testar uma AWS Lambda Localmente com AWS SAM

Foto do escritor: JPJP

Lambda AWS SAM
Lambda com AWS SAM

Rodando AWS Lambda Localmente com AWS SAM


A AWS Lambda é um serviço de computação serverless que permite executar código sem a necessidade de provisionar servidores. No entanto, testar funções Lambda diretamente na AWS pode ser demorado e custoso, pois cada alteração exige um novo deploy. Para resolver esse problema, podemos rodar e testar a Lambda localmente usando a ferramenta AWS SAM (Serverless Application Model).


Testar localmente ajuda a:


  • Reduzir o tempo de desenvolvimento, evitando a necessidade de múltiplos deploys.


  • Depurar problemas mais rapidamente, já que podemos inspecionar logs localmente.


  • Simular interações com serviços AWS, como API Gateway, DynamoDB, entre outros.


Para resolver esses problemas, a AWS disponibiliza o AWS SAM (Serverless Application Model), uma ferramenta que permite rodar e testar Lambdas localmente antes de implantá-las na nuvem.


O AWS SAM:


  1. Emula o ambiente da AWS no seu computador, permitindo testes rápidos.

  2. Oferece suporte a interações com API Gateway, DynamoDB, S3 e outros serviços da AWS.

  3. Facilita a depuração e logs locais, tornando o desenvolvimento mais eficiente.

  4. Permite modificações e reexecução da Lambda sem necessidade de novos deploys.


Neste guia, você aprenderá a criar uma AWS Lambda do zero, testá-la localmente com AWS SAM e, opcionalmente, fazer o deploy para a AWS.



Passo 1: Como instalar


Instalação no Linux


Para instalar o AWS SAM no Linux, siga os passos abaixo:


  1. Baixar e instalar o SAM CLI


  1. Extrair o arquivo baixado

unzip aws-sam-cli-linux-x86_64.zip -d sam-installation

  1. Mover para o diretório correto e dar permissão de execução

sudo mv sam-installation /usr/local/aws-sam-cli
sudo ln -s /usr/local/aws-sam-cli/bin/sam /usr/local/bin/sam

  1. Verificar se a instalação foi bem-sucedida

sam --version

Instalação no macOS

brew install aws/tap/aws-sam-cli

Instalação no Windows


Baixe o instalador no site oficial da AWS e siga as instruções.



Passo 2: Criando um novo projeto AWS Lambda usando AWS SAM


Criando o projeto


Abra um terminal e execute o comando abaixo:

sam init

  1. Escolha a fonte do template:


Isso iniciará um assistente interativo. Selecione a opção 1 - AWS Quick Start Templates dentre as opções abaixo:

Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location

  1. Escolha um template:


    Selecione 1 - Hello World Example (ideal para começar com uma Lambda simples) dentre as opções abaixo:

Choose an AWS Quick Start application template 

1 - Hello World Example 
2 - Multi-step workflow 
3 - Serverless API
4 - Scheduled task 
5 - Infrastructure event management 
6 - Lambda Response Streaming 
7 - Multi-service API 
8 - Serverless Connectors 
9 - GraphQL DynamoDB API 
10 - Hello World Example with Powertools


  1. Escolha linguagem e empacotamento:

Use the most popular runtime and package type? (Python and zip) [y/N]:

Digite y para manter Python como linguagem e zip como empacotamento.


Ao digitar y e confirmar, a seguinte pergunta será feita:

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]:

Para o nosso tutorial, não precisaremos habilitar esta função, por isso digite N e prossiga.

4. Habilitar CloudWatch Insights?

Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:

Esta etapa é sobre habilitar o CloudWatch Insights, neste caso fica a seu critério. CloudWatch é uma ferramenta poderosa da AWS de observabilidade importante para entender os comportamentos das aplicações. Temos que tomar cuidado com custos extras que podem vir em caso de habilitar ferramentas como estas.


A ideia aqui do tutorial é apenas mostrar da maneira mais simples de como criar um Lambda e testa-lo localmente, então sugiro digitar N para não usar esta funcionalidade neste momento.


5. Criando o nome do Projeto


Digite o nome do projeto que você deseja criar.

Project name [sam-app]:

Pronto, após digitar e confirmar, uma pasta com o nome do projeto será criada. No meu caso, o meu projeto se chamará lambda-local. Veja a estrutura de arquivos que foi criado:


├── events

│   └── event.json

├── hello_world

│   ├── app.py

│   ├── __init__.py

│   └── requirements.txt

├── __init__.py

├── README.md

├── samconfig.toml

├── template.yaml

└── tests

├── __init__.py

├── integration

│   ├── __init__.py

│   └── test_api_gateway.py

├── requirements.txt

└── unit

├── __init__.py

└── test_handler.py


Não iremos explicar o que são todos estes arquivos, mas iremos alterar o arquivo hello_world/app.py .


Passo 3: Escrever a Função Lambda


Abra o arquivo hello_world/app.py e adicione o código abaixo:

import json

def lambda_handler(event, context):
	return {
		"statusCode": 200,
		"body": json.dumps({"message": "Hello, AWS Lambda is 	running locally!"})
}

Passo 4: Testar a Lambda Localmente


Agora que temos a função pronta, podemos testá-la sem precisar fazer deploy.


Pelo terminal, acesse a pasta onde o projeto foi criado e execute o seguinte comando:

sam local invoke HelloWorldFunction

Isso simula uma execução da Lambda e retorna a seguinte saída esperada:

{
	"statusCode": 200,
	"body": "{\"message\": \"Hello, AWS Lambda is running locally!\"}"
}

Testar a Lambda via API Gateway Local


Podemos expor a Lambda como uma API local para testá-la com chamadas HTTP.


  1. Inicie o servidor local

sam local start-api


  1. Executando via curl


Agora, abra um navegador ou use curl para testar:

curl http://127.0.0.1:3000/hello

O retorno esperado será:

{
	"message": "Hello, AWS Lambda is running locally!"
}

Massa demais, é possível transformar o Lambda em uma API e rodar localmente!


  1. Alterar o código


Agora que você sabe como funciona, você pode alterar o código e simplesmente invocar o Lambda novamente já alterado ou iniciar novamente o serviço caso queira usar a API.


Passo 5: Deploy do Lambda


Como última etapa, podemos subir o AWS Lambda para AWS tornando um recurso produtivo. Para isso é necessário você já ter uma conta criada e caso não tenha, a AWS oferece contas gratuitas visando que você aprenda mais sobre as ferramentas gratuitamente. Acesse este link para criar. Mesmo que seja gratuita, é de grande importância que você tome bastante cuidado com esta conta e siga todas as boas práticas para a criação da conta e procure sempre apagar cada recurso após criado, caso seja só para testes.


Vamos lá, caso tenha a conta criada. Vamos configurar as credenciais, acesse o terminal e digite o comando abaixo:

aws configure

Após digitar, você precisará preencher com os dados das suas chaves de acesso:

AWS Access Key ID [****************V66Z]:
AWS Secret Access Key [****************DlN7]:

Caso você não tenha estas chaves de acesso, basta acessar o link da AWS com o passo a passo.


Após preenchido, basta rodar o seguintes comandos abaixo:

sam build
sam deploy --guided

Você deverá fazer algumas confirmações até finalizar, mas nada sem muito segredo, bem simples. Veja o Lambda criado na AWS:

Console AWS Lambda
Console AWS Lambda

Perceba que como gatilho, o API Gateway foi incorporado, habilitando o funcionamento do Lambda como uma API, caso queira usar.

Passo 6: Testando o Lambda


Para testar é bem simples, no próprio console da AWS na aba Testar, você consegue executar o Lambda facilmente.

Lambda Teste

Resultado do teste:

Lambda Teste

Passo 7: Apagando o Lambda


Caso os testes já tenham finalizado, é importante remover o Lambda para evitar cobranças futuras.

Existem algumas forma de remover o Lambda, ou seja, diretamente no painel do serviço do Lambda ou pelo CloudFormation, que é o serviço de provisionamento de recursos da AWS. Caso queira entender mais sobre este recurso, acesse o post Criando recursos utilizando CloudFormation.


Neste caso, o AWS SAM utilizou o CloudFormation para criar o Lambda na AWS, por isso é melhor apagar o recurso pelo próprio CloudFormation. Na AWS, busque por CloudFormation e irá aparecer os recursos criados ou stacks (pilhas), assim como é chamado cada recurso criado via CloudFormation.

Console CloudFormation
Console CloudFormation

Apagando pelo CloudFormation, garantimos que qualquer recurso além do próprio Lambda como roles e etc serão removidos.

 

Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal!


Não perca nossas dicas exclusivas de Tech e Data!



Receba semanalmente:

  • Tutoriais práticos e diretos sobre Engenharia de Software e Dados

  • Insights de tecnologia e notícias da semana

 

Comments


bottom of page