Start Debugging

AWS Lambda suporta .NET 10: o que verificar antes de virar o runtime

AWS Lambda agora suporta .NET 10, mas a atualização do runtime não é a parte difícil. Aqui está um checklist prático cobrindo cold starts, trimming, native AOT e formato de deploy.

O suporte do AWS Lambda para .NET 10 está começando a aparecer nos canais da comunidade hoje, e é o tipo de mudança que parece “feito” até você bater em cold starts, trimming ou uma dependência nativa em produção.

Discussão original: r/dotnet thread

O suporte de runtime é a parte fácil; o formato do seu deploy é a parte difícil

Mover um Lambda de .NET 8/9 para .NET 10 não é só um bump de target framework. O runtime que você seleciona dirige:

Se você quer .NET 10 principalmente por desempenho, não assuma que a atualização do runtime do Lambda é a vitória. Meça cold starts com seu handler real, dependências reais, variáveis de ambiente reais e configuração de memória real.

Um handler mínimo de Lambda em .NET 10 que você pode fazer benchmark

Aqui está um pequeno handler que é fácil de fazer benchmark e fácil de quebrar com trimming. Ele também mostra um padrão que eu gosto: manter o handler minúsculo, empurrar tudo o mais para trás de DI ou caminhos de código explícitos.

using Amazon.Lambda.Core;

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

public sealed class Function
{
    // Use a static instance to avoid per-invocation allocations.
    private static readonly HttpClient Http = new();

    public async Task<Response> FunctionHandler(Request request, ILambdaContext context)
    {
        // Touch something typical: logging + a small outbound call.
        context.Logger.LogLine($"RequestId={context.AwsRequestId} Name={request.Name}");

        var status = await Http.GetStringAsync("https://example.com/health");
        return new Response($"Hello {request.Name}. Upstream says: {status.Length} chars");
    }
}

public sealed record Request(string Name);
public sealed record Response(string Message);

Agora publique de uma forma que combine com seu caminho de produção pretendido. Se você está testando trimming, deixe explícito:

dotnet publish -c Release -f net10.0 -p:PublishTrimmed=true

Se você planeja ir mais fundo em native AOT no .NET 10, publique dessa forma também, e valide se suas dependências são realmente compatíveis com AOT (serialização, reflection, libs nativas).

Um checklist prático para o primeiro rollout do .NET 10

Se você quer um primeiro passo seguro, atualize o runtime para .NET 10 e mantenha sua estratégia de deploy a mesma. Uma vez que esteja estável, experimente com trimming ou AOT em uma branch, e só publique quando seu monitoramento disser que está chato.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Voltar