- OpenResty Edge インストールに関するよくあるご質問
- OpenResty Edge™ SDK に関するよくあるご質問
- SDK を使用する際、最も重要な認証情報(アドレス、ポート、ユーザー名、パスワード)はどこから取得しますか?
- 開発環境で自己署名証明書を使用しており、SDK 接続時に SSL エラーが発生します。どのように対処しますか?
- API を呼び出して設定を変更しましたが、反映されません。正しいリリースプロセスはどのようなものですか?
- SDK を使用して自動化操作(ルールの一括更新、IP リストなど)を行う際のベストプラクティスは何ですか?
- SDK を CI/CD パイプライン(Jenkins、GitLab CI など)に統合して、コードとしての構成(Configuration as Code)を実現するにはどうすればよいですか?
- OpenResty Edge 動的メトリクスに関するよくあるご質問
- OpenResty Edge Edgelang に関するよくあるご質問
🔗 OpenResty Edge インストールに関するよくあるご質問
🔗 システム要件とアーキテクチャ
🔗 OpenResty Edge にはどのような主要コンポーネントが含まれていますか?それぞれの役割は何ですか?
OpenResty Edge は主に 3 つのコアコンポーネントで構成されています:Edge Admin(管理コンソール)、Edge Log Server(ログおよびメトリクスサーバー)、および Edge Node(ゲートウェイノード)。さらに、2 つのデータストレージコンポーネントがあります:Edge Admin Database と Edge Log Server Database。
🔗 OpenResty Edge をインストールするために必要なハードウェア構成は何ですか?
本番環境には少なくとも 3 台のマシンが必要で、それぞれに Edge Admin + Admin DB、Log Server + Log Server DB、および Edge Node をインストールします。10 ノード以内のクラスターの場合、Edge Admin と Log Server には少なくとも 4 コア、16GB RAM、200GB SSD が推奨されます。Edge Node の構成はトラフィック量に依存し、通常は 1 コアに対して 2GB RAM が目安となります。
🔗 ネットワーク環境にファイアウォールの制限がある場合、どのポートとドメインを開放する必要がありますか?
openresty.com、openresty.org、pkg.openresty.com、api.openresty.com の 443 ポートをホワイトリストに追加する必要があります。コンポーネント間でも特定のポートを開放する必要があります:Edge Admin には 443 および 12345 ポートが必要で、Log Server には 12346 および 8089 ポートが必要です。
🔗 インストールプロセス
🔗 OpenResty Edge のインストールパッケージはどこから入手できますか?
OpenResty のダウンロードセンター (https://openresty.com/en/dashboard/downloads) から、オンラインインストール用の構成パッケージ (openresty-edge-VERSION.tar.gz) と完全なオフラインインストールパッケージ (openresty-edge-bundle-VERSION.tar.gz) を入手できます。
🔗 インストール後、Edge Admin 管理インターフェースのログインアカウントとパスワードをどのように取得しますか?
インストーラーの「Get Default Info」機能を使用してデフォルトのログイン情報を取得するか、テクニカルサポートにご連絡いただきパスワードのリセットを依頼してください。
🔗 インストール後、各コンポーネントが正常に動作しているかどうかを確認するにはどうすればよいですか?
systemctl status コマンドを使用して各サービスの状態を確認できます。例えば、sudo systemctl status oredge-admin などです。また、各コンポーネントのログディレクトリ(例:/usr/local/oredge-admin/logs)に異常情報がないかを確認することもできます。
🔗 設定と高可用性
🔗 Edge Admin と Log Server の可用性を向上させるにはどうすればよいですか?
2 つの Edge Admin サービスをデュアルマスターモードに設定するか、複数の Log Server インスタンスを展開することができます。Edge Admin の場合は config.ini の clone_admin 設定を変更する必要があり、Edge Node の場合は admin セクションの host2 フィールドを設定する必要があります。複数の Log Server インスタンスを使用する場合は、Edge Admin と Edge Node の両方の設定に endpoints を追加する必要があります。
🔗 データの安全性を確保するにはどうすればよいですか?データバックアップのソリューションにはどのようなものがありますか?
定期的にデータベースをバックアップすることをお勧めします。詳細については、ドキュメントのデータベースバックアップセクションをご参照ください。また、データベースクラスターを構築して自動マスター/スレーブ切り替えを実現し、データベースの可用性を向上させることも可能です。
🔗 インストール後、Edge Admin の SSL 証明書を更新するにはどうすればよいですか?
/usr/local/oredge-admin/conf/ssl/ssl.crt と /usr/local/oredge-admin/conf/ssl/ssl.key ファイルを手動で置き換えるか、インストール時に -s および -k パラメータを使用して証明書パスを指定します。あるいは、Edge Node を使用して Edge Admin のトラフィックをプロキシし、Edge Admin 用の SSL 証明書を発行することも可能です。
🔗 トラブルシューティング
🔗 Edge Node のインストール後に「not yet approved」エラーが表示された場合はどうすればよいですか?
これは正常な現象です。Edge Node が Edge Admin に正常に接続されたことを示しており、Edge Admin 管理コンソールでノードを承認する必要があります。詳細な操作方法についてはゲートウェイクラスターのドキュメントをご参照ください。
🔗 OpenResty Edge™ SDK に関するよくあるご質問
🔗 SDK を使用する際、最も重要な認証情報(アドレス、ポート、ユーザー名、パスワード)はどこから取得しますか?
これらの情報は、Edge Admin Web コンソールにログインする際の情報と完全に一致します。Edge2Client の初期化に必要なパラメータは、バックエンドのアクセスアドレスとログイン認証情報です。Admin が標準以外の HTTPS ポートを使用している場合は、アドレスにポート番号を明示的に指定してください。
🔗 開発環境で自己署名証明書を使用しており、SDK 接続時に SSL エラーが発生します。どのように対処しますか?
これは非常によくあるケースです。client.login() を呼び出す前に client.set_ssl_verify(False) を実行するだけで証明書検証をスキップできます。ただし、本番環境では、信頼できる認証局(CA)によって発行された有効な証明書を設定することを強くお勧めします。
🔗 API を呼び出して設定を変更しましたが、反映されません。正しいリリースプロセスはどのようなものですか?
SDK のすべての設定変更はトランザクション形式であり、自動的に公開されることはありません。これは、誤操作がオンラインサービスに影響を与えるのを防ぐための安全設計です。正しいプロセスは「変更 -> 公開 -> 検証」の流れになります:
- 変更:
new_rule(),put_app()などのインターフェースを呼び出して変更を実行します。 - 公開:
client.new_release()を呼び出して、すべての保留中の変更を新しいバージョンとして作成し、有効にします。 - 検証:(オプションですが推奨)
client.sync_status()を呼び出して、設定がすべてのノードに同期されているかどうかを確認します。
🔗 SDK を使用して自動化操作(ルールの一括更新、IP リストなど)を行う際のベストプラクティスは何ですか?
- 冪等性:作成操作を実行する前に、対象が既に存在するかどうかを確認し、重複作成を避けます。更新を実行する際は、スクリプトが繰り返し実行できることを確認します。
- 堅牢性:すべての API 呼び出しの外層で
try...exceptを使用して例外をキャッチし、詳細なログを記録します。 - パフォーマンス考慮:大規模な一括操作(例:一度に数千の IP を更新する場合)では、データをバッチ処理し、バッチ間に短い遅延(例:1 秒)を追加して、リクエスト頻度が高すぎて Admin の保護機能が作動しないようにすることをお勧めします。
🔗 SDK を CI/CD パイプライン(Jenkins、GitLab CI など)に統合して、コードとしての構成(Configuration as Code)を実現するにはどうすればよいですか?
これは SDK の最も価値のあるアプリケーションシナリオの一つです。一般的なアプローチは次のとおりです:
- コード化された構成:Edge アプリケーションの構成(アップストリーム、ルールなど)を特定の形式(YAML、JSON など)でコードリポジトリに保存します。
- 同期スクリプトの作成:コード化された構成ファイルを読み取り、SDK インターフェースを呼び出して構成を Edge Admin に適用する Python スクリプトを開発します。
- CI/CD への統合:CI/CD パイプラインにステージを追加し、構成コードが変更されたときに自動的に Python スクリプトを実行して、Edge への構成変更とリリースを完了します。
- 認証情報管理:Edge Admin にログインするための高権限パスワードを CI/CD システムのシークレット管理ツールに保存し、スクリプトに安全に渡して、平文での保存を避けます。
🔗 OpenResty Edge 動的メトリクスに関するよくあるご質問
🔗 「動的メトリクス」機能の主な価値は何ですか?どのようなシナリオで使用すべきですか?
その主な価値は、標準のダッシュボードでは得られない、深くカスタマイズされたビジネスおよびセキュリティの洞察を提供することです。次のようなシナリオで使用することをお勧めします:
- 特定のビジネスメトリクスの追跡:例えば、VIP ユーザーのリクエスト数、新規イベントの API 呼び出し成功率、異なる Android バージョンのリクエスト分布などを分析します。
- 詳細なセキュリティ分析:例えば、特定の URI に対して最も多くアクセスする Top 10 の IP アドレスを特定する、または WAF によってブロックされたリクエストのうち特定の国からの割合を集計します。
- カスタムパフォーマンス監視:例えば、特定のアップストリームサービスの P99 応答時間を計算する(単なる平均値ではなく)などが可能です。
🔗 クエリを作成する前に、利用可能なデータテーブルとフィールドを知るにはどうすればよいですか?データディクショナリはありますか?
これは最も重要な最初のステップです。利用できる主なデータソースは reqs(リクエストログ)と waf_hits(WAF ログ)という 2 つの仮想テーブルです。これらに含まれる正確な利用可能なフィールド(例:client_ip、status、uri、resp_header('Content-Type') など)を知るための最も信頼できる方法は、OpenResty Edge 公式ドキュメントの動的メトリクスセクションをご参照ください。
🔗 ビジネスメトリクスを集計したいのですが、例えば「JWT の user_id フィールドに基づいてリクエスト量が最も多い Top 10 のユーザーを特定する」ことは可能ですか?
はい、これは動的メトリクスの強みです。user_id が X-Jwt-Claim-User-Id というリクエストヘッダーにあると仮定すると、クエリは次のように記述できます:
-- user_idがリクエストヘッダー'X-Jwt-Claim-User-Id'にあると仮定
SELECT ngx_var('http_x_jwt_claim_user_id') as user_id, count(*) as count
FROM reqs
WHERE ngx_var('http_x_jwt_claim_user_id') != ''
GROUP BY user_id
ORDER BY count DESC
LIMIT 10;
重要なポイントは、ngx_var() 関数を利用してカスタムリクエストヘッダー(http_ プレフィックス付き)や他の Nginx 変数を取得し、ビジネスロジックとログデータを関連付けることです。
🔗 動的メトリクスのクエリはどこで実行されますか?オンラインゲートウェイのパフォーマンスに影響しますか?
これは非常に重要なセキュリティに関する質問です。動的メトリクスのクエリは、Edge Log Server(ログサーバー)上で実行され、ゲートウェイノードから副次的に収集されたログデータを処理します。そのため、クエリがどれだけ複雑であっても、リアルタイムのビジネストラフィックを処理する Edge Node(ゲートウェイノード)のパフォーマンスには影響を与えません。この機能を安心して使用し、複雑なデータ分析を行うことができます。
🔗 OpenResty Edge Edgelang に関するよくあるご質問
🔗 標準のページルール UI ではなく、どのようなシナリオで Edgelang を使用すべきですか?
これは最も重要な判断ポイントです。標準の UI ルールでは対応できない、複雑で動的、または極めて高いパフォーマンスが要求されるシナリオで Edgelang の使用を検討すべきです。
- 標準ルール UI:一般的で静的なロジックに適しています。例えば、「URI が
/pathの場合にnew-urlにリダイレクトする」など。これはシンプルで直感的、すぐに使用可能です。 - Edgelang:「プログラミング」ロジックが必要なシナリオに適しています。例えば:
- 複雑な条件:複数のリクエストヘッダー、Cookie、クライアント IP の地理的位置などに基づいて複合的な判断が必要な場合。
- レスポンス処理:レスポンス本文の内容を動的に変更する必要がある場合(例えば、HTML に JavaScript を挿入する)やレスポンスヘッダーを変更する必要がある場合。
- 動的ルーティング:特定のリクエストパラメータ(ユーザー ID や地域コードなど)に基づいてアップストリームサービスを動的に選択する必要がある場合。
- パフォーマンス最適化:数百のルールがある場合、Edgelang コンパイラはそれらを効率的な単一のコードブロックに最適化し、通常は数百の独立したページルールを順次実行するよりも優れたパフォーマンスを発揮します。
🔗 Edgelang の最も強力な応用シナリオは何ですか?例を挙げていただけますか?
Edgelang の最も強力な特長は、リクエストとレスポンスに対する高度なプログラミングと制御能力です。最も代表的な「キラー」アプリケーションシナリオは、A/B テストとカナリアリリース(段階的リリース)です。
例:ユーザー ID に基づくカナリアリリースの実装 ユーザー ID が「7」で終わるユーザーに新しいアップストリームサービス new-backend-upstream へのアクセスを許可し、他のユーザーには旧バージョンを提供したいとします。
# ルール:カナリアリリース
# リクエストのCookieにuseridが含まれ、useridが'7'で終わる場合
req-cookie("userid"), req-cookie("userid") suffix "7" =>
set-upstream-name("new-backend-upstream");
このロジックは標準の UI ルールでも実装可能ですが、Edgelang を使用するとより簡潔で効率的になります。
🔗 Edgelang コードを作成した後、どのようにデプロイして実行しますか?
Edgelang コードは独立してデプロイされるのではなく、ページルールのアクションとして実行されます。プロセスは次のとおりです:
- コードの作成:コードエディタで Edgelang ルールを作成します。
- ページルールの作成:Edge Admin のアプリケーション下で新しいページルールを作成します。
- 条件の設定:(オプション)Edgelang を実行したいリクエストのトリガー条件を設定します。例えば、「URI パスのプレフィックスが /api/ である」など。
- アクションの選択:ルールの「アクション」セクションで「Edgelang を実行」を選択します。
- コードの貼り付け:作成した Edgelang コードをアクション入力ボックスに貼り付けます。
- 保存と公開:このページルールを保存して公開します。
その後、設定した条件に一致するリクエストがあると、埋め込まれた Edgelang コードが実行されます。
🔗 Edgelang の実行順序はどのようになっていますか?WAF やキャッシュなどの他のルールとどのように連携しますか?
ページルールの一部として、Edgelang の実行は Nginx の処理フェーズとページルールの優先順位に従います。簡略化されたリクエスト処理フローは次のとおりです:
- ページルール(Edgelang または WAF を含む):リクエストはページルールの処理ロジックに入ります。この時点で、Edgelang または WAF を含むルールは、その優先順位(UI でドラッグして並べ替え可能)とトリガー条件に従って実行されます。
- キャッシュ:Edgelang は後続の動作を制御できます。例えば、Edgelang ルールで
enable-proxy-cache()アクションを呼び出して、特定のリクエストに対してキャッシュを有効にするかどうかを決定できます。
🔗 Edgelang のパフォーマンスとセキュリティはどのようになっていますか?問題のあるコードを書いた場合はどうすればよいですか?
- パフォーマンス:非常に高性能です。Edgelang コンパイラは、ルール(複数のルールにまたがる場合でも)を深く分析して最適化し、非常に効率的な Lua コードを生成します。そのパフォーマンスは通常、多数の独立したページルールの組み合わせよりも優れています。
- セキュリティ:
- コンパイル時チェック:Edgelang コンパイラは、ルールを保存する際に厳格な構文とロジックのチェックを行い、ほとんどの低レベルエラー(構文エラーや関数名の誤字など)はこの段階で検出され、保存が阻止されます。
- サンドボックス環境:Edgelang の実行は安全なサンドボックス環境に制限されており、マニュアルに記載されている組み込み関数とアクションのみを呼び出すことができ、任意のシステムコマンドや危険な操作を実行することはできません。
- テスト:現在、独立した「ドライラン」モードはありませんが、ベストプラクティスとして、非本番環境のアプリケーションやサービスで最初に Edgelang ルールをデプロイしてテストし、その論理的な正確性を検証してから本番環境に適用することをお勧めします。