Python 用 Azure クラウド サービス プロジェクトAzure Cloud Service Projects for Python

Visual Studio は、Python を使用して Azure Cloud Services の作成に使用できるテンプレートを提供しています。Visual Studio provides templates to help you get started creating Azure Cloud Services using Python.

クラウド サービスは、任意の数の worker ロールWeb ロールから構成され、それぞれが概念的に独立したタスクを実行しますが、規模拡張の必要に応じて仮想マシン間で個別にレプリケートできます。A Cloud Service consists of any number of worker roles and web roles, each of which performs a conceptually separate task but can be separately replicated across visual machines as needed for scaling. Web ロールでは、フロントエンド Web アプリケーションのホスティングが提供されます。Web roles provide hosting for front-end web applications. Python が接続されている場合、WSGI をサポートする任意の Web フレームワークを使用して、このようなアプリケーションを作成できます (Web プロジェクト テンプレートでサポート)。Where Python is concerned, any web framework that supports WSGI can be used to write such an application (as supported by the Web Project Template). worker ロールは、ユーザーと直接対話しない長時間実行されるプロセスを意図しています。Worker roles are intended for long-running processes that do not interact directly with users. 通常、これらは pip install azure でインストールできるデータ ライブラリとアプリ サービス ライブラリを利用します。They typically make use of the data and app service libraries, which may be installed with pip install azure.

このトピックでは、Visual Studio 2017 のプロジェクト テンプレートとその他のサポートについて詳しく説明します (以前のバージョンも同様ですが、いくつかの違いがあります)。This topic contains details about the project template and other support in Visual Studio 2017 (earlier versions are similar, but with some differences). Python からの Azure の操作について詳しくは、Azure Python デベロッパー センターをご覧ください。For more about working with Azure from Python, visit the Azure Python Developer Center.

プロジェクトを作成するCreate a project

  1. クラウド サービス テンプレートを使用するために必要な Azure .NET SDK for Visual Studio をインストールします。Install the Azure .NET SDK for Visual Studio, which is required to use the Cloud Service template.
  2. Visual Studio で、[ファイル] > [新規] > [プロジェクト...] を選択し、"Azure Python" を検索して [Azure クラウド サービス] を一覧から選びます。In Visual Studio, select File > New > Project..., then search for "Azure Python" and select Azure Cloud Service from the list:

    Python 用 Azure クラウド プロジェクト テンプレート

  3. 含める 1 つ以上のロールを選びます。Select one or more roles to include. クラウド プロジェクトは、異なる言語で記述されたロールを結合できるため、アプリケーションの各部分を最も適した言語で簡単に記述できます。Cloud projects may combine roles written in different languages, so you can easily write each part of your application in the most suitable language. このダイアログの完了後に新しいロールをプロジェクトに追加するには、ソリューション エクスプローラーで [ロール] を右クリックし、[追加] の下で項目の 1 つを選びます。To add new roles to the project after completing this dialog, right-click Roles in Solution Explorer and select one of the items under Add.

    Azure クラウド プロジェクト テンプレートでのロールの追加

  4. 個々のロール プロジェクトが作成されるときに、Django、Bottle、Flask フレームワークなどの追加の Python パッケージの 1 つを使用するロールを選んだ場合は、これらをインストールするように求めるプロンプトが表示されることがあります。As the individual role projects are created, you may be prompted to install additional Python packages, such as the Django, Bottle, or Flask frameworks if you selected a role that uses one of those.

  5. プロジェクトに新しいロールを追加すると、構成手順がいくつか表示されます。After adding a new role to your project, configuration instructions appear. 構成の変更は通常必要ありませんが、プロジェクトの将来のカスタマイズに役立つ場合があります。Configuration changes are usually unnecessary, but may be useful for future customization of your projects. 同時に複数のロールを追加する場合は、最後のロールについての説明のみ開いたままになります。Note that when adding multiple roles at the same time, only the instructions for the last role remain open. ただし、他のロールの手順とトラブルシューティングのヒントは、ロールの ルートまたは bin フォルダーにあるそれぞれの readme.mht ファイルで参照できます。However, you can find the instructions and troubleshooting tips for the other roles in their respective readme.mht files, located either in the role's root or in the bin folder.

  6. プロジェクトの bin フォルダーには、Python のインストール、プロジェクトの requirements.txt ファイル、必要な場合に IIS の設定など、リモート仮想マシンの構成に使用する 1 つまたは 2 つの PowerShell スクリプトも含まれています。A project's bin folder also contains one or two PowerShell scripts that are used to configure the remote virtual machine, including installing Python, any requirements.txt file in your project, and setting up IIS if necessary. デプロイでの必要に応じてこれらのファイルを編集できますが、最も一般的なオプションは他の方法で管理できます (下の「ロールのデプロイを構成する」をご覧ください)。You may edit these files as desired to your deployment, though most common options can be managed in other ways (see Configuring role deployment below). これらのファイルが使用可能でない場合はレガシ構成スクリプトが代わりに使用されるため、これらのファイルの削除はお勧めしません。We do not suggest removing these files, as a legacy configuration script is used instead if the files are not available.

    worker ロールのサポート ファイル

    これらの構成スクリプトを新しいプロジェクトに追加するには、プロジェクトを右クリックし、[追加] > [新しい項目...] を選び、[Web ロール サポート ファイル] または [worker ロール サポート ファイル] のいずれかを選びます。To add these configuration scripts to a new project, right-click the project, select Add > New Item..., and select either Web Role Support Files or Worker Role Support Files.

ロールのデプロイを構成するConfiguring role deployment

ロール プロジェクトの bin フォルダー内の PowerShell スクリプトは、そのロールのデプロイを制御し、編集して構成をカスタマイズできます。The PowerShell scripts in a role project's bin folder control the deployment of that role and may be edited to customize the configuration:

  • ConfigureCloudService.ps1 は、通常は従属物をインストールして構成し、Python のバージョンを設定するために Web ロールと worker ロールに使用されます。ConfigureCloudService.ps1 is used for web and worker roles, typically to install and configure dependencies and set the Python version.
  • LaunchWorker.ps1 は worker ロールにのみ使用され、起動の動作の変更、コマンドライン引数の追加、環境変数の追加に使用されます。LaunchWorker.ps1 is used only for worker roles and is used to change startup behavior, add command-line arguments, or add environment variables.

どちらのファイルにも、カスタマイズの手順が含まれます。Both files contain instructions for customization. メインのクラウド サービス プロジェクトの ServiceDefinition.csdef ファイルに別のタスクを追加し、PYTHON 変数をインストールされている python.exe (または同等の) パスに設定することで、独自のバージョンの Python をインストールすることもできます。You can also install your own version of Python by adding another task to the main cloud service project's ServiceDefinition.csdef file, setting the PYTHON variable to its installed python.exe (or equivalent) path. PYTHON が設定されている場合、Python は NuGet からインストールされません。When PYTHON is set, Python is not installed from NuGet.

追加の構成は、次のように実行できます。Additional configuration can be accomplished as follows:

  1. プロジェクトのルート ディレクトリ内の requirements.txt ファイルを更新することで、pip を使用してパッケージをインストールします。Install packages using pip by updating the requirements.txt file in the root directory of your project. ConfigureCloudService.ps1 スクリプトによってデプロイ時にこのファイルがインストールされます。The ConfigureCloudService.ps1 script installs this file on deployment.
  2. web.config ファイル (Web ロール) または ServiceDefinition.csdef ファイル (worker ロール) の Runtime セクションを変更することで、環境変数を設定します。Set environment variables by modifying your web.config file (web roles) or the Runtime section of your ServiceDefinition.csdef file (worker roles).
  3. ServiceDefinitions.csdef ファイルの Runtime/EntryPoint セクションでコマンド ラインを変更して、worker ロールに使用するスクリプトと引数を指定します。Specify the script and arguments to use for a worker role by modifying the command line in the Runtime/EntryPoint section of your ServiceDefinitions.csdef file.
  4. web.config ファイルを通じて、Web ロールのメイン ハンドラー スクリプトを設定します。Set the main handler script for a web role through the web.config file.

ロールのデプロイをテストするTesting role deployment

ロールの書き込み中に、クラウド サービス エミュレーターを使用してクラウド プロジェクトをローカルでテストできます。While writing your roles, you can test your cloud project locally using the Cloud Service Emulator. エミュレーターは Azure SDK Tools に含まれるもので、クラウド サービスが Azure に発行されるときに使用される環境の制限付きバージョンです。The emulator is included with the Azure SDK Tools and is a limited version of the environment used when your Cloud Service is published to Azure.

エミュレーターを起動するには、最初に右クリックして [スタートアップ プロジェクトに設定] を選択して、クラウド プロジェクトがソリューションのスタートアップ プロジェクトであることを確認します。To start the emulator, first ensure your cloud project is the startup project in your solution by right-clicking and selecting Set as startup project. 次に、[デバッグ] > [デバッグの開始] (F5) または [デバッグ] > [デバッグなしで開始] (Ctrl+F5) を選択します。Then select Debug > Start Debugging (F5) or Debug > Start without Debugging (Ctrl+F5).

エミュレーターでの制限により、Python コードをデバッグすることはできません。Note that due to limitations in the emulator it is not possible to debug your Python code. したがって、ロールを個別に実行し、発行する前に統合テストにエミュレーターを使用してロールをデバッグすることをお勧めします。We thus recommend you debug roles by running them independently, and then use the emulator for integration testing before publishing.

ロールをデプロイするDeploying a role

発行ウィザードを開くには、ソリューション エクスプローラーでロール プロジェクトを選び、メイン メニューから [ビルド] > [発行] を選択するか、プロジェクトを右クリックして [発行] を選択します。To open the Publish wizard, select the role project in Solution Explorer and select Build > Publish from the main menu, or right-click the project and select Publish.

発行プロセスには 2 つのフェーズが含まれます。The publishing process involves two phases. まず、Visual Studio で、クラウド サービスのすべてのロールを含む 1 つのパッケージを作成します。First, Visual Studio creates a single package containing all the roles for your cloud service. このパッケージは Azure にデプロイされるもので、ロールごとに 1 台以上の仮想マシンを初期化し、ソースをデプロイします。This package is what's deployed to Azure, which initializes one or more virtual machines for each role and deploy the source.

各仮想マシンがアクティブになると、ConfigureCloudService.ps1 スクリプトを実行し、すべての従属物をインストールします。As each virtual machine activates, it executes the ConfigureCloudService.ps1 script and install any dependencies. 既定では、このスクリプトは Python の最新バージョンを NuGet からインストールし、requirements.txt ファイルで指定されたパッケージをインストールします。This script by default installs a recent version of Python from NuGet and any packages specified in a requirements.txt file.

最後に、worker ロールは Python スクリプトの実行を開始する LaunchWorker.ps1 を実行します。Web ロールは IIS を初期化し、Web 要求の処理を開始します。Finally, worker roles execute LaunchWorker.ps1, which starts running your Python script; web roles initialize IIS and begin handling web requests.

依存関係Dependencies

クラウド サービスでは、ConfigureCloudService.ps1 スクリプトは pip を使用して Python の従属物のセットをインストールします。For Cloud Service, the ConfigureCloudService.ps1 script uses pip to install a set of Python dependencies. 依存関係は、requirements.txt という名前のファイルで指定する必要があります (ConfigureCloudService.ps1 を変更することでカスタマイズできます)。Dependencies should be specified in a file named requirements.txt (customizable by modifying ConfigureCloudService.ps1). ファイルは初期化の一部として pip install -r requirements.txt で実行されます。The file is executed with pip install -r requirements.txt as part of initialization.

クラウド サービス インスタンスには C コンパイラが含まれていないため、C の拡張子を持つすべてのライブラリはコンパイル済みのバイナリを提供する必要があります。Note that Cloud Service instances do not include C compilers, so all libraries with C extensions must provide pre-compiled binaries.

pip とその従属物に加えて requirements.txt 内のパッケージが自動的にダウンロードされ、課金対象の帯域幅の使用としてカウントされる可能性があります。pip and its dependencies, as well as the packages in requirements.txt, are downloaded automatically and may count as chargeable bandwidth usage. requirements.txt ファイルの管理について詳しくは、「必要なパッケージの管理」をご覧ください。See Managing required packages for details on managing requirements.txt files.

トラブルシューティングTroubleshooting

デプロイ後に Web または worker ロールが正常に動作しない場合は、以下を確認します。If your web or worker role does not behave correctly after deployment, check the following:

  • Python プロジェクトの bin\ フォルダーに (少なくとも) 以下が含まれること。Your Python project includes a bin\ folder with (at least):

    • ConfigureCloudService.ps1
    • LaunchWorker.ps1 (worker ロールの場合)LaunchWorker.ps1 (for worker roles)
    • ps.cmd
  • Python プロジェクトに、すべての従属物 (またはホイール ファイルのコレクション) を一覧する requirements.txt ファイルが含まれること。Your Python project includes a requirements.txt file listing all dependencies (or alternately, a collection of wheel files).

  • クラウド サービスでリモート デスクトップを有効にし、ログ ファイルを調査します。Enable Remote Desktop on your Cloud Service and investigate the log files.
  • ConfigureCloudService.ps1LaunchWorker.ps1 のログがリモート マシン上の C:\Resources\Directory\%RoleId%.DiagnosticStore\LogFiles フォルダーに格納されていること。Logs for ConfigureCloudService.ps1 and LaunchWorker.ps1 are stored in C:\Resources\Directory\%RoleId%.DiagnosticStore\LogFiles folder on the remote machine.
  • Web ロールが web.config に構成されているパス (WSGI_LOG appSetting のパス) に追加のログを書き込めること。Web roles may write additional logs to a path configured in web.config, namely the path in the WSGI_LOG appSetting. ほとんどの標準的な IIS または FastCGI ロギングも動作すること。Most regular IIS or FastCGI logging also works.
  • 現在、LaunchWorker.ps1.log ファイルは Python の worker ロールによって表示される出力またはエラーを表示する唯一の方法です。Currently, the LaunchWorker.ps1.log file is the only way to view output or errors displayed by your Python worker role.