Python Web アプリを Azure にデプロイするためのローカル環境を構成する
この記事では、Python Web アプリを開発して Azure にデプロイするためのローカル環境をセットアップする手順について説明します。 Web アプリは、純粋な Python にすることも、一般的な Python ベースの Web フレームワーク (Django、Flask、FastAPI など) を使用することもできます。
ローカルで開発した Python Web アプリは、Azure App Service、Azure Container Apps、Azure Static Web Apps などのサービスにデプロイできます。 デプロイには多数のオプションがあります。 たとえば、App Service のデプロイでは、コード、Docker コンテナー、または静的 Web アプリからデプロイすることを選択できます。 コードからデプロイする場合は、Visual Studio Code、Azure CLI、ローカル Git リポジトリ、または GitHub アクションを使用してデプロイできます。 Docker コンテナーでデプロイする場合は、Azure Container Registry、Docker Hub、またはプライベート レジストリからデプロイできます。
この記事を読み進める前に、開発環境のセットアップに関するページで、Python と Azure 向けに開発環境をセットアップするためのガイダンスを確認することをお勧めします。 以下では、Python Web アプリの開発に限定したセットアップと構成について説明します。
Python Web アプリの開発用にローカル環境をセットアップしたら、次の各記事に進むことができるようになります。
- クイックスタート: Python (Django または Flask) Web アプリを Azure App Services で作成する
- チュートリアル: PostgreSQL を使用した Python (Django または Flask) Web アプリを Azure にデプロイする
- Flask Web アプリを作成し、システム割り当てマネージド ID を使用して Azure にデプロイする
Visual Studio Code を使用する
Visual Studio Code 統合開発環境 (IDE) では、Python Web アプリの開発と Web アプリが使用する Azure リソースの操作を簡単に行うことができます。
ヒント
Python 拡張機能がインストールされていることを確認します。 VS Code での Python の操作の概要については、VS Code での Python の使用方法に関する記事を参照してください。
VS Code では、VS Code 拡張機能を使用して Azure リソースを操作します。 拡張機能をインストールするには、拡張機能ビューまたは Ctrl + Shift + X キーを使用します。 Python Web アプリの場合は、次の拡張機能の 1 つ以上を使用する可能性があります。
Azure App Service 拡張機能は、Visual Studio Code から Azure App Service を操作できるようにします。 App Service では、Web サイトや Web API を含む Web アプリケーション用のフル マネージド ホスティングが提供されます。
Azure Static Web Apps 拡張機能は、VS Code から直接 Azure 静的 Web アプリを作成できるようにします。 Static Web Apps はサーバーレスであり、静的コンテンツ ホスティングに適しています。
コンテナーを使用する予定がある場合は、以下をインストールします。
コンテナーをローカルでビルドして操作するための Docker 拡張機能。 たとえば、Azure App Service で Web App for Containers を使用して、コンテナー化された Python Web アプリを実行できます。
Visual Studio Code からコンテナー化されたアプリを直接作成してデプロイするための Azure Container Apps 拡張機能。
Azure Storage、Azure Databases、Azure Resources 拡張機能など、その他の拡張機能があります。 上記またはその他の拡張機能は、必要に応じて随時追加できます。
Visual Studio Code の拡張機能には、一般的な IDE インターフェイスと同じようにアクセスでき、その際に VS Code コマンド パレットの充実したキーワード サポートを利用できます。 コマンド パレットにアクセスするには、Ctrl + Shift + P キーの組み合わせを使用します。 コマンド パレットは、Azure リソースに対して実行できるすべてのアクションを確認できる優れた手段です。 次のスクリーンショットは、App Service のアクションの一部を示しています。
Visual Studio Code での Dev Container の使用
Python 開発者は、特定のプロジェクト用に隔離された自己完結型の環境を作成するために、仮想環境をよく利用します。 仮想環境を利用すると、開発者はプロジェクトごとに依存関係やパッケージ、Python のバージョンを個別に管理できるため、異なるバージョンを必要とするプロジェクト間の競合を回避できます。
Python では virtualenv
や venv
などの環境管理ツールが一般的ですが、Visual Studio Code の Dev Container 拡張機能 (オープンな Dev Container 仕様に基づく) を使用すると、Docker コンテナーをフル機能のコンテナー化された開発環境として利用できます。 これにより、開発者は必要なツールや依存関係、拡張機能をすべて事前に構成して、再現性の高い一貫性のあるツール チェーンを定義できます。 つまり、システム要件、シェル構成、または他の言語全体を使用している場合は、開発コンテナーを使用して、基本的な Python 環境の外部に存在する可能性があるプロジェクトのすべての部分を明示的に構成できます。
たとえば、開発者は 1 つの Dev Container に、PostgreSQL データベース サーバー (プロジェクト用のデータベースとサンプル データを含む)、Redis サーバー、Nginx、フロントエンド コード、クライアント ライブラリ (React など) といった、プロジェクトに必要なものをすべて含めるように構成できます。 また、このコンテナーには、プロジェクト コード、Python ランタイム、適切なバージョンの Python プロジェクト依存関係が含まれることになります。 さらに、コンテナーではインストールする Visual Studio Code 拡張機能を指定できるため、チーム全体で同じツールを利用できます。 そのため、新しい開発者がチームに加わった際も、ツール、依存関係、データを含む環境全体をローカル マシンに複製するだけで、すぐに作業を開始してもらえます。
詳細については、「コンテナー内での開発」を参照してください。
Visual Studio 2022 での作業
Visual Studio 2022 は、Python アプリケーション開発と、Azure リソースにアクセスしてデプロイするための多くの組み込みツールと拡張機能をサポートする、フル機能の統合開発環境 (IDE) です。 Azure での Python Web アプリ開発に関するドキュメントの多くは Visual Studio Code の使用を前提としていますが、既に Visual Studio 2022 をインストールしており、.NET や C++ プロジェクトで使用している場合は、Visual Studio 2022 も最適な選択肢となります。
一般的に、Visual Studio 2022 での Python の使用に関するすべてのドキュメントについては、「Visual Studio | Python ドキュメント」を参照してください。
設定手順については、Visual Studio 2022 への Python ワークロードのインストール手順が記載された「Visual Studio での Python サポートのインストール」を参照してください。
Web 開発で Python を使用するための一般的なワークフローについては、「クイックスタート: Visual Studio を使用して初めての Python Web アプリを作成する」を参照してください。 この記事は、Python Web アプリケーションを 1 から構築する方法を理解するのに役立ちます (ただし、Azure へのデプロイは含まれていません)。
Visual Studio 2022 を使用した Azure リソースの管理と Azure へのデプロイについては、「Visual Studio を使用した Azure 開発」を参照してください。 ここでのドキュメントの多くは .NET に特化していますが、Azure リソースの管理と Azure へのデプロイに関するツールは、プログラミング言語に関係なく同じように機能します。
特定の Azure 管理タスクやデプロイ タスクに使用できる組み込みツールが Visual Studio 2022 にない場合はいつでも、Azure CLI コマンドを使用できます。
他の IDE を使用する
Azure を明示的にサポートしていない別の IDE で作業する場合は、Azure CLI を使用して Azure リソースを管理できます。 次のスクリーンショットでは、PyCharm IDE でシンプルな Flask Web アプリが開いています。 この Web アプリは、az webapp up
コマンドを使用して Azure App Service にデプロイできます。 スクリーンショットでは、この CLI コマンドが PyCharm の組み込みターミナル エミュレーター内で実行されています。 IDE に組み込みエミュレーターがない場合は、任意のターミナルで同じコマンドを使用できます。 いずれにしても、Azure CLI がコンピューターにインストールされていてアクセス可能であることが必要です。
Azure CLI コマンド
Azure CLI コマンドを使用して Web アプリをローカルで操作する場合は、一般に次のコマンドを使用します。
コマンド | 説明 |
---|---|
az webapp | Web アプリを管理します。 これには、Web アプリを作成するための create サブコマンドや、ローカル ワークスペースから作成とデプロイするための up サブコマンドが含まれます。 |
az container app | Azure Container Apps を管理します。 |
az staticwebapp | Azure Static Web Apps を管理します。 |
az group | リソース グループとテンプレート デプロイを管理します。 サブコマンド 使用して、Azure リソースを配置するリソース グループを作成する を作成します。 |
az appservice | App Service プランを管理します。 |
az config | Azure CLI の構成を管理します。 キーストロークを保存するために、他のコマンドで自動的に使用される既定の場所またはリソース グループを定義できます。 |
次に示す Azure CLI コマンドの例では、az webapp up を使用して、Web アプリと関連リソースの作成および Azure へのデプロイを 1 つのコマンドで行います。 コマンドは Web アプリのルート ディレクトリで実行します。
この例の詳細については、「クイックスタート: Python (Django または Flask) Web アプリを Azure App Service にデプロイする」を参照してください。
一部の Azure ワークフローでは、Azure Cloud Shell から Azure CLI を使用することもできます。 Azure Cloud Shell は、Azure リソースを管理するための、ブラウザーでアクセスできる対話形式の認証されたシェルです。
Azure SDK の主要なパッケージ
Python Web アプリでは、Azure SDK for Python を使用してプログラムで Azure サービスを参照できます。 この SDK については、Python 用 Azure ライブラリ (SDK) の使用に関するページで詳しく説明しています。 このセクションでは、Web 開発で使用するこの SDK の主要なパッケージについて簡単に説明します。 また、Azure リソースを使用してコードを認証するためのベスト プラクティスの例を示します。
次に示すのは、Web アプリ開発で一般に使用されるパッケージの一部です。 パッケージは、pip
を使用して仮想環境に直接インストールできます。 または、Python Package Index (Pypi) 名を requirements.txt ファイルに追加します。
SDK docs | インストール | Python Package Index |
---|---|---|
Azure Identity | pip install azure-identity |
azure-identity |
Azure Storage Blob | pip install azure-storage-blob |
azure-storage-blob |
Azure Cosmos DB | pip install azure-cosmos |
azure-cosmos |
Azure Key Vault シークレット | pip install azure-keyvault-secrets |
azure-keyvault-secrets |
azure-identity パッケージを使用すると、Web アプリで Microsoft Entra ID による認証が可能になります。 Web アプリ コードでの認証には、azure-identity
パッケージの DefaultAzureCredential を使用することをお勧めします。 Azure Storage にアクセスする方法の例を次に示します。 このパターンは他の Azure リソースでも同様です。
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)
DefaultAzureCredential
は、アカウント情報を取得するために、環境変数や Azure CLI サインイン情報など、事前に定義された場所を検索します。 DefaultAzureCredential
のロジックの詳細については、「Azure SDK for Python を使用して Azure サービスに対して Python アプリを認証する方法」を参照してください。
Python ベースの Web フレームワーク
Python Web アプリの開発では、多くの場合、Python ベースの Web フレームワークを使用します。 これらのフレームワークは、ページ テンプレート、セッション管理、データベース アクセス、HTTP 要求オブジェクトと応答オブジェクトへの簡単なアクセスなどの機能を提供します。 フレームワークを使用することで、共通の機能を手間なく利用できます。
3つの一般的なPython Webフレームワークには、Django、Flask、またはFastAPIがあります。 Azure では、この 3 つとその他の Web フレームワークを使用できます。
次の例では、こうしたフレームワークをローカルで簡単に使い始める方法を紹介します。 ここに示すコマンドを実行すると、最終的には Azure にデプロイできる単純なアプリケーションが作成されます。 コマンドは仮想環境内で実行します。
手順 1: pip でフレームワークをダウンロードします。
手順 2: ハローワールド アプリを作成する。
django-admin startproject コマンドを使用してサンプル プロジェクトを作成します。 このプロジェクトには、アプリを実行するためのエントリ ポイントである manage.py ファイルが含まれています。
django-admin startproject hello_world
手順 3: コードをローカルで実行します。
手順 4: hello world アプリを参照します。
この時点で、requirements.txt ファイルを追加し、その後に Web アプリを Azure にデプロイするか、Docker でコンテナー化してデプロイできます。