Azure 上の Python コードのリモート デバッグ

Visual Studio での Python サポートには、Azure App Service 上で実行されている Python コードをリモートでデバッグする機能が含まれています。 単純なリモート デバッグとは異なり、このシナリオの対象コンピューターには TCP 経由で直接アクセスできません。そのため Visual Studio は、HTTP 経由でデバッガー プロトコルを公開するプロキシを提供します。 Web テンプレートを使用して作成したプロジェクトでは、生成される web.debug.config ファイル内にこのプロキシが自動的に構成されます。 リモート デバッグは、「Azure App Service への発行」で説明している方法でプロジェクトのデバッグ構成を発行した場合にも有効になります。

Azure リモート デバッグは Web ソケットを使用するため、Azure Portal で App Service に対してソケットを有効にする必要があります。これを行うには、[設定] > [アプリケーションの設定] に移動し、[全般設定] > [Web ソケット][オン] にしてから [保存] を選択して変更を適用します。 ([デバッグ] の設定は、Python のデバッグには適用されません。)

Azure Portal での Web ソケットの有効化

プロジェクトが正しく配置され、Web ソケットが有効化されたら、Visual Studio のサーバー エクスプローラー ([表示] > [サーバー エクスプローラー]) から App Service にアタッチできます。 [Azure] > [App Service] の該当するリソース グループでサイトを見つけて右クリックし、[Attach Debugger (Python) (デバッガーのアタッチ (Python))] を選択します。 (なお、[デバッガーのアタッチ] コマンドは IIS 下で実行されている .NET アプリケーション用であり、.NET コードと Python アプリのホストが同じである場合にのみ役立ちます。)

下の「サーバー エクスプローラーを使用しないアタッチ」で説明するように、直接アタッチするための一連の手順が Visual Studio で示されます。 [Attach Debugger (Python) (デバッガーのアタッチ (Python))] コマンドが表示されない場合や Visual Studio をサイトにアタッチできない場合は、「Azure リモート デバッグのトラブルシューティング」をご覧ください。

アタッチが成功すると、Visual Studio がデバッガー ビューに切り替わり、ツールバーにデバッグ対象のプロセスが URI wss:// のように表示されます。

Azure App Service Web サイトのデバッグ

アタッチ後のデバッグ作業は通常のリモート デバッグとほぼ同じですが、いくつかの制約があります。 特に、受信要求を処理して FastCGI 経由で Python コードに委任する IIS Web サーバーには、要求の処理のタイムアウトがあります。これは既定では 90 秒です。 要求の処理にそれよりも長い時間がかかった場合 (たとえば、プロセスがブレークポイントで一時停止している場合など) は、IIS がプロセスを終了し、デバッグ セッションもただちに終了します。

サーバー エクスプ ローラーを使用しないアタッチ

デバッガーを直接 App Service にアタッチするには、Visual Studio がサイトの <site_url>/ptvsd (例: ptvsdemo.azurewebsites.net/ptvsd) に配置する WebSocket プロキシの情報ページに記載された手順に従ってください。 このページにアクセスすると、プロキシが正しく構成されていることも確認できます。

Azure リモート デバッグ プロキシの情報ページ

説明にあるように、プロジェクトが発行されるたびに再生成される web.debug.config ファイル内のシークレットを使用して、URL を作成する必要があります。 このファイルは既定ではソリューション エクスプローラーで表示されず、プロジェクトにも含まれないため、すべてのファイルを表示するか、別のエディターでこのファイルを開く必要があります。 ファイルを開いたら、appSetting の WSGI_PTVSD_SECRET という名前の値をメモします。

Azure App Service 内のデバッガー エンドポイントの特定

URL は wss://<secret>@<site_name>.azurewebsites.net/ptvsd の形式にする必要があります。そこで、文字列内の <secret> と <site_name> を実際の値で置き換えます。

デバッガーをアタッチするには、[デバッグ] > [プロセスにアタッチ] を選択します。[トランスポート] ドロップダウンで [Python remote debugging (Python リモート デバッグ)] を選択し、[修飾子] テキスト ボックスに URL を入力して、Enter キーを押します。 Visual Studio が App Service への接続に成功すると、一覧に 1 つの Python プロセスが表示されます。 このプロセスを選択し、[アタッチ] を選択してデバッグを開始します。

[プロセスにアタッチ] ダイアログを使用した Azure Web サイトへの接続