OpenResty Edge の Lua 拡張機能でイベント駆動型自動化を実現する方法:ゲートウェイサーバーのオフライン時に DNS からノードを自動削除
OpenResty Edge の Lua 拡張機能は、組み込みのゲートウェイイベントが発生したとき(例えばゲートウェイサーバーが異常オフラインになったとき)に Edge が自動的に実行するカスタム Lua コードです。これらの拡張機能の作成・編集・紐づけはすべて Edge の Web コンソールの Global Config → Global Lua Extensions で行い、トリガーとなるイベントタイプを選択します。これにより Edge はイベント駆動型の自動化プラットフォームになります。ポーリングや外部のグルーコードを書く代わりに、Lua のロジックを直接ゲートウェイのライフサイクルイベントに紐づけられます。
本記事では、**Gateway Server Abnormal Offline(ゲートウェイサーバー異常オフライン)**イベントに応答し、ゲートウェイサーバーが停止した瞬間に GoDaddy DNS から失効ノードを削除する、イベント駆動型の Lua 拡張機能を構築する手順を解説します。これにより DNS はオフラインノードにトラフィックを解決しなくなり、手動での介入は不要です。イベントに紐づける代わりに page rule から再利用可能な Lua を呼び出したい場合は、関連機能の Global Lua Modules を、webhook ベースの同様のイベント駆動型アプローチについては OpenResty Edge Webhook によるイベント駆動型運用 を参照してください。
ゲートウェイイベントに紐づく OpenResty Edge Lua 拡張機能の作成方法
OpenResty Edge は強力な Lua 拡張機能を提供しており、ゲートウェイサーバーのオフラインイベントに自動的に応答することができます。
OpenResty Edge の Web コンソールに切り替えましょう。これはコンソールのデモ用デプロイ環境です。実際には各ユーザーが自身のデプロイ環境を利用します。
「Global Config」ページに移動します。
「Global Lua Extensions」をクリックします。
新しい Lua 拡張機能を作成しましょう。
オフラインになったノードに GoDaddy がドメイン解決しないようにする拡張機能を作成します。
ここでは、名前を「remove_node_from_godaddy_if_node_is_offline」と入力します。
「By event」を選択します。
OpenResty Edge はいくつかの組み込みイベントをサポートしています。
ここでは、「Gateway Server Abnormal Offline」タイプを選択します。これは、サーバーがオフラインになった場合に Lua 拡張機能がトリガーされることを意味します。
Vim の使用に慣れている場合は、Vim モードを有効にしてコードを編集できます。
イベントが発生すると、trigger_event が Lua 拡張機能に渡されます。
管理サーバーにリクエストを送信し、ノードがオフラインになった時に GoDaddy からそのノードを削除できるようにします。
レスポンス内容が条件を満たす場合、Lua の cjson モジュールを使用してデコードし、結果を body 変数に割り当てます。
body が存在し、body.status が 0 に等しい場合、成功メッセージを出力します。
作成ボタンをクリックします!
ゲートウェイサーバーをオフラインにして Lua 拡張機能をトリガー・検証する方法
作成後、この新しい Lua 拡張機能は自動的に実行されます。オフラインになったゲートウェイサーバーを使用してテストしてみましょう。
ゲートウェイクラスターページに移動します。
これが使用するゲートウェイクラスターです。
現在オンラインです。
ターミナルで、systemctl コマンドを使用してサービスを停止します。
リストを更新します。
サーバーが現在オフラインになっています。
「Global Config」ページに戻ります。
「Global Lua Extensions」に移動します。
実行履歴を確認します。
図のように、拡張機能がトリガーされ実行されました。
ノードが GoDaddy から正常に削除されました。
よくある質問
OpenResty Edge の Lua 拡張機能とは?
Lua 拡張機能は、OpenResty Edge が組み込みのゲートウェイイベントに応答して自動的に実行するカスタム Lua コードのブロックです。Web コンソールの Global Config → Global Lua Extensions で記述・管理するため、基盤となるゲートウェイ設定ファイルに触れることなくイベント駆動型の自動化を追加できます。
どのようなイベントが Lua 拡張機能をトリガーできますか?
拡張機能を作成する際、トリガーとして 「By event」 を選択します。OpenResty Edge は複数の組み込みイベントをサポートしており、本記事では 「Gateway Server Abnormal Offline」(ゲートウェイサーバー異常オフライン) を使用します。これはゲートウェイサーバーがオフラインになるたびに拡張機能をトリガーします。
Lua 拡張機能を作成した後、ゲートウェイの再読み込みや再起動は必要ですか?
いいえ。Lua 拡張機能は Edge Admin(管理側)で実行され、各ゲートウェイノード(Edge Node)では実行されないため、再読み込みや再起動が必要なゲートウェイはありません。作成をクリックすると、新しい Lua 拡張機能はそのまま自動的に有効になり、追加の有効化手順はありません。次に紐づけたイベントが発生したとき、Edge Admin がその Lua コードを実行します。
イベント発生時、拡張機能はどのようなデータを受け取りますか?
イベントが発生すると、OpenResty Edge は trigger_event の値を Lua 拡張機能に渡します。これによりコードはどのサーバーやコンテキストがトリガーしたのかを把握し、それに応じて動作できます——例えば、削除すべきオフラインノードを特定します。
Lua 拡張機能から DNS プロバイダーなどの外部サービスを呼び出せますか?
はい。本例では、拡張機能が管理サーバーにリクエストを送信して GoDaddy からオフラインノードを削除し、Lua の cjson モジュールでレスポンスをデコードして、成功を記録する前に body.status が 0 に等しいかを確認します。同じパターンはあらゆる HTTP API に適用できます。
Lua 拡張機能が実際に実行されたことをどう確認しますか?
Global Config → Global Lua Extensions に戻り、実行履歴を確認します。拡張機能がトリガーされ実行されたかどうかが表示されます——本記事では、オフラインノードが GoDaddy DNS から削除されたことを確認できます。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、同時接続数が多く高負荷なシナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
この記事が気に入っていただけましたら、ぜひ本ブログサイトおよび弊社の YouTube チャンネルをご購読ください。ありがとうございます!
著者について
章亦春(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 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!














































