Este projeto demonstra como criar e executar uma AWS Lambda Function localmente usando LocalStack. A função baixa dados financeiros de ações utilizando a API do Alpha Vantage.
- Node.js instalado
- Docker e Docker Compose
- AWS CLI configurado
- LocalStack rodando na porta 4566
- Chave da API Alpha Vantage
Certifique-se de que o LocalStack está rodando. Se ainda não configurou, siga o guia: https://dev.to/programadriano/trabalhando-com-aws-em-um-ambiente-localhost-20i8
npm installEdite o arquivo index.js e substitua your_alpha_vantage_api_key pela sua chave real da API Alpha Vantage.
Para obter sua chave gratuita, acesse: https://www.alphavantage.co/support/#api-key
# Mac/Linux
zip -r function.zip index.js package.json node_modules/
# Windows
# Clique com botão direito na pasta e selecione "Enviar para > Pasta compactada"aws --endpoint-url=http://localhost:4566 iam create-role \
--role-name lambda-ex \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucketaws --endpoint-url=http://localhost:4566 s3 cp function.zip s3://my-bucket/function.zipaws --endpoint-url=http://localhost:4566 lambda create-function \
--function-name StockDataDownloader \
--runtime nodejs18.x \
--role arn:aws:iam::000000000000:role/lambda-ex \
--handler index.handler \
--code S3Bucket=my-bucket,S3Key=function.zipCrie o arquivo de evento (já incluído no projeto):
# event.json já existe no projeto com:
{
"symbol": "AAPL"
}Execute o teste:
aws --endpoint-url=http://localhost:4566 lambda invoke \
--function-name StockDataDownloader \
--payload file://event.json \
--cli-binary-format raw-in-base64-out \
--log-type Tail \
output.txtO resultado será salvo em output.txt.
Use o arquivo request.http incluído no projeto:
POST http://localhost:4566/2015-03-31/functions/StockDataDownloader/invocations
Content-Type: application/json
{
"symbol": "AAPL"
}No VS Code, clique em "Send Request" acima da requisição.
curl --location 'http://localhost:4566/2015-03-31/functions/StockDataDownloader/invocations' \
--header 'Content-Type: application/json' \
--data '{
"symbol": "AAPL"
}'- Abra o Postman
- Importe o cURL acima
- Execute a requisição
Acesse o dashboard do LocalStack em http://localhost:4566 e navegue até a seção Lambda para ver sua função listada.
node-lambda/
├── index.js # Código da função Lambda
├── package.json # Dependências do projeto
├── event.json # Dados de teste
├── request.http # Requisição HTTP para testes
├── output.txt # Resultado dos testes via CLI
└── README.md # Este arquivo
- Handler da Lambda: Recebe um parâmetro
symbol(código da ação) - Validação: Verifica se o parâmetro foi fornecido
- API Call: Faz requisição para Alpha Vantage API
- Resposta: Retorna os dados financeiros ou erro
AAPL- Apple Inc.GOOGL- Alphabet Inc.MSFT- Microsoft CorporationTSLA- Tesla, Inc.AMZN- Amazon.com Inc.
- Verifique se o LocalStack está rodando
- Confirme se a função foi criada corretamente
- Verifique se substituiu
your_alpha_vantage_api_keyno código - Confirme se a chave está válida no site da Alpha Vantage
- Certifique-se de que o arquivo
function.zipcontém todos os arquivos necessários - Verifique se as dependências estão incluídas (
node_modules/)
# Deletar função Lambda
aws --endpoint-url=http://localhost:4566 lambda delete-function --function-name StockDataDownloader
# Deletar bucket S3
aws --endpoint-url=http://localhost:4566 s3 rb s3://my-bucket --force
# Deletar IAM role
aws --endpoint-url=http://localhost:4566 iam delete-role --role-name lambda-ex# Recriar ZIP
zip -r function.zip index.js package.json node_modules/
# Upload para S3
aws --endpoint-url=http://localhost:4566 s3 cp function.zip s3://my-bucket/function.zip
# Atualizar função Lambda
aws --endpoint-url=http://localhost:4566 lambda update-function-code \
--function-name StockDataDownloader \
--s3-bucket my-bucket \
--s3-key function.zipAutor: Thiago S. Adriano
Baseado no artigo: Executando AWS Lambda com LocalStack