Funções Serverless em C# no AWS Lambda: Guia Completo do Início ao Fim

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.Templates


Criação do projeto

Crie uma nova função Lambda com o comando:

dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambda


A 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::FunctionHandler


Envie 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.APIGatewayEvents


Exemplo 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";

//

Blogs

Book Recommendations