Azure Web Sites のリモート デバッグの概要 (パート 3) - マルチインスタンス環境と GIT
このポストは、5 月 8 日に投稿された Introduction to Remote Debugging on Azure Web Sites part 3 – Multi-Instance environment and GIT (著者: Jaime Espinosa) の翻訳です。
編集メモ: 今回は、Azure Web Sites チームでプログラム マネージャーを務める Jaime Espinosa による記事をご紹介します。
Azure Web Sites のリモート デバッグに関する過去 2 回の記事では、Visual Studio を Azure に接続する方法と、そのしくみについて見てきました。3 回目で最後となるこの記事では、より高度なシナリオについて見ていきたいと思います。複数あるインスタンスのうち、特定のインスタンスをデバッグしたい場合は、サーバー側のインフラストラクチャがこれに対応します。ここでは、最初にマルチインスタンス (複数インスタンス) の背景について簡単に説明し、続いて目的のインスタンスを指定する方法を説明します。
マルチインスタンスには、「サイトのビジター セッションが 1 つのインスタンスにローカル保存される」という問題があり、「ビジターに対する一貫性の維持 (visitor stickiness)」という概念が必要になります。ビジターが初めて Web サイトに訪れると、(無作為または負荷/慣例に従い) インスタンスが選択され、「後続」の呼び出しは「必ず」同じインスタンスに対して行われます。これには Cookie が使用されます。Azure にホストされている Web サイトにクライアント (ブラウザー) が初めて訪れると、Cookie がクライアントにダウンロードされます。その後、Web サイトに対する呼び出しは Cookie に定義されているインスタンスに転送されます。
インスタンスの定義
インスタンスの定義には Cookie と ARRaffinity キーを使用します。一意の「値」が各インスタンスに無作為に割り当てられます。インスタンスの指定は最新版の Azure SDK でもまだサポートされていませんが、デバッグしたいインスタンスは手動で指定できます。詳細については、本シリーズの最初の記事の「Visual Studio リモート デバッガーを Azure Web Sites に接続する」セクションを参照してください。
ユーザー名にハッシュ (#) と ARR Affinity Cookie の最初の数文字を追加します。デバッガーは「次の値で始まる」という条件を使用して検索するので、5 文字で十分です。たとえば、「jaime_e#55f03」のユーザー名は「jaime_e」で、「55f03」は ARR Cookie の最初の 5 文字です。
ヒント: 資格情報を Visual Studio に保存 (Visual Studio は Windows 資格情報マネージャーを使用) した場合は、“Control Panel\User Accounts and Family Safety\Credential Manager” にアクセスして資格情報を削除した後、Visual Studio を再起動します。
インスタンス値を見つける
インスタンスの ARRaffinity は、クライアントに保存されている Cookie から読み取ります。クライアントがブラウザーである場合は通常、開発者ツールに Cookie の管理および表示用のツールがあります。Internet Explorer (英語) と Chrome (英語) では、F12 キーを押すと開発者向けのコンソールが表示されます。クライアントの種類や Cookie の管理方法に応じて ARRaffinity の値を読み取る方法は異なります。
Azure Web Sites でのリモート デバッガーと GIT デプロイメントの使用
Azure Web Sites では、GIT を使用してデプロイされたソース コードに対するリモート デバッグが既定で有効になっています。GIT を使用してデプロイされたソース コードはサーバー側でコンパイルされます。シンボル ファイル (pdb) は常に生成されますが、コードのコンパイルは既定でデバッグではなくパフォーマンス重視の最適化が行われます。
リモート デバッグの使用を有効にする方法は 2 つあり、1 つはソース コードをデバッグ構成で再度デプロイする (再コンパイルをトリガーする) 方法、もう 1 つは「Just My Code (マイ コードのみ)」デバッグを無効にする方法です。
次のいずれかの方法を使用して、明示的にコンパイラをデバッグ用に最適化する必要があります。
デバッグ用にコンパイラを構成
GIT を使用してデプロイされたソース コードがコンパイルされると、SCM_BUILD_ARGS キーにあるコンパイラ フラグが渡されます。
ポータルを使用してフラグを追加する
Azure ポータルの Web サイトの [Configure] タブにある [app settings] セクションにコードのコンパイル時に使用するキー/値のペア (Key= SCM_BUILD_ARGS, Value= -p:Configuration=Debug) を追加します。
フラグを msbuild コマンドに追加する
コンパイル フラグを .deployment ファイル (英語) で指定することもできます。これは設定をリポジトリの一部として使用したい場合に便利です。ただし、既定のコマンド ラインの先行する部分をオーバーライドしてしまうので注意してください。
SCM_BUILD_ARGS=-p:Configuration=Debug
リモート デバッグを開始する
これでリモート デバッグを行う準備ができました。Azure Web Sites の MSVSMON には、pdb ファイルがサーバー上にあるがクライアントにはない場合にリモート デバッグを有効にする、という変更が加えられており、自動的に有効になるので何もする必要はありません。使用を開始する手順については、本シリーズの最初の記事の「Visual Studio のリモート デバッガーを Azure Web Sites に接続する」セクションに説明があります。
Azure Web Sites における GIT の詳細については、GitHub Project Kudu (英語) ページを参照してください。
まとめ
このシリーズ記事では、リモート デバッグについてさまざまな角度から解説し、これを活用してより簡単に作業をこなせるようにするためのツールや情報を紹介しました。デバッグについては他にもさまざまな情報がありますが、本シリーズ記事が皆様の堅牢で安定したアプリケーション作成の一助となれば幸いです。
本シリーズの最初の記事はこちらからお読みいただけます。
本シリーズのパート 2 の記事はこちらからご覧ください。