概要: Azure Container Apps に Python Web アプリをデプロイする

このチュートリアルでは、Python Web アプリをコンテナー化して Azure Container Apps にデプロイする方法について説明します。 サンプル Web アプリがコンテナー化され、Docker イメージが Azure Container Registry に格納されます。 Azure Container Apps は、Container Registry から Docker イメージをプルし、コンテナーを作成するように構成されています。 サンプル アプリは、Azure Database for PostgreSQL に接続して Container Apps と他の Azure リソース間の通信方法を示します。

クラウド ネイティブおよびコンテナー化された Python Web アプリを Azure でビルドしてデプロイするためのオプションがいくつかあります。 このチュートリアルでは、Azure Container Apps について説明します。 Container Apps は、汎用コンテナー (特に、コンテナーにデプロイされた多くのマイクロサービスにまたがるアプリケーション向け) を実行するのに適しています。 このチュートリアルでは、1 つのコンテナーを作成します。 Python Web アプリをコンテナーとして Azure App Service にデプロイするには、App Service のコンテナー化された Python Web アプリに関するページを参照してください。

このチュートリアルでは、次を行います。

  • Python Web アプリから Docker イメージをビルドし、そのイメージを Azure Container Registry に格納します。
  • Docker イメージをホストするように Azure Container Apps を構成します。
  • GitHub リポジトリへの変更をトリガーに、新しい Docker イメージでコンテナーを更新する GitHub アクションを設定します。 この最後の手順は省略可能です。

このチュートリアルに従って、Azure への Python Web アプリの継続的インテグレーション (CI) と継続的デプロイ (CD) を設定します。

サービスの概要

このチュートリアルに対応したサービス図は、ローカル環境、GitHub リポジトリ、Azure サービスが、このチュートリアルでどのように使用されるかを示しています。

A screenshot of the environments and services used in the Tutorial - Deploy a Python App on Azure Container Apps.

上の図に示されている、このチュートリアルをサポートするコンポーネントは次のとおりです。

  • Azure Container Apps

    • Azure Container Apps を使用すると、サーバーレス プラットフォームでマイクロサービスとコンテナー化されたアプリケーションを実行できます。 サーバーレス プラットフォームは、最小限の構成でコンテナーを実行する利点を享受できることを意味します。 Azure Container Apps を使用すると、HTTP トラフィック、イベントドリブン処理、CPU やメモリの負荷などの特性に基づいてアプリケーションを動的にスケーリングすることができます。
    • Container Apps は、Azure Container Registry から Docker イメージをプルします。 コンテナー イメージを変更すると、デプロイされたコンテナーの更新がトリガーされます。 更新をトリガーするように GitHub Actions を構成することもできます。
  • Azure Container Registry

    • Azure Container Registry を使用すると、Azure で Docker イメージを操作できます。 Container Registry は Azure のデプロイに近いため、アクセスを制御でき、Microsoft Entra グループとアクセス許可を使用して Docker イメージへのアクセスを制御できます。
    • このチュートリアルでは、レジストリ ソースは Azure Container Registry ですが、Docker Hub またはプライベート レジストリを少々変更して使用することもできます。
  • Azure Database for PostgreSQL

    • サンプル コードで、PostgreSQL データベースにアプリケーション データが格納されます。
    • コンテナー アプリは、明示的に構成された環境変数または Azure Service Connector を介して PostgreSQL に接続します。
  • GitHub

    • このチュートリアルのサンプル コードは、ローカルでフォークして複製する GitHub リポジトリにあります。 GitHub Actions を使用して CI/CD ワークフローを設定するには、GitHub アカウントが必要です。
    • GitHub アカウントがなくても、ローカルまたは Azure Cloud Shell で作業し、サンプル コード リポジトリからコンテナー イメージをビルドすることで、このチュートリアルに沿って進めることができます。

リビジョンと CI/CD

コードを変更してコンテナーにそれらをプッシュするには、変更した内容で新しい Docker イメージを作成します。 次に、イメージを Container Registry にプッシュし、コンテナー アプリの新しいリビジョンを作成します。

このプロセスを自動化するにあたり、チュートリアルの省略可能な手順で、GitHub アクションを使用して継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインをビルドする方法を紹介します。 新しいコミットが GitHub リポジトリにプッシュされるたびに、パイプラインはコードを自動的に構築してコンテナ アプリにデプロイします。

認証とセキュリティ

このチュートリアルでは、Docker コンテナー イメージを Azure で直接ビルドし、それを Azure Container Apps にデプロイします。 Container Apps は、Azure Virtual Networks (VNet) によってサポートされる環境のコンテキストで実行されます。 VNet は、Azure 内のプライベート ネットワークの基本的な構成要素です。 Container Apps を使用すると、イングレスを有効にすることで、コンテナー アプリをパブリックの Web に公開できます。

継続的インテグレーションと継続的デリバリー (CI/CD) を設定するには、GitHub アカウントの OAuth アプリとして Azure Container Apps を承認します。 Container Apps は OAuth アプリとして、Azure リソースとそれらを更新するジョブに関する情報を含む GitHub Actions ワークフロー ファイルをリポジトリに書き込みます。 このワークフローは、コンテナー アプリに対するロールベースのアクセス権と、Azure Container Registry のユーザー名とパスワードを持つ Microsoft Entra サービス プリンシパル (または既存のサービス プリンシパル) の資格情報を使用して、Azure リソースを更新します。 資格情報は GitHub リポジトリに安全に格納されます。

最後に、チュートリアルのサンプル Web アプリでは、PostgreSQL データベースにデータが格納されます。 サンプル コードでは、接続文字列を介して PostgreSQL に接続します。 コンテナー アプリの構成時に、接続情報を含む環境変数を設定する手順について説明します。 Azure Service Connector を使用して、同じことを実行することもできます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 以下を作成できる Azure アカウント:

    • Azure Container Registry
    • Azure Container Apps 環境
    • Azure Database for PostgreSQL
  • Visual Studio Code または Azure CLI (使用するツールに基づく)

  • Python パッケージ:

サンプル アプリ

この Python サンプル アプリは、レストランとレビューのデータを PostgreSQL に保存するレストラン レビュー アプリです。 このチュートリアルを終了すると、下のスクリーンショットのように、レストラン レビュー アプリが Azure Container Apps にデプロイされ実行されます。

A screenshot of the sample app created from the Python containerized web app used in the Tutorial - Containerized Python App on Azure.

次のステップ