Azure 上の Python コードのリモート デバッグRemotely debugging Python code on Azure

Visual Studio での Python サポートには、Azure App Service 上で実行されている Python コードをリモートでデバッグする機能が含まれています。Python support in Visual Studio includes the ability to remotely debugging Python code that's running on Azure App Service. 単純なリモート デバッグとは異なり、このシナリオの対象コンピューターには TCP 経由で直接アクセスできません。そのため Visual Studio は、HTTP 経由でデバッガー プロトコルを公開するプロキシを提供します。Unlike simple remote debugging, the target computer in this scenario is not directly accessible over TCP, so Visual Studio provides a proxy that exposes the debugger protocol over HTTP. Web テンプレートを使用して作成したプロジェクトでは、生成される web.debug.config ファイル内にこのプロキシが自動的に構成されます。Projects created using the Web template automatically configure this proxy in the generated web.debug.config file. リモート デバッグは、「Azure App Service への発行」で説明している方法でプロジェクトのデバッグ構成を発行した場合にも有効になります。Remote debugging is also enabled when you publish a Debug configuration of your project as described on Publishing to Azure App Service.

Azure リモート デバッグは Web ソケットを使用するため、Azure Portal で App Service に対してソケットを有効にする必要があります。これを行うには、[設定] > [アプリケーションの設定] に移動し、[全般設定] > [Web ソケット][オン] にしてから [保存] を選択して変更を適用します。Because Azure remote debugging uses web sockets, sockets must be enabled for your App Service through the Azure portal by going to Settings > Application settings and turning General settings > Web sockets to On, then selecting Save to apply the change. ([デバッグ] の設定は、Python のデバッグには適用されません。)(Note that the Debugging settings do not apply to debugging Python.)

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

プロジェクトが正しく配置され、Web ソケットが有効化されたら、Visual Studio のサーバー エクスプローラー ([表示] > [サーバー エクスプローラー]) から App Service にアタッチできます。Once your project is properly deployed and web sockets enabled, you can attach to the App Service from Server Explorer in Visual Studio (View > Server Explorer). [Azure] > [App Service] の該当するリソース グループでサイトを見つけて右クリックし、[Attach Debugger (Python) (デバッガーのアタッチ (Python))] を選択します。Locate your site under Azure > App Service and the applicable resources group, right-click, and select Attach Debugger (Python). ([デバッガーのアタッチ] コマンドは IIS 下で実行されている .NET アプリケーション用であり、.NET コードと Python アプリのホストが同じである場合にのみ役立ちます)。(The Attach Debugger command as that's for .NET applications running under IIS, and is useful only if you co-host .NET code alongside your Python app.)

下の「サーバー エクスプローラーを使用しないアタッチ」で説明するように、直接アタッチするための一連の手順が Visual Studio で示されます。Visual Studio may take you directly to a set of instructions for attaching directly, as described below in Attaching without Server Explorer. [Attach Debugger (Python) (デバッガーのアタッチ (Python))] コマンドが表示されない場合や Visual Studio をサイトにアタッチできない場合は、「Azure リモート デバッグのトラブルシューティング」をご覧ください。If you do not see the Attach Debugger (Python) command or Visual Studio fails to attach to your site, see Troubleshooting Azure remote debugging.

アタッチが成功すると、Visual Studio はデバッガー ビューに切り替わります。If the attach is successful, Visual Studio switches to a debugger view. ツールバーには、wss:// URI などのプロセスのデバッグ状況が表示されます。The toolbar indicates the process being debugged such as a wss:// URI:

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

アタッチ後のデバッグ作業は通常のリモート デバッグとほぼ同じですが、いくつかの制約があります。Once attached, the debugging experience is mostly the same as for regular remote debugging subject to a few constraints. 特に、受信要求を処理して FastCGI 経由で Python コードに委任する IIS Web サーバーには、要求の処理のタイムアウトがあります。これは既定では 90 秒です。In particular, the IIS web server that handles incoming requests and delegates them to Python code via FastCGI has a timeout for request handling, which defaults to 90 seconds. 要求の処理にタイムアウトよりも長い時間がかかった場合 (たとえば、プロセスがブレークポイントで一時停止している場合など) は、IIS がプロセスを終了し、デバッグ セッションも終了します。If request handling takes longer than that timeout (for example, because of the process being paused at a breakpoint), IIS terminates the process, ending your debugging session.

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

デバッガーを直接 App Service にアタッチするには、Visual Studio がサイトの <site_url>/ptvsd (例: ptvsdemo.azurewebsites.net/ptvsd) に配置する WebSocket プロキシの情報ページに記載された手順に従ってください。To attach the debugger directly to App Service, follow the instructions given on the WebSocket proxy info page that Visual Studio deploys to your site at <site_url>/ptvsd such as ptvsdemo.azurewebsites.net/ptvsd. このページにアクセスすると、プロキシが正しく構成されていることも確認できます。Visiting this page also verifies that the proxy is correctly configured:

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

説明に従って、プロジェクトが発行されるたびに再生成される web.debug.config ファイル内のシークレットを使用して、URL を作成します。As instructed, construct a URL using the secret from web.debug.config, which is regenerated every time your project is published. このファイルは既定ではソリューション エクスプローラーで表示されず、プロジェクトにも含まれないため、すべてのファイルを表示するか、別のエディターでこのファイルを開きます。This file is hidden by default in Solution Explorer and not included in your project, so show all files or open it in a separate editor. ファイルを開いたら、appSetting の WSGI_PTVSD_SECRET という名前の値を確認します。Once you've opened the file, look at the value of the appSetting named WSGI_PTVSD_SECRET:

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

URL は wss://<secret>@<site_name>.azurewebsites.net/ptvsd の形式にする必要があります。そこで、文字列内の <secret> と <site_name> を実際の値で置き換えます。The URL you now need is in the form wss://<secret>@<site_name>.azurewebsites.net/ptvsd where you replace <secret>and <site_name> in the string with your specific values.

デバッガーをアタッチするには、[デバッグ] > [プロセスにアタッチ] を選択します。[トランスポート] ドロップダウンで [Python remote debugging (Python リモート デバッグ)] を選択し、[修飾子] テキスト ボックスに URL を入力して、Enter キーを押します。To attach the debugger, select Debug > Attach to Process, select Python remote debugging in the Transport dropdown, enter the URL into the Qualifier textbox, and press Enter. Visual Studio が App Service への接続に成功すると、一覧に 1 つの Python プロセスが表示されます。If Visual Studio can successfully connect to App Service, it shows a single Python process in the list. このプロセスを選択し、[アタッチ] を選択してデバッグを開始します。Select it and then Attach to start debugging:

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