AWSでLambdaとAPI Gatewayを使ってASP.NET Web APIを実行する方法
AWS Lambdaは、基盤となるハードウェアを管理せずにコードを実行するためのサーバーレスプラットフォームです。非常に柔軟で、ASP.NET Coreを使用した完全なC# APIを含む多くの異なるワークロードを実行できます。
待って、これをラムダでできるの?
はい! .NET ランタイムに基づいて関数を実行できるだけでなく、ASP.NET から提供されるすべてのツールを使用してリクエストに応答することもできます。AWS の管理された RDS データベースなどと対話する API を作成することができ、サーバーレス関数で完璧にスケーラブルに動作します。
従来のASP.NETのバージョンは、.NET Framework(古いWindows専用のランタイム)上で動作するため、重いことで知られていましたが、新しいASP.NET Coreスタックは、.NET Core 3.1および新しい.NET 5上で動作することで、大幅なパフォーマンスおよびメモリ使用量の改善を実現しました。
通常、これは不可能です。なぜなら、ASP.NETはKestrelと呼ばれる独自のHTTPウェブサーバーを使用してリクエストに応答するため、Lambdaランタイムによって処理されるためです。しかし、AWSはこれに対する独自の解決策を提供しています。従来、ASP.NETのセットアップは通常、IISまたはNGINXの背後にKestrelウェブサーバーが配置されます。これによって、ASP.NETフレームワークがリクエストを処理します。
AWSはプロキシクラスを作成しました。
Amazon.Lambda.AspNetCoreServer, これはASP.NETの前面で全てを処理します。これにより、コードのほとんどを再利用しながら、APIとLambdaを接続できます。
これは、API Gatewayを使用する必要があることを意味しますが、API GatewayはAPIの管理に非常に便利なので、悪いことではありません。APIが機能するためのすべてのルールを厳密に定義できるようにします。もちろん、API Gatewayからのすべてのリクエストを処理するためにASP.NETアプリを設定する必要があります。
ただし、これはスタートアップ時間に関して最高の体験にはならないでしょう。JavaScriptやPythonのような軽量スクリプト言語と比べて、.NETパッケージにははるかに多くのオーバーヘッドがあります。パフォーマンスを向上させるためのいくつかのトリックはありますし、プロビジョニングされたキャパシティに対して費用を支払うこともできます。それ以外の場合は、1〜2秒のコールドスタート時間に備えておくべきです。
これは、すべての実行がページを読み込むのに2秒かかることを意味するわけではありません。最初の読み込みが行われると、すべてが初期化され、Lambdaで5分間「ホット」に保たれます。他の誰かがリクエストすると、その関数は実際のサーバー上で動作するのと同様にリクエストを処理します。
ASP.NETの設定
AWSには、ボイラープレートコードとCloudFormationへのデプロイメントが事前設定されたASP.NET Lambdaプロジェクト用のジェネレーターが含まれています。ここから始めて、テストを行い、その後APIコードを移動させることをお勧めしますが、既存のプロジェクトに組み込むことを希望する場合も、AWSにはそのためのガイドがあります。
AWSアプリケーションのプロジェクトテンプレートを含むAWS Toolkit for Visual Studio拡張機能をインストールする必要があります。これはメニューバーの「拡張機能」から管理できます。
メインのVisual Studioスプラッシュスクリーンから、新しいプロジェクトを作成します:
おそらくこれを独自のソリューションに入れたいでしょうから、「その他」の下の「空白のソリューション」を選択してください。
次に、ファイルペインで右クリックして新しいプロジェクトを追加し、「AWSサーバーレスアプリケーション」または「テスト付きAWSサーバーレスアプリケーション」を選択します。お好みに応じて選んでください。
これはC#で書いていることを確認してください。何か理由があってF#を使いたいのでなければ。
これは「サーバーレスアプリケーション」プロジェクトであり、AWSのインフラストラクチャー・アズ・コードサービスであるCloudFormationを通じてすべてのリソースを管理することに留意してください。もし単にいくつかのLambda関数を作成したいだけなら、そのためのプロジェクトもあります。
サブメニューに移動し、どの種類のブループリントを作成するかを選択できます。 "ASP.NET Core Web API" を選択してプロジェクトを作成してください。
ほとんどの場合、これは標準的なASP.NETプロジェクトのように設定されています。主な違いは、従来の
Program.csに置き換えられます
LambdaEntryPoint.csメインエントリーポイントとして、AWSのコードをASP.NETにブリッジするシムクラスが含まれています。
IWebHostBuilderアプリケーションを起動するために使用される。
すべてが稼働するようになったら、コントローラー、モデル、サービスをコピーして、置き換える必要があります。
Startup.csあなたの設定で。
あなたのAPIを使用する
このプロジェクトをデプロイするには、AWS Toolkit Extensionを使用して組み込みの公開オプションが含まれています。プロジェクトを右クリックして、「AWS Lambdaに公開...」を選択します。
アップロードするためのバケットを指定し、CloudFormationデプロイメントに名前を付ける必要があります。
アップロードして公開するのに少し時間がかかりますが、その後、AWS Lambda 管理コンソールに移動して関数を表示できるようになります。それは、CloudFormation スタック名をプレフィックスとして使用した自動生成された名前になります。
設定 > トリガーの下で、この関数を呼び出すすべてのAPI Gatewayトリガーを表示し、エンドポイントを使用して自分でテストすることができます。
あなたの設定を使用して自動的に作成される完全なCloudFormationスタックも表示できます。
変更したい場合は、それを編集する必要があります
serverless.templateあなたのプロジェクトで。詳細については、AWS CloudFormationの使い方に関するガイドを参照してください。












