Introdução ao Serverless e AWS Lambda em C#
A arquitetura Serverless (computação sem servidor) é um modelo de desenvolvimento onde o desenvolvedor foca exclusivamente no código da lógica de negócio, enquanto a infraestrutura (servidores, escalabilidade, monitoramento) é gerenciada pelo provedor de nuvem. AWS Lambda é um dos serviços mais populares para implementar funções serverless e oferece excelente suporte ao ecossistema .NET.
Neste artigo, abordaremos o ciclo completo de trabalho com AWS Lambda em C#: desde a criação do projeto até o deploy e depuração. Você aprenderá como configurar o ambiente, escrever uma função eficiente, processar eventos e evitar erros comuns. O material é voltado para desenvolvedores C# que desejam dominar a abordagem serverless na Amazon Web Services.
1. Configuração do ambiente e criação do primeiro projeto
Instalação das ferramentas
Para trabalhar com AWS Lambda em C#, você precisará de:
- .NET SDK versão 6.0 ou 8.0 (recomenda-se a versão LTS mais recente).
- AWS CLI — interface de linha de comando para gerenciar serviços AWS.
- Amazon.Lambda.Templates — conjunto de modelos para .NET CLI.
- Docker Desktop (opcional) — para teste local com emulação do Lambda.
Instale os modelos Lambda via terminal:
dotnet new -i Amazon.Lambda.TemplatesCriação do projeto
Crie uma nova função Lambda com o comando:
dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambdaA estrutura do projeto inclui o arquivo Function.cs com a classe base Function e o método manipulador. Por padrão, é usado um modelo para uma função simples que recebe e retorna uma string.
Abra o arquivo Function.cs e altere-o da seguinte forma:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(string input, ILambdaContext context) { context.Logger.LogInformation($"Entrada recebida: {input}"); return $"Olá, {input}! Sua função foi executada com sucesso."; }}Teste local
Para executar a função localmente, use a ferramenta dotnet lambda invoke ou o emulador Lambda Runtime Interface Emulator (RIE) no Docker. Exemplo com RIE:
docker run --rm -v "$PWD/bin/Release/net8.0/publish":/var/task:ro,delegated \ -p 9000:8080 \ public.ecr.aws/lambda/dotnet8:latest \ MyFirstLambda::MyFirstLambda.Function::FunctionHandlerEnvie uma requisição de teste via curl:
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -d '"Mundo"'2. Processamento de diferentes tipos de eventos
Trabalhando com API Gateway (requisições HTTP)
Frequentemente, o Lambda é usado como backend para APIs REST através do Amazon API Gateway. Nesse caso, o manipulador recebe um objeto APIGatewayProxyRequest e retorna um APIGatewayProxyResponse.
Instale o pacote NuGet:
dotnet add package Amazon.Lambda.APIGatewayEventsExemplo de função manipuladora de requisição HTTP POST:
using Amazon.Lambda.APIGatewayEvents;using System.Text.Json;
public class Function{ public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { context.Logger.LogInformation($"Requisição recebida: {request.HttpMethod} {request.Path}");
// Análise do corpo da requisição var body = JsonSerializer.Deserialize<Dictionary<string, string>>(request.Body); var name = body?.GetValueOrDefault("name") ?? "Convidado";
//