Exemplo prático de uma AWS Lambda em .NET 8 (C#) executando no LocalStack e gerenciada pelo Serverless Framework.
- projeto:
HelloLambda
(handlerHelloLambda::HelloLambda.Function::FunctionHandler
) - empacotamento:
make package
(geraartifacts/HelloLambda.zip
) - deploy local:
npx sls deploy -s local
(usa o pluginserverless-localstack
) - invocação: via Serverless (
sls invoke
) ou AWS CLI apontando parahttp://localhost:4566
- endpoint HTTP: API Gateway emulado no LocalStack, rota
POST /hello
- Docker e/ou LocalStack CLI
- .NET SDK 8 instalado (
dotnet --version
) - Node.js e npm (
node -v
,npm -v
) - AWS CLI (
aws --version
)
cd /Users/thiagoadriano/fiap/serverless/aula2/lambda
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
- Com LocalStack CLI:
localstack start -d
- Health básico do LocalStack:
curl -s http://localhost:4566/health | jq .
npm init -y
npm i -D serverless serverless-localstack
make package
Saída esperada: artifacts/HelloLambda.zip
(gerado via dotnet publish
).
npx sls deploy -s local
Irá criar a função Lambda e o endpoint HTTP (API Gateway emulado).
npx sls info -s local
Procure por endpoints:
e copie a URL. Teste com:
curl -s -X POST "<URL_DO_ENDPOINT>/hello" \
-H "Content-Type: application/json" \
-d '{"Name":"Thiago"}' | jq .
- Via Serverless (inline):
npx sls invoke -f hello -s local --data '{"Name":"Thiago"}'
- Via Serverless (arquivo):
echo -n '{"Name":"Thiago"}' > /tmp/event.json
npx sls invoke -f hello -s local --path /tmp/event.json
- Via AWS CLI (direto na Lambda):
echo -n '{"Name":"Thiago"}' > /tmp/event.json
aws --endpoint-url http://localhost:4566 lambda invoke \
--function-name hello-dotnet \
--payload fileb:///tmp/event.json \
/tmp/hello-out.json && cat /tmp/hello-out.json
Observação: com AWS CLI use fileb://
no --payload
para evitar erro de Base64.
- Listar Lambdas:
aws --endpoint-url http://localhost:4566 lambda list-functions | jq .
/Users/thiagoadriano/fiap/serverless/aula2/lambda
├─ HelloLambda/
│ ├─ HelloLambda.csproj
│ └─ Function.cs
├─ artifacts/ # (gerado pelo make package)
│ └─ HelloLambda.zip
├─ serverless.yml
├─ Makefile
└─ README.md
- Request:
{ "Name": "Thiago" }
- Response (exemplo):
{
"Message": "Olá, Thiago! Sua função .NET 8 na AWS Lambda está rodando no LocalStack.",
"TimestampUtc": "2025-08-20T00:16:20.7937422Z"
}
- "Invalid base64" ao invocar com AWS CLI: use
--payload fileb:///caminho/para/arquivo.json
. - Plugin não encontrado:
npm i -D serverless-localstack
. - Porta ocupada: verifique se a
4566
está livre; ajusteedgePort
noserverless.yml
se necessário. - Credenciais: exporte
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
eAWS_DEFAULT_REGION
. - Arquitetura/Runtime: este projeto usa
dotnet8
. Se notar erro de arquitetura, podemos ajustararchitectures
noserverless.yml
.