C#のYARP入門 - リバースプロキシの作成方法
.NET Core環境でウェブトラフィックを効率的に管理する場合、リバースプロキシは不可欠なツールとなります。 YARPは、Yet Another Reverse Proxyの略で、.NETエコシステムのために特別に構築されたMicrosoftの非常に柔軟で高度にカスタマイズ可能なリバースプロキシプロジェクトです。 この記事では、Tim Corey氏の包括的なチュートリアル"Intro To YARP In C# - How To Create a Reverse Proxy"に従って、YARPを使い始めるために深く潜っていきます。
まずは、YARPの紹介と、このプロキシ・フレームワークを自分のプロジェクトでどのように活用できるかについて説明します。
リバースプロキシとは何ですか?
1:07で、Timはリバースプロキシがクライアント(ユーザー)とバックエンドサーバーの間に位置し、入ってくるリクエストを管理し、リクエストを適切な宛先に効率的にルーティングすることを説明する。
Timは1:45から、なぜプロキシが重要なのかを概説する。ロードバランシングのためだけでなく、リクエストヘッダの簡素化、HTTPSによる接続の安全性、バックエンドサービスが直接アクセスから隔離されていることを保証するためでもある。 リバースプロキシーを使用することで、内部構造を公開することなく、.NET Coreアプリケーションを簡単に拡張することができます。
YARPの紹介
5:11でティムはYARP - Yet Another Reverse Proxyを紹介する。 ティムは、マイクロソフトが幅広い.NETアプリケーションの特定のニーズにより適したプロキシフレームワークの必要性に気づき、YARPの作成につながったと説明する。YARPは、モジュール化され、堅牢で、拡張可能な方法で、プロキシのコア機能を提供するライブラリとして設計されている。

このライブラリは、最新の機能を含み、Linux、Windows、クラウド環境などの最新技術を確実にサポートするため、積極的に開発中です。
さらに、Timは、YARPの包括的なメンテナンス・ドキュメントと利用可能な広範なドキュメントを強調し、新しい開発者がより簡単に使い始められるようにします。
基本的なYARPプロジェクトの立ち上げ
6:14、TimはVisual Studioでnet SDKを使って新しいプロジェクトを開始する。 彼はPessimistic APIという名前の基本的なASP.NET Core Web APIプロジェクトを作成します。

7:02のTimは、寒冷気象サービスをシミュレートするPessimistic APIを作成するためにプロジェクトを修正する。このシンプルな.NET Coreアプリケーションは、後にYARPがプロキシするバックエンドサーバーとなる。
Timは8:44で、前に進む前にプロジェクトを検証し、例のサービスが/weatherforecastでのリクエストに正しく応答することを確認するよう提案している。
YARPゲートウェイの作成
9:04 に、Tim は YarpGateway という空の ASP.NET Core プロジェクトを作成します。 このプロジェクトはリバースプロキシとして機能します。
Tim氏は、Manage NuGet Packagesからinstall package YARPを検索し、必要なパッケージをインストールする手順を説明する(10:24)。 これは、必要なコアプロキシ機能を提供する公式ライブラリであるYARP Reverse Proxyを引き込みます。
YARPの設定
12:02で、ティムはProgram.cs内でYARPコンフィギュレーションを配線する方法を示している:
builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("YARP"));builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("YARP"));このセットアップでは、ルートとクラスタを定義する設定ファイルをロードします-リクエストをルーティングするためにYARPを使うときの基本的な要素です。
ルートは受信パスにマッチし、クラスタは転送先のバックエンド・サービスを定義します。 このモジュール構成は、レート制限、モジュールの置き換え、パス管理の微調整などの高度な機能の追加に対応しています。
ティムは、YARPが実世界のプロジェクトに適した高度にカスタマイズ可能なリバースプロキシである理由は、この柔軟な設計にあると指摘する。
基本的なプロキシ設定をテストする
20:02で、TimはバックエンドのPessimistic APIとYarpGatewayの両方を一緒に実行している様子を示しています。
ゲートウェイのURL /weatherforecastにナビゲートすると、YARPは受信リクエストをバックエンドサーバーにルーティングし、レスポンスを取得し、内部URLを公開することなく提供します。 これは、プロキシ機能とルーティングリクエストの動作を示しています。
セカンドバックエンドで拡張する
21:17に、TimはOptimistic APIという、暖かい温度だけを返す別の新しいプロジェクトを追加する。
彼はYARPを1つのクラスタ内で複数のデスティネーションで構成している。 これは、2つのバックエンドサーバー間でランダムにリクエストを分散させるロードバランシングを可能にします。
その後、26:26でTimは、リクエスト属性に基づくラウンドロビンやカスタムロジックのようなオプションを含め、ロードバランシング戦略をさらにカスタマイズできることを説明する。
YARPで静的ウェブサイトをアップグレードする
28:12では、ティムが実際の例として、自身のウェブサイト(iamtimcorey.com)のアップグレードについて説明している。
彼は、catch-all routeを使用して元のサイトへのすべてのトラフィックをプロキシするWebsiteUpgrade .NET Coreウェブアプリケーションを作成します。

この戦略により、段階的な更新が可能になります:ティムは、レガシーシステムが提供する古いコンテンツをサポートしながら、Razor を使用してページを再構築し、最新化することができます。 受信したリクエストは、パスに応じて自動的に元のサイトまたは新しいコンテンツにルーティングされます。
Razorページで新しい機能を追加する
34:30で、ティムはアップグレードプロジェクトにRazor Pagesを追加する。 彼は、新しいアプリケーションによって直接提供される単純なページ(/more)を追加する方法を示し、他のすべてはプロキシされます。
YARPの柔軟性のおかげで、既存のバックエンド・サービスに支障をきたすことなく、新しいモジュールや機能を追加することができる。
高度なルーティングとパス変換の実装
39:03で、Timはパスを書き換えて、ユーザを3つの異なるコースページの間でランダムにリダイレクトする/randomルートを構築します。
彼は、YARPのtransforms機能を使って、プロキシ処理中のリクエストヘッダとパスを変更し、開発者が特定のニーズに合わせて動作を微調整する方法を示す。
Timは、44:03あたりでタイプミスに遭遇したが、それを修正し、設定ファイルへの慎重な注意を強調している。
ラウンドロビン負荷分散を設定する
45:10、ティムはランダムルーティングをラウンドロビンに切り替える。 この単純な設定変更により、複数のページ間でトラフィックを分散させる際の予測可能性が向上します。

YARPの主な特徴の1つである、コードを深く変更することなく、コンフィギュレーションだけで動的に動作をカスタマイズすることの容易さを強調します。
結論なぜYARPを選ぶのか?
47:03で、ティムはYARPが最新 for .NET Coreアプリケーションにとって重要なツールである理由を要約して締めくくります:
簡単に統合できるように、ライブラリとして設計されています。
開発者が必要とする中核的なプロキシ機能を提供します。
マイクロソフトが積極的に開発中です。
Linux、Windows、HTTPSに対応しています。
広範な文書と包括的なメンテナンス文書があります。
複数のバックエンドサーバーに柔軟にリクエストをルーティングすることができます。
特定のニーズに合わせた簡単なカスタマイズにも対応しています。
- プロダクショングレードで、拡張性があり、パフォーマンスのために調整されています。
Timは、公式ドキュメントに従うか、YARPのフルコースを提案することによって、レート制限、モジュールの置き換え、より深いAPIゲートウェイのセットアップのような、より多くの機能を探求することを視聴者に勧めます。
最終的な考え
Tim CoreyによるYARPリバースプロキシのセットアップの完全な動画に従うことで、どんな開発者でもすぐに別のリバースプロキシのスピードに乗ることができます。 複雑なロードバランシング、モジュールの置き換え、サイトの段階的なアップグレードなど、YARP Yet Another Reverse Proxyは、.NETの世界に確かで柔軟なソリューションを提供します。 彼のYouTubeチャンネルで、より多くの洞察に満ちたビデオをご覧ください。

