OpenResty Edge では、まず管理者用 Web コンソールでグローバル Lua モジュールを作成し(.lua ファイルをアップロードするか、編集ボックスにインラインで記述)、Edgelang からページルール内で呼び出します。保存すると、モジュールは自動的に各ゲートウェイサーバーへ配布され、リロードや再起動なしに Edgelang コードから参照できます。

本動画チュートリアルでは、グローバル Lua モジュールの作成、Edgelang からのページルールでの呼び出し、curl による結果の検証までを解説します。これにより、非常に複雑なゲートウェイ操作や計算を容易に実行できます。Edgelang は、OpenResty Inc. が開発した簡潔かつ強力なドメイン固有言語(DSL)です。

OpenResty Edge で Edgelang から Lua モジュールを呼び出す

OpenResty Edge でグローバル Lua モジュールを作成する方法

OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。

OpenResty Edge コンソールのサンプルデプロイメント

まず、Lua モジュールを作成する必要があります。

OpenResty Edge コンソールで新しい Lua モジュールを作成する

グローバル設定ページに移動します。

OpenResty Edge コンソールのグローバル設定ページを開く

「グローバル Lua モジュール」を選択します。

グローバル設定でグローバル Lua モジュールを選択する

ここで作成する Lua モジュールは、ページルールから呼び出すことができ、複雑な操作にも柔軟に対応できます。

ページルールから呼び出せるグローバル Lua モジュールの一覧

Lua ファイルを直接アップロードすることができます。

グローバル Lua モジュールに .lua ファイルを直接アップロードする

または、編集ボックスにコードを記述することもできます。

編集ボックスに Lua モジュールのコードをインラインで記述する

ここでは、output-md5.lua という名前の Lua ファイルを作成しました。これは入力パラメータの md5 値を計算できます。

md5 値を計算する output-md5.lua を作成する

Lua モジュールテーブル _M を宣言します。

Lua モジュールテーブル _M を宣言する

次に、この Lua モジュールに calc という名前の関数を追加します。この関数は入力パラメータの md5 値を計算できます。

入力の md5 値を計算する calc 関数を追加する

最後に、末尾でモジュールテーブルを返すことを忘れないでください。

末尾で Lua モジュールテーブル _M を返す

編集して保存すると、Lua モジュールは自動的に各ゲートウェイサーバーに配布され、Edgelang コードから参照できるようになります。

Lua モジュールを保存して各ゲートウェイサーバーへ配布する

これらのグローバル Lua モジュールは複数のページルールで再利用できます。イベント駆動のロジックが必要な場合、OpenResty Edge はゲートウェイサーバーのオフラインイベントに応答する Lua 拡張もサポートしています。

Edgelang からページルールで Lua モジュールを呼び出す方法

次に、OpenResty Edge の HTTP アプリケーションで Lua モジュールを呼び出してみましょう。

OpenResty Edge で HTTP アプリケーションを開いて Lua モジュールを呼び出す

以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。

test-edge.com サンプル HTTP アプリケーション

そのアプリケーションに移動します。

HTTP アプリケーションの設定に入る

すでにページルールが定義されています。

アプリケーションのページルールを開く

このページルールは、事前定義されたアップストリームへのリバースプロキシを設定しています。

アップストリームへのリバースプロキシを設定した既存のページルール

ここで、Lua モジュールを呼び出す新しいページルールを追加しましょう。

Lua モジュールを呼び出す新しいページルールを追加する

URI /test-md5 をチェックするルール条件を有効にします。

URI /test-md5 にマッチするルール条件を有効にする

選択可能な変数を確認してみましょう。

利用可能なリクエスト変数から選択する

「URI」を選択します。

条件に URI 変数を選択する

文字列等価演算子を選択します。

文字列等価演算子を選択する

URI 等価条件を設定する

/test-md5 を入力し、ルートロケーションのみにマッチさせます。

URI マッチ値として /test-md5 を入力する

次に、新しいアクションを追加します。

ページルールに新しいアクションを追加する

ここで追加するアクションを検索できます。

追加するページルールのアクションを検索する

「EdgeLang を使用」を検索します。

「EdgeLang を使用」アクションを検索する

それを選択します。

「EdgeLang を使用」アクションを選択する

Lua モジュールを呼び出すための Edgelang コードを編集ボックスに追加します。URI パラメータ「value」を入力パラメータとして使用していることに注意してください。

value URI パラメータで Lua モジュールを呼び出す Edgelang コードを追加する

このルールが既存の通常ルールの前に実行されることを確認します。

ルールを既存の通常ルールより前に実行するよう順序付ける

このルールにマッチした場合、後続のすべてのルールをスキップすることを確認します。

マッチ時に後続のルールをスキップするよう設定する

このルールには必須ではありませんが、リクエストの処理を即座に停止したい場合は、明示的に指定することをお勧めします。

これでこのルールを作成します。

ページルールを作成する

いつものように、先ほどの変更をプッシュするには新しいバージョンをリリースする必要があります。

変更をプッシュするため新しいバージョンをリリースする

このボタンをクリックします。

リリースボタンをクリックする

リリースします!

新しいバージョンを確認してリリースする

新しいバージョンがすべてのゲートウェイサーバーに同期されました。

新しいバージョンが全ゲートウェイサーバーへ同期された

これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。

ページルールが全ゲートウェイクラスターとサーバーへプッシュされた

当社の設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。

設定変更にリロード・再起動・バイナリアップグレードは不要

curl で Lua モジュールの出力を検証する方法

次に、Lua モジュール呼び出しの効果を検証します。

ターミナル上で、curl コマンドラインツールを使用してこのゲートウェイサーバーに HTTP リクエストを送信します。

curl でゲートウェイサーバーに HTTP リクエストを送信する

ここでは、URI パラメータ value=test1 を含むリクエストを送信します。value=test1 という URI パラメータに注目してください。

URI パラメータ value=test1 の curl リクエスト

コマンドを実行します。返された md5 値が取得できます。

value=test1 に対して返された md5 値

次に、URI パラメータを変更します。value=test2 という URI パラメータに注目してください。

URI パラメータ value=test2 の curl リクエスト

実行してみましょう!返された md5 値が変更されていることがわかります。

value=test2 に対して返された、変化した md5 値

ページルールの最初に Lua モジュールを呼び出すこともできます。

ページルールの先頭で Lua モジュールを呼び出す

ここに Edgelang コードを追加します。

ページルールの先頭に Edgelang コードを追加する

「Edit」ボタンをクリックします。

Edgelang コードを追加するため「Edit」ボタンをクリックする

編集ボックスに Edgelang コードを記述します。

編集ボックスに 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、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!