Start Debugging

AWS Lambda が .NET 10 をサポート: ランタイムを切り替える前に検証すべきこと

AWS Lambda は今や .NET 10 をサポートしますが、ランタイムのアップグレードは難しい部分ではありません。ここにコールドスタート、トリミング、Native AOT、デプロイ形態をカバーする実践的なチェックリストがあります。

.NET 10 に対する AWS Lambda のサポートは今日コミュニティチャネルに現れ始めており、コールドスタート、トリミング、本番でのネイティブ依存に当たるまでは「完了」に見えるタイプの変更です。

ソースのディスカッション: r/dotnet thread

ランタイムサポートは簡単な部分; 難しいのはデプロイ形態

Lambda を .NET 8/9 から .NET 10 に移すのは、ターゲットフレームワークのバンプだけではありません。選ぶランタイムが次を駆動します:

主にパフォーマンスのために .NET 10 が欲しいなら、Lambda のランタイムアップグレードが勝利だと仮定しないでください。実際のハンドラ、実際の依存関係、実際の環境変数、実際のメモリ設定でコールドスタートを測定してください。

ベンチマークできる最小の .NET 10 Lambda ハンドラ

ここにベンチマークしやすく、トリミングで壊しやすい小さなハンドラがあります。私の好きなパターンも示しています: ハンドラを小さく保ち、それ以外をすべて DI または明示的なコードパスの背後に押し込めるパターンです。

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);

今度は意図された本番パスに合った方法で publish します。トリミングをテストしているなら、明示的にしてください:

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

.NET 10 で Native AOT にさらに踏み込む予定なら、その方法でも publish して、依存関係が実際に AOT 互換であることを検証してください (シリアライゼーション、リフレクション、ネイティブライブラリ)。

最初の .NET 10 ロールアウトのための実践的チェックリスト

安全な最初の一歩が欲しいなら、ランタイムを .NET 10 にアップグレードし、デプロイ戦略はそのままに保ってください。安定したら、ブランチでトリミングや AOT を実験し、モニタリングが退屈だと言うときだけ出荷してください。

Comments

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

< 戻る