OpenResty Edge は、組み込みのバージョン管理でゲートウェイ設定を管理します。各変更は設定リリースを行うまで保留中のままで、リリースするとリロード・再起動・バイナリアップグレードなしに一度にすべてのゲートウェイクラスターへプッシュされます。リリース前に変更をテキストまたは JSON の差分でプレビューし、Normal または Staging タイプでリリースでき、あとからワンクリックで任意の過去バージョンへ元に戻す(ロールバック)ことも可能です。

本チュートリアルでは、ページルールの作成、リリース、修正して再リリース、最新リリースの取り消し、そしてより古いバージョンへのロールバックまでの一連の流れを、各ステップを curl で検証しながら解説します。バージョン管理は、ウェブコンソールが使用するリレーショナルデータベースが下支えしています。

アプリケーションのページルールを作成する

OpenResty Edge 設定リリースのバナー

いつものように、OpenResty Edge の管理ウェブコンソールにアクセスしましょう。これは私たちのコンソールのサンプルデプロイメントです。各ユーザーは独自のデプロイメントを持つことができます。

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

OpenResty Edge 管理コンソールの test-edge.com アプリケーション一覧

アプリケーションに入ります。

OpenResty Edge コンソールのアプリケーションダッシュボード

まず、カスタムレスポンスボディを出力する簡単なページルールを追加します。

サンプルアプリケーションのページルールページ

新しいページルールを作成します。

条件を設定していない新しいページルールのフォーム

このルールに条件を指定していません。そのため、無条件でトリガーされます。

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

レスポンスボディを直接返す新しいアクションを追加します。

ページルールエディタのアクションタイプ選択

「レスポンスボディを出力」アクションを検索することもできます。

「レスポンスボディを出力」アクションを検索する

検索結果に表示された「レスポンスボディを出力」アクション

それを選択します。

「レスポンスボディを出力」アクションを選択する

ここでは、Content-Type ヘッダーに「text/plain」を指定しました。

レスポンスに text/plain の Content-Type ヘッダーを設定する

そして、レスポンスボディとして「Hello world」を指定しました。

レスポンスボディに Hello world を入力する

このルールが他のルールよりも常に先に実行されるようにする必要があります。そのため、「常に先頭」のルールとしてマークします。

ページルールを「常に先頭」ルールとしてマークする

このルールがマッチした場合、後続のルールをスキップします。

ルールがマッチしたら後続のルールをスキップする設定

これで作成します。

新しいページルールを作成する

ページルールがここにリストされているのが確認できます。

ページルールをすべてのゲートウェイクラスターにリリースする

保留中の変更として表示された新しいページルール

この新しいページルールはまだオンラインになっておらず、保留中の変更のままです。

新しい設定バージョンをリリースして、これをプッシュします。

設定リリースページの保留中の変更

このクリアボタンを使用して、保留中の変更をすべてクリアすることができます。しかし、今回はクリアしたくありません。

保留中の変更を破棄するクリアボタン

設定のリリースを行う前に、変更の詳細を確認することができます。

このボタンをクリックするだけで、変更の差分を確認できます。

保留中の変更の差分を表示するボタン

これらの変更に対して、人が読みやすい形式で表示されます。

人が読みやすいテキスト形式で表示された保留中の変更

または、JSON 形式の変更を直接確認することもできます。

JSON 差分として表示された保留中の変更

これで新しいリリースを行う準備ができました。

新しい設定リリースを開始する

自分の Staging 用ゲートウェイノード にのみリリースすることもできます。

Staging 用ゲートウェイノードにのみリリースするオプション

この場合、この設定バージョンは Staging タイプになります。これについては、将来のビデオチュートリアルでデモンストレーションを行います。そうでない場合は Normal タイプになります。

Staging 用ゲートウェイノードにのみ設定をリリースする

ここでは、そのバージョンを説明するためのメモやコメントを追加することもできます。もちろん、これはオプションです。

このリリースに任意の説明を追加する

リリースボタンをクリックしてリリースします。

リリースボタンをクリックして変更をプッシュする

これで完全に同期されました。

設定リリースが各ゲートウェイに完全に同期された状態

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

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

リロードなしにすべてのゲートウェイクラスターへ同期された設定

curl でリリースした設定をテストする

ターミナルで、アプリケーションにテストリクエストを送信できます。

curl http://test-edge.com/

test-edge.com ドメインは OpenResty Edge が管理するゲートウェイノードサーバーに解決されています。

test-edge.com に curl リクエストを送信する準備ができたターミナル

実行します。

Hello world レスポンスボディを返す curl

確かに Hello world というレスポンスボディが得られました。

リリースページに戻ると、このテーブルですべてのリリース履歴を閲覧できます。

リリースページのリリース履歴テーブル

ここでは、各バージョンの作成者が誰かを確認できます。

各リリースの作成者を示すリリース履歴

また、いつリリースされたかも確認できます。

各リリースの時刻を示すリリース履歴

操作タイプも確認でき、「リリース」または「ロールバック」のいずれかになります。

リリースまたはロールバックを示す操作タイプ列

リリースタイプは Normal または Staging のいずれかです。

Normal または Staging を示すリリースタイプ列

ここで各履歴バージョンの変更の詳細を展開することもできます。

履歴のあるリリースの変更詳細を展開する

テキストによる説明もあります。

履歴のリリースに残るテキストによる説明

ページルールを編集する

ページルールを少し編集してみましょう。ページルールのページに戻ります。

既存のルールを編集するためのページルールページ

このルールを編集します。

既存のページルールを編集する

レスポンスボディを「Happy hacking!」に変更しましょう。

レスポンスボディを Happy hacking に変更する

保存します。

これで新しい変更ができました。

修正した設定をリリースする

編集後のリリースページに表示された新しい保留中の変更

もう一度新しい設定リリースを行います。

別の設定リリースを開始する

変更の詳細をもう一度確認します。

リリース前に保留中の変更の差分を確認する

「Hello world」を「Happy hacking!」に置き換えたことが表示されています。

Hello world が Happy hacking に置き換わったことを示す差分

リリースしましょう。

修正した設定をリリースする

今回は「Say happy hacking」というコメントを追加します。

このリリースに Say happy hacking というコメントを追加する

リリースします。

修正した設定リリースをプッシュする

新しいバージョンがプッシュされました。

各ゲートウェイへプッシュされた新しいリリース

リリース履歴も更新されました。

新しいリリースで更新されたリリース履歴

修正した設定をテストする

ターミナルでもう一度テストリクエストを送信してみましょう。

curl http://test-edge.com/

test-edge.com に再び curl リクエストを送信する準備ができたターミナル

実行します。

Happy hacking レスポンスボディを返す curl

レスポンスボディが確かに「Happy hacking」に変更されました。

最新の設定リリースを元に戻す

次に、最新の設定バージョンを元に戻したいとします。

リリース履歴で最新のリリースを選択する

この「このバージョンに戻す」ボタンをクリックするだけです。

最新リリースの「このバージョンに戻す」ボタン

ロールバックを確認します。

リリースを元に戻す確認ダイアログ

ロールバックがすべてのゲートウェイサーバーにプッシュされました。

すべてのゲートウェイサーバーへプッシュされたリリースの取り消し

最新の操作ログのタイプが「ロールバック」になっているのがわかります。

タイプが「ロールバック」の操作ログエントリ

元に戻した設定をテストする

ターミナルでもう一度テストしてみましょう。

curl http://test-edge.com/

元に戻した後に curl リクエストを送信する準備ができたターミナル

実行します。

再び Hello world レスポンスボディを返す curl

確かに「Hello world」に戻りました。

任意の過去バージョンにロールバックする

直前のリリースを取り消すだけでなく、より古いバージョンにロールバックすることもできます。

例えば、今回は 2 番目のバージョンにロールバックしたいとします。

履歴で最後から 2 番目のリリースを選択する

この「このバージョンにロールバック」ボタンを直接クリックできます。ぜひ自分で試してみてください。

より古いリリースの「このバージョンにロールバック」ボタン

以上が、本日お伝えしたい内容です。

より古いバージョンへロールバックした後のリリース履歴

よくある質問

OpenResty Edge で設定変更をリリースするには?

ウェブコンソールで行った変更(新しいページルールなど)は、設定リリースを行うまで保留中の変更のままです。リリースページで保留中の差分を確認し、必要に応じて説明を入力して「リリース」をクリックします。すると変更がすべてのゲートウェイクラスターとサーバーへプッシュされます。

設定変更のリリースにサーバーのリロードや再起動は必要ですか?

いいえ。OpenResty Edge の設定リリースにはサーバーのリロード・再起動・バイナリアップグレードは不要です。新しい設定はすべてのゲートウェイクラスターとサーバーへ自動的に同期されるため、リリースは効率的でスケーラブルです。

Normal リリースと Staging リリースの違いは?

Staging リリースは設定を自分の Staging 用ゲートウェイノードにのみプッシュし、本番公開前に変更を検証できます。Normal リリースはすべてのゲートウェイサーバーへプッシュします。リリース履歴には各エントリのタイプが表示されるため、両者を区別できます。

最新のリリースを元に戻すには?

リリース履歴で最新のエントリを開き、「このバージョンに戻す」をクリックして確認します。取り消しはただちにすべてのゲートウェイサーバーへプッシュされ、その操作は「ロールバック」タイプとして履歴に記録されます。

直前だけでなく、任意の過去バージョンにロールバックできますか?

はい。直近のリリースを取り消すだけでなく、リリース履歴の任意の古いエントリ(例えば最後から 2 番目)を選び、「このバージョンにロールバック」をクリックすれば、その正確な設定バージョンを復元できます。

リリース前に変更をプレビューできますか?

はい。リリース前に、保留中の変更を人が読みやすいテキスト形式の説明と JSON 差分の両方で確認でき、ゲートウェイへプッシュされる内容を正確に把握できます。

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(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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