App Service におけるインスタンスを指定した再起動手順
はじめに
お世話になっております。App Service サポート担当の押田です。
App Service では、アプリケーションコードは Worker インスタンス と呼ばれる VM 上に配置されて実行されます。スケールアウトを行うと、指定された数のインスタンスが確保されそれぞれのインスタンス上でアプリケーションコードが実行されます。
App Service の運用段階において、特定のインスタンスだけ動作が不安定になる場合があります。原因自体はアプリケーションの内部動作起因であったり、プラットフォーム起因であったり様々な要因が考えられますが、本記事では、アプリケーションを正常な状態に復旧させることを目的とした応急処置として
- 問題の発生しているインスタンスを見極める方法
- インスタンスを指定した再起動
- インスタンスの入れ替えを行う方法
の 3 点について紹介します。
問題の発生しているインスタンスを見極める方法
アプリケーションが不安定な状態(仮にHTTP 500 エラー発生している状況) になった場合、まずはその傾向を見極める必要があります。いつから発生しているのか、何件発生しているのか、すべてのインスタンスで発生しているのか、あるいは特定のインスタンスのみで発生しているのかといった情報を確認していきます。
手早く確認できる手段として、App Service のポータルの [メトリック] ブレードが利用できます。
例えば、HTTP 2xx の合計件数と、HTTP Server Errors の合計件数を並べて表示することでリクエストの傾向をつかむことができます。
また、その際に [分割を適用する] から、分割基準として [Instance] を選択することで、リクエストを処理したインスタンス毎のグラフが描画されます。
下記例では、RD0003FF47609F
というインスタンスに限って エラーが発生していることがわかります。
アプリケーションの稼働するインスタンスにはそれぞれ、インスタンス名が付与されています。アプリケーションからは環境変数 COMPUTERNAME
として参照することができます。
この値は例えば、AppServiceHTTPLogs
ではComputerName
として出力されています。
先の例の RD0003FF47609F
がインスタンス名となります。
インスタンスを指定した再起動
アプリケーションが不安定な状態となった場合、アプリケーションの再起動を行うことで事象が解消される可能性があり、一般的なワークアラウンドとしてサポートからお伝えさせていただくことも多くございます。 ただし、再起動に伴いユーザーエクスペリエンスに影響が出る可能性も考えられます。前述のように 問題の発生しているインスタンスが特定できた場合、そのインスタンスに限定して再起動を行う方法があります。
[問題の診断と解決]から、[高度なアプリケーション再起動 (Advanced Application Restart] を選択します。
メトリクスなどから確認した問題の発生しているインスタンス名 RD0003FF47609F
を選択して [再起動] 実行します。
インスタンスの入れ替えを行う方法
「高度なアプリケーション再起動」による処理は、インスタンス上で稼働するアプリケーションの再起動となります。アプリケーションのメモリ状態などに問題があった場合、アプリケーションの再起動で状態が改善する可能性がありますが、例えばインスタンスそのものに何らかの問題が発生していた場合においてはアプリケーションの再起動では状況が改善しない場合もあります。
そうした場合、インスタンスを破棄して新しいインスタンスを用意することが暫定対応策として有効となります。
インスタンスを入れ替える方法としては、スケールアップやスケールダウンなど SKU を変更することで発生させることが可能です。ただしこの場合、すべてのインスタンスの入れ替えが発生することになります。
特定のインスタンスのみを入れ替える方法としては、App Service Plans - Reboot Worker API を利用することができます。
先程取得したインスタンス名および、App Service Plan 名、リソースグループ名、サブスクリプションを指定して実行します。実行にはcurl 等のクライアントでも利用可能ですが、認証情報の設定の手間を考えると API リファレンスページ内の [使ってみる]からログインし、GUI 操作いただく方法が簡易です。
なお、インスタンスの入れ替えは App Service Plan 単位となります。同一 App Service Plan 上に複数のWeb Apps や Azure Functions リソースを展開している場合は影響を受けることに注意ください。 新しい用意されたインスタンスでは、この App Service Plan を利用している全てのリソース(Web Apps や Azure Functions) の初期化処理が行われることとなります。
以上、App Service 上でアプリケーションが不安定な状態になった際の応急処置についてご紹介させていただきました。
2022 年 12 月 29 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。