OpenResty Edge におけるゲートウェイ用小言語 EdgeLang
本日は、OpenResty Edge のもう一つの優れた機能をご紹介いたします。それは、ルールベースの小言語である Edge 言語(略して Edgelang)の使用方法です。
Edgelang の紹介
ユーザーは Edgelang を使用して、複雑なゲートウェイルールを記述することができます。これらのルールは、カスタム認証、リクエストとレスポンスの書き換え、動的アップストリームルーティングの設定などに使用できます。これらのルールの実行速度は、通常、手書きの Lua コードよりもはるかに高速です。Edgelang コンパイラは、ゲートウェイサーバー上で実行される効率的なネイティブコードを生成します。
Edgelang コンパイラは非常に効率的です。多くの先進的な最適化技術を実装しています。すべての Edgelang ルールで参照される正規表現を1つのステートマシンに統合することをサポートしています。これにより、リクエストデータを 1 回スキャンするだけで、どのルールがマッチし、それらのルールのどの部分がマッチするかを即座に知ることができます。
また、すべての Edgelang ルールの定数文字列プレフィックスとサフィックスパターンを単一のツリー構造データに組み合わせることもサポートしています。
Edgelang で定義されたページルールの追加
OpenResty Edge の Admin Web コンソールに入りましょう。これは私たちのコンソールのサンプルデプロイメントです。各ユーザーは自身のローカルデプロイメントを持っています。
以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。
そのアプリケーションに入ります。
前回のチュートリアルで、すでに 1 つのページルールを作成しました。
このページルールは、アップストリームへのリバースプロキシを設定しています。
ここで Edgelang コードを追加できます。
最初のルールを追加しましょう。
まず、ルールの条件部分です。条件は URI が「/foo/」の場合です。
矢印を使用して条件部分の終わりを示します。
矢印の後、条件が満たされた場合に実行するアクションを指定します。
このアクションは「/bar/」ページへの HTTP リダイレクトを開始します。
このルールを保存します。
ご覧のように、Edgelang 仕様はルールで構成されています。各ルールには 2 つの基本部分があります:
1 つは条件部分、
もう 1 つはアクションで構成される結果です。
条件と結果は矢印で接続されています。
ルール全体はセミコロンで終わります。
これは最も単純なルールの例です。様々なルールを自由に追加できます。1 つのルールに複数の条件を持たせることができ、条件間は AND または OR で接続できます。1 つのルールの結果部分で複数のアクションを実行することもできます。
いつものように、先ほどの変更をプッシュするために新しいバージョンをリリースする必要があります。
このボタンをクリックします。
リリースします!
新しいバージョンがすべてのゲートウェイサーバーに同期されました。
これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。
これらの設定変更にはサーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。
テスト
ターミナルで、curl
コマンドラインツールを使用して、DNS で解決されたゲートウェイサーバーに HTTP リクエストを送信します。
curl -I http://test-edge.com/bar/
レスポンスヘッダーにリダイレクトがないことに注意してください。
次に、/foo/
URI を持つ HTTP リクエストを送信しましょう。
curl -I http://test-edge.com/foo/
このリクエストがリダイレクトされたことがわかります。
/bar/ という場所にリダイレクトされました。先ほど定義した Edgelang ルールが機能しています!
「/foo/」で始まる別の URI をテストしてみましょう。
この URI には追加のサフィックス「blah/」があります。
リクエストを送信します。
このリクエストは Edgelang ルールにヒットしていないことがわかります。これは、Edgelang の条件が 「/foo/」と完全に一致する必要があるためです。
ページルールの Edgelang 定義の修正
このような場合に対応するために、Edgelang ルールの条件部分を修正することができます。
「編集」ボタンをクリックします。
元の条件を削除します。
URI プレフィックス「/foo/」にマッチするように変更します。
このルールを保存します。
新しい設定を再度リリースします。
ターミナルに戻ります。先ほどのテストリクエストを再度送信します。
引き続き「blah/」URI サフィックスを使用します。
リクエストを送信します。
リダイレクトがトリガーされたことがわかります。今回は Edgelang ルールにヒットしました。
次に、追加の URI サフィックスのない HTTP リクエストを送信してみましょう。
curl -I http://test-edge.com/foo/
依然としてヒットします。
Edgelang を使用した WAF ルールの定義
Web コンソールの様々な場所で Edgelang を使用できます。例えば、WAF(Web アプリケーションファイアウォール)にカスタムルールを追加するために EdgeLang を使用できます。
新しい WAF ルールを作成します。
ここに Edgelang を記述します。
Edgelang ユーザーマニュアル
私たちが独自に設計した EdgeLang ゲートウェイ小言語は、非常に強力な言語で多くの機能を持っています。この言語はカスタム Lua モジュールや Lua コード、または任意の .so 動的リンクライブラリの呼び出しをサポートしています。そのコンパイラはルール間の深い最適化をサポートしています。
詳細については、Edgelang ユーザーマニュアルをご覧ください。
マニュアルには多くのコード例が含まれています。
Edgelang の様々な使用方法について非常に詳細に説明されています。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高並発・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!