OpenResty Edge で Edgelang を使って Lua モジュールを作成・呼び出す方法
OpenResty Edge では、まず管理者用 Web コンソールでグローバル Lua モジュールを作成し(.lua ファイルをアップロードするか、編集ボックスにインラインで記述)、Edgelang からページルール内で呼び出します。保存すると、モジュールは自動的に各ゲートウェイサーバーへ配布され、リロードや再起動なしに Edgelang コードから参照できます。
本動画チュートリアルでは、グローバル Lua モジュールの作成、Edgelang からのページルールでの呼び出し、curl による結果の検証までを解説します。これにより、非常に複雑なゲートウェイ操作や計算を容易に実行できます。Edgelang は、OpenResty Inc. が開発した簡潔かつ強力なドメイン固有言語(DSL)です。
OpenResty Edge でグローバル Lua モジュールを作成する方法
OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。
まず、Lua モジュールを作成する必要があります。
グローバル設定ページに移動します。
「グローバル Lua モジュール」を選択します。
ここで作成する Lua モジュールは、ページルールから呼び出すことができ、複雑な操作にも柔軟に対応できます。
Lua ファイルを直接アップロードすることができます。
または、編集ボックスにコードを記述することもできます。
ここでは、output-md5.lua という名前の Lua ファイルを作成しました。これは入力パラメータの md5 値を計算できます。
Lua モジュールテーブル _M を宣言します。
次に、この Lua モジュールに calc という名前の関数を追加します。この関数は入力パラメータの md5 値を計算できます。
最後に、末尾でモジュールテーブルを返すことを忘れないでください。
編集して保存すると、Lua モジュールは自動的に各ゲートウェイサーバーに配布され、Edgelang コードから参照できるようになります。
これらのグローバル Lua モジュールは複数のページルールで再利用できます。イベント駆動のロジックが必要な場合、OpenResty Edge はゲートウェイサーバーのオフラインイベントに応答する Lua 拡張もサポートしています。
Edgelang からページルールで Lua モジュールを呼び出す方法
次に、OpenResty Edge の HTTP アプリケーションで Lua モジュールを呼び出してみましょう。
以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。
そのアプリケーションに移動します。
すでにページルールが定義されています。
このページルールは、事前定義されたアップストリームへのリバースプロキシを設定しています。
ここで、Lua モジュールを呼び出す新しいページルールを追加しましょう。
URI /test-md5 をチェックするルール条件を有効にします。
選択可能な変数を確認してみましょう。
「URI」を選択します。
文字列等価演算子を選択します。
値 /test-md5 を入力し、ルートロケーションのみにマッチさせます。
次に、新しいアクションを追加します。
ここで追加するアクションを検索できます。
「EdgeLang を使用」を検索します。
それを選択します。
Lua モジュールを呼び出すための Edgelang コードを編集ボックスに追加します。URI パラメータ「value」を入力パラメータとして使用していることに注意してください。
このルールが既存の通常ルールの前に実行されることを確認します。
このルールにマッチした場合、後続のすべてのルールをスキップすることを確認します。
このルールには必須ではありませんが、リクエストの処理を即座に停止したい場合は、明示的に指定することをお勧めします。
これでこのルールを作成します。
いつものように、先ほどの変更をプッシュするには新しいバージョンをリリースする必要があります。
このボタンをクリックします。
リリースします!
新しいバージョンがすべてのゲートウェイサーバーに同期されました。
これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。
当社の設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。
curl で Lua モジュールの出力を検証する方法
次に、Lua モジュール呼び出しの効果を検証します。
ターミナル上で、curl コマンドラインツールを使用してこのゲートウェイサーバーに HTTP リクエストを送信します。
ここでは、URI パラメータ value=test1 を含むリクエストを送信します。value=test1 という URI パラメータに注目してください。
コマンドを実行します。返された md5 値が取得できます。
次に、URI パラメータを変更します。value=test2 という URI パラメータに注目してください。
実行してみましょう!返された md5 値が変更されていることがわかります。
ページルールの最初に Lua モジュールを呼び出すこともできます。
ここに Edgelang コードを追加します。
「Edit」ボタンをクリックします。
編集ボックスに Edgelang コードを記述します。
これは先ほど追加した新しいページルールと同じ効果があります。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
よくある質問
OpenResty Edge で Lua モジュールを作成するには?
管理者用 Web コンソールを開き、グローバル設定 → グローバル Lua モジュールに移動して、.lua ファイルをアップロードするか編集ボックスにインラインで記述します。モジュールテーブル _M を宣言し、関数を追加し(例では入力の md5 値を計算する calc 関数を定義しています)、末尾で _M を返します。保存すると、モジュールは自動的に各ゲートウェイサーバーへ配布されます。
Edgelang から Lua モジュールを呼び出すには?
ページルールにアクションを追加して**「EdgeLang を使用」**を検索し、モジュールの関数を呼び出す Edgelang コードを記述します。例では、ルールが URI /test-md5 にマッチし、value URI パラメータを入力としてモジュールに渡します。モジュールはページルールの先頭で呼び出すこともできます。
Lua モジュールを変更した後、OpenResty Edge のリロードや再起動は必要ですか?
いいえ。グローバル Lua モジュールを保存すると各ゲートウェイサーバーへ配布され、新しいバージョンをリリースするとページルールがすべてのゲートウェイクラスターへ同期されます。設定変更にサーバーのリロード、再起動、バイナリアップグレードは必要ありません。
ページルールの先頭で Lua モジュールを呼び出せますか?
はい。マッチしたルール内で呼び出すほか、Edgelang コードを追加してページルールの先頭でモジュールを呼び出すこともできます。動作は上記の専用ルールと同じです。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay(動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!


































































