Funções Serverless em C#: Guia Completo para AWS Lambda com .NET
A arquitetura Serverless está se tornando o padrão para aplicações modernas. AWS Lambda é um dos serviços mais populares para executar código sem gerenciar servidores. Neste artigo, vamos explorar como criar funções serverless em C# usando .NET 6/8, configurar o ambiente, escrever código eficiente e implantá-lo na nuvem.
O que é AWS Lambda e por que C#?
AWS Lambda é um serviço de computação que executa seu código em resposta a eventos e gerencia automaticamente os recursos computacionais. C# com .NET é uma excelente escolha para Lambda devido a:
- Alta performance — .NET 6+ proporciona uma inicialização a frio rápida (cerca de 200-500 ms).
- Sintaxe familiar — se você já programa em C#, a curva de aprendizado é mínima.
- Ecossistema rico — todas as bibliotecas NuGet estão disponíveis.
- Integração com AWS — o SDK para .NET permite trabalhar facilmente com S3, DynamoDB, SQS e outros serviços.
Funções serverless em C# são ideais para processamento de arquivos, REST APIs (via API Gateway), processos ETL e microsserviços.
Configuração do projeto para AWS Lambda em C#
Para começar, você precisará de:
- .NET SDK 6.0 ou superior
- Uma conta AWS
- AWS CLI (recomendado)
- Ferramenta
dotnet lambda(instalada viadotnet tool install -g Amazon.Lambda.Tools)
Vamos criar um novo projeto:
dotnet new lambda.EmptyFunction --name MyFirstLambdacd MyFirstLambdaA estrutura do projeto inclui:
Function.cs— arquivo principal com a lógica.aws-lambda-tools-defaults.json— configurações de deploy.MyFirstLambda.csproj— arquivo do projeto com os pacotes necessários.
Certifique-se de que o .csproj tenha referências aos pacotes:
<PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /><PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />Escrevendo a primeira função serverless em C#
Vamos abrir o Function.cs e escrever um handler simples que recebe um nome e retorna uma saudação:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(Input input, ILambdaContext context) { context.Logger.LogInformation($"Processando requisição para: {input.Name}"); return $"Olá, {input.Name}! Hora: {DateTime.UtcNow}"; }}
public class Input{ public string Name { get; set; }}Vamos analisar os pontos-chave:
LambdaSerializer— especifica como serializar/desserializar JSON.SystemTextJsoné uma opção rápida e moderna.ILambdaContext— fornece informações sobre a chamada atual: tempo restante, logger, ID da requisição.Input— uma classe POCO simples para os dados de entrada.
Para testar localmente, use:
dotnet lambda invoke-function MyFirstLambda --payload "{\\"Name\\": \\"Mundo\\"}"Trabalhando com serviços AWS a partir do Lambda
O verdadeiro poder das funções serverless em C# se revela na integração com outros serviços. Vejamos um exemplo de upload de arquivo para o S3:
using Amazon.S3;using Amazon.S3.Model;using Amazon.Lambda.Core;
public class S3Function{ private readonly IAmazonS3 _s3Client; public S3Function() { _s3Client = new AmazonS3Client(); // usa a IAM role do Lambda }
```