Freigeben über


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 の記事はこちらからご覧ください。