Funções Serverless em C#: AWS Lambda de A a Z — guia completo

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: Por que Serverless e C# são a combinação ideal

\n

A arquitetura Serverless (ou computação sem servidor) é um modelo no qual você escreve código sem se preocupar com o gerenciamento de servidores. AWS Lambda é um dos serviços mais populares para executar esse tipo de código. Em conjunto com C# (.NET), você obtém uma ferramenta poderosa, type-safe e de alto desempenho para criar microsserviços, manipuladores de API e tarefas em segundo plano.

\n

Neste artigo, abordaremos todo o percurso: desde a configuração do ambiente até o deploy e monitoramento da sua primeira função em C# no AWS Lambda. O material é adequado tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.

\n\n

1. Preparação do ambiente e criação do projeto

\n

1.1 Instalação das ferramentas

\n

Para trabalhar com C# e AWS Lambda, você precisará de:

\n
    \n
  • .NET SDK (8.0 ou 6.0) — baixar em dotnet.microsoft.com;
  • \n
  • AWS CLI — para gerenciar recursos pelo terminal;
  • \n
  • Amazon.Lambda.Tools — ferramenta global .NET para deploy.
  • \n
\n

Instale o Lambda Tools com um único comando:

\n
dotnet tool install -g Amazon.Lambda.Tools
\n\n

1.2 Criação do template da função

\n

Use o template embutido para um início rápido:

\n
dotnet new lambda.EmptyFunction --name MyFirstLambda --profile default --region us-east-1
\n

Este comando criará um projeto com o arquivo Function.cs e aws-lambda-tools-defaults.json para configurações de deploy.

\n\n

2. Escrita do código da função Serverless em C#

\n

2.1 Estrutura básica de uma função Lambda

\n

Cada função Lambda é um método que recebe um objeto de evento e um contexto de execução. Vejamos um exemplo simples:

\n
using Amazon.Lambda.Core;\nusing Amazon.Lambda.SQSEvents;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n    public async Task<string> FunctionHandler(SQSEvent evnt, ILambdaContext context)\n    {\n        context.Logger.LogInformation("Mensagens recebidas: " + evnt.Records.Count);\n        \n        foreach (var record in evnt.Records)\n        {\n            await ProcessMessageAsync(record.Body, context);\n        }\n        \n        return "Processadas " + evnt.Records.Count + " mensagens";\n    }\n\n    private async Task ProcessMessageAsync(string messageBody, ILambdaContext context)\n    {\n        context.Logger.LogInformation("Processando: " + messageBody);\n        await Task.Delay(100); // Simulação de trabalho\n    }\n}
\n

Observe o atributo LambdaSerializer — ele indica como serializar/desserializar JSON. Para C#, recomenda-se SystemTextJson.

\n\n

2.2 Trabalhando com diferentes triggers

\n

AWS Lambda suporta várias fontes de eventos. Aqui está um exemplo para requisição HTTP via API Gateway:

\n
public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)\n{\n    var name = request.QueryStringParameters?.ContainsKey("name") == true \n        ? request.QueryStringParameters["name"] \n        : "mundo";\n    \n    var responseBody = $"Olá, {name}!";\n    \n    return new APIGatewayProxyResponse\n    {\n        StatusCode = 200,\n        Body = responseBody,\n        Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }\n    };\n}
\n

Para trabalhar com HTTP, será necessário instalar o pacote Amazon.Lambda.APIGatewayEvents.

\n\n

3. Deploy e teste da função

\n

3.1 Teste local

\n

Antes do deploy, verifique o código localmente com dotnet lambda invoke:

\n
dotnet lambda invoke --payload "{\\"Records\                

Blogs

Book Recommendations