概要: MongoDB を使用した Azure 上のコンテナー化された Python Web アプリ
このチュートリアルでは、Python Web アプリをコンテナー化して Azure にデプロイする方法について説明します。 1 つのコンテナー Web アプリを Azure App Service でホストし、そのアプリで Azure Cosmos DB 対応 MongoDB を使用してデータを保存します。 App Service の Web App for Containers を使用すると、基になるコンテナー オーケストレーターの管理と保守について心配することなく、コンテナーの作成に集中できます。 Web アプリをビルドする場合、Azure App Service は、コンテナーを使用して最初の手順を実行するのに適したオプションです。 Azure でのコンテナーの使用について詳しくは、Azure コンテナーのオプションの比較に関するページを参照してください。
このチュートリアルでは、次のことについて説明します。
Docker コンテナーをローカルでビルドして実行する。 この手順は必須ではありません。
Docker コンテナー イメージを Azure で直接ビルドする。
App Service を構成して、Docker コンテナー イメージに基づいて Web アプリを作成する。
このチュートリアルに従うと、Azure への Python Web アプリの継続的インテグレーション (CI) と継続的デプロイ (CD) の基礎を習得できます。
サービスの概要
このチュートリアルをサポートするサービス図には、2 つの環境 (開発環境と Azure) と、このチュートリアルで使用されるさまざまな Azure サービスが示されています。
上の図に示されている、このチュートリアルをサポートするコンポーネントは次のとおりです。
-
コンテナー化を可能にする基になる App Service 機能は、Web App for Containers です。 Azure App Service では、組み込みイメージとカスタム イメージの両方をホストするために、Docker コンテナー テクノロジが使用されます。 このチュートリアルでは、Python コードからイメージをビルドし、それを Web App for Containers にデプロイします。
Web App for Containers は、レジストリ内の Webhook を使用して、新しいイメージの通知を受け取ります。 リポジトリに新しいイメージをプッシュすると、それがトリガーとなって App Service がイメージをプルし、再起動します。
-
Azure Container Registry を使用すると、Azure で Docker イメージとそのコンポーネントを操作できます。 Azure でのデプロイに近いレジストリが提供され、アクセスを制御できるため、Microsoft Entra グループとアクセス許可を使用できます。
このチュートリアルでは、レジストリ ソースは Azure Container Registry ですが、Docker Hub またはプライベート レジストリを少々変更して使用することもできます。
-
Azure Cosmos DB for MongoDB は、このチュートリアルでデータを格納するために使用される NoSQL データベースです。
Azure Cosmos DB リソースへのアクセスは、コンテナー化されたアプリに環境変数として渡される接続文字列を介して行われます。
認証
このチュートリアルでは、Docker イメージを (ローカルまたは Azure で直接) ビルドし、それを Azure App Service にデプロイします。 App Service は、Azure Container Registry リポジトリからコンテナー イメージをプルします。
App Service は、マネージド ID を使用して、Azure Container Registry からイメージをプルします。 マネージド ID を使用すると、Web アプリにアクセス許可を付与できます。これにより Web アプリは、資格情報を指定することなく、他の Azure リソースにアクセスできます。 具体的には、このチュートリアルでは、システム割り当てマネージド ID を使用します。 レジストリ コンテナー イメージを使用するために、App Service のセットアップ時にマネージド ID を構成します。
このチュートリアルのサンプル Web アプリでは、データを保存するために MongoDB を使用します。 サンプル コードは、接続文字列経由で Azure Cosmos DB に接続します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
以下を作成できる Azure アカウント:
- Azure Container Registry
- Azure App Service
- Azure Cosmos DB for MongoDB (または同等のアクセス)。 MongoDB 用 Azure Cosmos DB データベースを作成するには、このチュートリアルのパート 2 の手順に従うことをお勧めします。
Visual Studio Code または Azure CLI (使用するツールに基づく)。
- Visual Studio Code の場合、Docker 拡張機能と Azure App Service 拡張機能が必要になります。
Python パッケージ:
- MongoDB に接続するための PyMongo 。
- Web フレームワークとしての Flask または Django。
ローカルにインストールされた Docker (コンテナーをローカルで実行する場合)。
サンプル アプリ
この Python サンプル アプリは、レストランとレビューのデータを MongoDB に保存するレストラン レビュー アプリです。 PostgreSQL を使用する Web アプリの例については、「マネージド ID を使用して Flask Web アプリを作成して Azure にデプロイする」を参照してください。
このチュートリアルを終了すると、次のスクリーンショットのように、レストラン レビュー アプリが Azure にデプロイされ実行されます。