次の方法で共有


PostgreSQL を使用した Python FastAPI Web アプリを Azure にデプロイする

このチュートリアルでは、データドリブン Python Web アプリ (FastAPI) を、Azure Database for PostgreSQL リレーショナル データベース サービスを使う Azure App Service にデプロイします。 Azure App Service は、Linux サーバー環境で Python をサポートしています。 必要な場合は、Flask チュートリアルまたは Django チュートリアルを参照してください。

Azure の PostgreSQL データベースを使用する App Service を示すアーキテクチャの図。

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

  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure アカウントがない場合は、無料で作成できます
  • Python と FastAPI による開発に関する知識
  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure アカウントがない場合は、無料で作成できます
  • Azure Developer CLI がインストールされていること。 Azure Developer CLI が既にインストールされているため、Azure Cloud Shell の手順に従うことができます。
  • Python と FastAPI による開発に関する知識

最後までスキップする

Azure Developer CLI がインストールされている場合は、空の作業ディレクトリで次のコマンドを実行することで、チュートリアルの最後までスキップできます。

azd auth login
azd init --template msdocs-fastapi-postgresql-sample-app
azd up

サンプル アプリケーション

このチュートリアルに沿って理解できるように、FastAPI フレームワークを使用したサンプル Python アプリケーションが提供されています。 ローカル環境で実行しないでデプロイする場合は、この部分をスキップしてください。

アプリケーションをローカルで実行するには、Python 3.8 以降PostgreSQL がローカルにインストールされていることを確認します。 次に、サンプル リポジトリの starter-no-infra ブランチをクローンして、リポジトリのルートに移動してください。

git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
cd msdocs-fastapi-postgresql-sample-app

.env.sample ファイルをガイドとして、以下に示すような .env ファイルを作成します。 DBNAME の値を、ローカルの PostgreSQL インスタンス内の既存データベースの名前に設定します。 ローカルの PostgreSQL インスタンスに応じて、DBHOSTDBUSERDBPASS の値を設定します。

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

アプリの仮想環境を作成します。

py -m venv .venv
.venv\scripts\activate

依存関係をインストールする:

python3 -m pip install -r src/requirements.txt

アプリを編集可能なパッケージとしてインストールします。

python3 -m pip install -e src

次のコマンドを使ってサンプル アプリケーションを実行します。

# Run database migration
python3 src/fastapi_app/seed_data.py
# Run the app at http://127.0.0.1:8000
python3 -m uvicorn fastapi_app:app --reload --port=8000

1. App Service と PostgreSQL を作成する

この手順では、Azure リソースを作成します。 このチュートリアルで使用する手順では、App Service と Azure Database for PostgreSQL を含む既定でセキュリティで保護された一連のリソースを作成します。 作成プロセスでは、次のように指定します。

  • 名前: Web アプリの名前。 Web アプリの DNS 名の一部として https://<app-name>.azurewebsites.net の形式で使われる名前です。
  • 世界でアプリを物理的に実行するためのリージョン
  • アプリのランタイム スタック。 ここで、アプリに使う Python のバージョンを選びます。
  • アプリのホスティング プラン。 これは、アプリの一連の機能と容量のスケーリングを含む価格レベルです。
  • アプリのリソース グループ。 リソース グループを使うと、アプリケーションに必要なすべての Azure リソースを (論理コンテナーに) グループ化できます。

Azure portal にサインインし、以下の手順に従って Azure App Service リソースを作成します。

手順 1: Azure portal 内で次を実行します。

  1. Azure portal の上部にある検索バーに「Web app database」と入力します。
  2. [Marketplace] の見出しの下にある [Web アプリとデータベース] というラベルの付いた項目を選びます。 作成ウィザードに直接移動することもできます。

手順 2:[Web アプリとデータベースの作成] ページ内で、このフォームに次のように入力します。

  1. "リソース グループ" → [新規作成] を選び、msdocs-python-postgres-tutorial という名前を付けます。
  2. リージョン → 任意の近くの Azure リージョン。
  3. "名前" → msdocs-python-postgres-XYZXYZ は任意の 3 つのランダムな文字です。 この名前は Azure 全体で一意である必要があります。
  4. "ランタイム スタック" → Python 3.12
  5. データベースPostgreSQL - フレキシブル サーバーは、既定でデータベース エンジンとして選ばれています。 既定では、サーバー名とデータベース名も適切な値に設定されます。
  6. ホスティング プラン → Basic 準備ができたら、後で運用価格レベルにスケールアップできます。
  7. [Review + create](レビュー + 作成) を選択します。
  8. 検証が完了した後、 [作成] を選択します。

手順 3: このデプロイは完了するまでに数分かかります。 デプロイが完了したら、[リソースに移動] ボタンを選択します。 App Service アプリに直接移動しますが、次のリソースが作成されます。

  • リソース グループ → 作成されたすべてのリソースのコンテナーです。
  • App Service プラン → App Service のコンピューティング リソースを定義します。 Basic レベルの Linux プランが作成されます。
  • App Service → アプリを表し、App Service プランで実行されます。
  • 仮想ネットワーク → App Service アプリと統合され、バックエンドのネットワーク トラフィックを分離します。
  • Azure Database for PostgreSQL フレキシブル サーバー → 仮想ネットワーク内からのみアクセス可能です。 サーバー上にデータベースとユーザーが作成されます。
  • プライベート DNS ゾーン → 仮想ネットワーク内の PostgreSQL サーバーの DNS 解決を有効にします。

手順 4: FastAPI アプリの場合、App Service がアプリを起動できるようにスタートアップ コマンドを入力する必要があります。 App Service ページで次を行います。

  1. 左側のメニューの [設定][構成] を選択します。
  2. [構成] ページの [全般設定] タブで、[スタック設定][スタートアップ コマンド] フィールドに src/entrypoint.sh を入力します。
  3. [保存] を選択します。 メッセージが表示されたら、[Continue](続行) を選択します。 App Service でのアプリの構成と起動の詳細については、「Azure App Service 向けの Linux Python アプリを構成する」を参照してください。

2. 接続設定を編集する

作成ウィザードにより、接続変数がアプリの設定として自動的に生成されます。 アプリの設定は、接続のシークレットをコード リポジトリに残さないための 1 つの方法です。 シークレットをより安全な場所に移動する準備ができたら、Azure Key Vault への格納に関する記事を参照してください。

手順 1: [App Service] ページの左側のメニューで、[環境変数] を選択します。

手順 2:[環境変数] ページの [アプリ設定] タブで、AZURE_POSTGRESQL_CONNECTIONSTRING が存在することを確認します。 接続文字列は、環境変数としてランタイム環境に挿入されます。

3. サンプル コードのデプロイ

この手順では、GitHub Actions を使用して GitHub のデプロイを構成します。 これは、App Service にデプロイする多くの方法の 1 つにすぎませんが、デプロイ プロセスで継続的インテグレーションを実現する優れた方法でもあります。 既定では、GitHub リポジトリに git push があるたびにビルドとデプロイのアクションが起動されます。

手順 1: 新しいブラウザー ウィンドウ内で次を実行します。

  1. GitHub アカウントにサインインします。
  2. https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app に移動します。
  3. [Fork] を選択します。
  4. [Create fork] (フォークの作成) を選択します。

手順 2: GitHub のページで、. キーを押して、ブラウザーで Visual Studio Code を開きます。

手順 3: ブラウザーの Visual Studio Code で、エクスプローラーの src/fastapi/models.py を開きます。 構成ページで確認したアプリの設定など、運用環境で使われている環境変数を確認します。

手順 4: [App Service] ページに戻り、左側のメニューで [デプロイ][デプロイ センター] を選択します。

手順 5: [デプロイ センター] ページで次のようにします。

  1. [ソース] で、[GitHub] を選びます。 既定では、ビルド プロバイダーとして GitHub Actions が選ばれます。
  2. GitHub アカウントにサインインし、プロンプトに従って Azure を承認します。
  3. [組織] で、自分のアカウントを選びます。
  4. [リポジトリ]msdocs-fastapi-postgresql-sample-app を選択します。
  5. [ブランチ][main] を選びます。
  6. [ワークフローの追加] で既定のオプションを選択したままにします。
  7. [認証の種類] で、[ユーザー割り当て ID] を選択してください。
  8. 上部のメニューから、[保存] を選択します。 App Service は、選んだ GitHub リポジトリの .github/workflows ディレクトリに、ワークフロー ファイルをコミットします。

手順 6: [デプロイ センター] ページで次のようにします。

  1. [ログ] を選択します。 デプロイの実行は既に開始されています。
  2. デプロイの実行のログ項目で、[ビルドまたはデプロイ ログ] を選びます。

手順 7: GitHub リポジトリに移動したら、GitHub アクションが実行されていることを確認します。 ワークフロー ファイルでは、ビルドとデプロイという 2 つの異なるステージを定義します。 GitHub が実行されて、[完了] の状態が表示されるまで待ちます。 所要時間は約 5 分です。

問題がある場合は、 トラブルシューティング ガイドを確認してください。

4. データベース スキーマを生成する

前のセクションで、アプリのスタートアップ コマンドとして src/entrypoint.sh を追加しました。 entrypoint.sh には、次の行が含まれています: python3 src/fastapi_app/seed_data.py。 このコマンドにより、データベースが移行されます。 サンプル アプリでは、データベースに正しいテーブルが作成されていることのみを確認します。 これらのテーブルにはデータは設定されません。

このセクションでは、デモンストレーションのためにこのコマンドを手動で実行します。 PostgreSQL データベースは仮想ネットワークによって保護されているため、コマンドを実行する最も簡単な方法は、App Service コンテナーとの SSH セッションです。

手順 1: [App Service] ページに戻り、左側のメニューで

  1. [SSH] を選択します。
  2. [Go] \(移動) を選択します。

手順 2: SSH ターミナルで、python3 src/fastapi_app/seed_data.py を実行します。 それに成功すると、App Service はデータベースに正常に接続した状態になります/home 内のファイルへの変更のみが、アプリの再起動後も保持されます。 /home の外部の変更は永続化されません。

5.アプリの参照

手順 1: [App Service] ページ内で、次を実行します。

  1. 左側のメニューから [概要] を選びます。
  2. アプリの URL を選びます。 直接、https://<app-name>.azurewebsites.net に移動することもできます。

手順 2: 一覧にレストランをいくつか追加します。 おめでとうございます。Azure Database for PostgreSQL へのセキュリティで保護された接続を使用して、Azure App Service で Web アプリを実行できました。

6.診断ログをストリーミングする

サンプル アプリでは、アプリケーションに関する問題を診断できるように Python Standard Library ログ モジュールを使用します。 サンプル アプリには、次のコードに示すようにロガーの呼び出しが含まれています。

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

手順 1: [App Service] ページ内で、次を実行します。

  1. 左側のメニューで、[監視][App Service ログ] を選択します。
  2. [アプリケーション ログ記録][ファイル システム] を選びます。
  3. 上部のメニューから、[保存] を選択します。

手順 2:左側のメニューから [ログ ストリーム] を選択します。 プラットフォーム ログとコンテナー内のログを含む、アプリのログが表示されます。

イベントが診断ログに表示されるまでに数分かかる場合があります。 Python アプリでのログ記録の詳細については、Python アプリケーション用の Azure Monitor の設定に関するシリーズを参照してください。

7.リソースをクリーンアップする

完了したら、リソース グループを削除することで、Azure サブスクリプションからすべてのリソースを削除できます。

手順 1: Azure portal の上部にある検索バーで次を行います。

  1. リソース グループ名を入力します。
  2. リソース グループを選択します。

手順 2: [リソース グループ] ページ内で、[リソース グループの削除] を選びます。

ステップ 3:

  1. リソース グループの名前を入力して、削除を確定します。
  2. [削除] を選択します。

Azure portal でリソース グループを削除するための確認ダイアログを示すスクリーンショット。 :

1.Azure リソースを作成してサンプル アプリをデプロイする

このステップでは、Azure リソースを作成し、サンプル アプリを App Service on Linux にデプロイします。 このチュートリアルで使用する手順では、App Service と Azure Database for PostgreSQL を含む既定でセキュリティで保護された一連のリソースを作成します。

  1. まだ行っていない場合は、サンプル リポジトリの starter-no-infra ブランチをローカル ターミナルにクローンします。

    git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
    cd msdocs-fastapi-postgresql-sample-app
    

    このクローンしたブランチから作業を始めます。 これには、簡単なデータドリブンの FastAPI アプリケーションが含まれます。

  2. リポジトリのルートから、azd init を実行します。

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. メッセージが表示されたら、次の回答を入力します。

    Question Answer
    The current directory is not empty. (現在のディレクトリが空ではありません。) Would you like to initialize a project here in '<your-directory>'? ('<ディレクトリ>' でプロジェクトを初期化しますか?) Y
    What would you like to do with these files? (これらのファイルをどうしますか?) Keep my existing files unchanged (既存のファイルを変更しないでそのままにする)
    Enter a new environment name (新しい環境の名前を入力してください) 一意の名前を入力します。 azd テンプレートは、Azure での Web アプリの DNS 名の一部としてこの名前を使います (<app-name>.azurewebsites.net)。 英数字とハイフンを使用できます。
  4. azd up コマンドを実行して、必要な Azure リソースをプロビジョニングし、アプリ コードをデプロイします。 Azure にまだサインインしていない場合は、ブラウザーが起動し、サインインするように求められます。 また、azd up コマンドでは、サブスクリプションとデプロイ先の場所を選択するように求められます。

    azd up
    

    azd up コマンドは、完了までに数分かかる場合があります。 また、アプリケーション コードをコンパイルしてデプロイします。 実行中、このコマンドは、Azure のデプロイへのリンクを含む、プロビジョニングとデプロイのプロセスに関するメッセージを提供します。 完了すると、コマンドはデプロイ アプリケーションへのリンクも表示します。

    この azd テンプレートには、次の Azure リソースを使って既定でセキュリティ保護されるアーキテクチャを生成するファイル (azure.yamlinfra ディレクトリ) が含まれています。

    • リソース グループ → 作成されたすべてのリソースのコンテナーです。
    • App Service プラン → App Service のコンピューティング リソースを定義します。 B1 レベルの Linux プランが指定されています。
    • App Service → アプリを表し、App Service プランで実行されます。
    • 仮想ネットワーク → App Service アプリと統合され、バックエンドのネットワーク トラフィックを分離します。
    • Azure Database for PostgreSQL フレキシブル サーバー → 仮想ネットワーク内からのみアクセス可能です。 サーバー上にデータベースとユーザーが作成されます。
    • プライベート DNS ゾーン → 仮想ネットワーク内の PostgreSQL サーバーの DNS 解決を有効にします。
    • Log Analytics ワークスペース → アプリでログを配布するためのターゲット コンテナーとして機能します。ここで、ログのクエリを実行することもできます。
  5. azd up コマンドが完了したら、出力のサブスクリプション ID (Guid)、App Service、および リソース グループの値をメモします。 これらは、次のセクションで使用します。 出力は、次の出力 (一部分) のようになります。

    Subscription: Your subscription name (1111111-1111-1111-1111-111111111111)
    Location: East US
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2F1111111-1111-1111-1111-111111111111%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2Fyourenv-1721867673
    
      (✓) Done: Resource group: yourenv-rg
      (✓) Done: Virtual Network: yourenv-e2najjk4vewf2-vnet
      (✓) Done: App Service plan: yourenv-e2najjk4vewf2-service-plan
      (✓) Done: Log Analytics workspace: yourenv-e2najjk4vewf2-workspace
      (✓) Done: Application Insights: yourenv-e2najjk4vewf2-appinsights
      (✓) Done: Portal dashboard: yourenv-e2najjk4vewf2-dashboard
      (✓) Done: App Service: yourenv-e2najjk4vewf2-app-service
      (✓) Done: Azure Database for PostgreSQL flexible server: yourenv-e2najjk4vewf2-postgres-server
      (✓) Done: Cache for Redis: yourenv-e2najjk4vewf2-redisCache
      (✓) Done: Private Endpoint: cache-privateEndpoint
    
    SUCCESS: Your application was provisioned in Azure in 32 minutes.
    You can view the resources created under the resource group yourenv-rg in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/1111111-1111-1111-1111-111111111111/resourceGroups/yourenv-rg/overview
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
      - Endpoint: https://yourenv-e2najjk4vewf2-app-service.azurewebsites.net/
    
    

2.データベース接続文字列を調べる

azd テンプレートにより、アプリ設定として接続変数が生成されます。 アプリの設定は、接続のシークレットをコード リポジトリに残さないための 1 つの方法です。

  1. infra/resources.bicep ファイルで、アプリの設定を見つけ、AZURE_POSTGRESQL_CONNECTIONSTRING の設定を見つけます。

    resource appSettings 'config' = {
      name: 'appsettings'
      properties: {
        SCM_DO_BUILD_DURING_DEPLOYMENT: 'true'
        AZURE_POSTGRESQL_CONNECTIONSTRING: 'dbname=${pythonAppDatabase.name} host=${postgresServer.name}.postgres.database.azure.com port=5432 sslmode=require user=${postgresServer.properties.administratorLogin} password=${databasePassword}'
        SECRET_KEY: secretKey
        AZURE_REDIS_CONNECTIONSTRING: 'rediss://:${redisCache.listKeys().primaryKey}@${redisCache.name}.redis.cache.windows.net:6380/0'
      }
    }
    
  2. AZURE_POSTGRESQL_CONNECTIONSTRING には、Azure の Postgres データベースへの接続文字列が含まれています。 これをコード内で使用して接続する必要があります。 この環境変数を使用するコードは、src/fastapi/models.py にあります。

    sql_url = ""
    if os.getenv("WEBSITE_HOSTNAME"):
        logger.info("Connecting to Azure PostgreSQL Flexible server based on AZURE_POSTGRESQL_CONNECTIONSTRING...")
        env_connection_string = os.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
        if env_connection_string is None:
            logger.info("Missing environment variable AZURE_POSTGRESQL_CONNECTIONSTRING")
        else:
            # Parse the connection string
            details = dict(item.split('=') for item in env_connection_string.split())
    
            # Properly format the URL for SQLAlchemy
            sql_url = (
                f"postgresql://{quote_plus(details['user'])}:{quote_plus(details['password'])}"
                f"@{details['host']}:{details['port']}/{details['dbname']}?sslmode={details['sslmode']}"
            )
    
    else:
        logger.info("Connecting to local PostgreSQL server based on .env file...")
        load_dotenv()
        POSTGRES_USERNAME = os.environ.get("DBUSER")
        POSTGRES_PASSWORD = os.environ.get("DBPASS")
        POSTGRES_HOST = os.environ.get("DBHOST")
        POSTGRES_DATABASE = os.environ.get("DBNAME")
        POSTGRES_PORT = os.environ.get("DBPORT", 5432)
    
        sql_url = f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DATABASE}"
    
    engine = create_engine(sql_url)
    

3.スタートアップ コマンドを調べる

Azure App Service では、FastAPI アプリを実行するためのスタートアップ コマンドが必要です。 azd テンプレートにより、App Service インスタンスでこのコマンドが設定されます。

  1. infra/resources.bicep ファイルで、Web サイトの宣言を見つけ、appCommandLine の設定を見つけます。 これが、スタートアップ コマンドの設定です。

    resource web 'Microsoft.Web/sites@2022-03-01' = {
      name: '${prefix}-app-service'
      location: location
      tags: union(tags, { 'azd-service-name': 'web' })
      kind: 'app,linux'
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          alwaysOn: true
          linuxFxVersion: 'PYTHON|3.11'
          ftpsState: 'Disabled'
          appCommandLine: 'src/entrypoint.sh'
          minTlsVersion: '1.2'
        }
        httpsOnly: true
      }
      identity: {
        type: 'SystemAssigned'
      }
    
  2. スタートアップ コマンドにより、src/entrypoint.sh ファイルが実行されます。そのファイル内のコードを調べて、App Service がアプリを起動するために実行するコマンドを理解します。

    #!/bin/bash
    set -e
    python3 -m pip install --upgrade pip
    python3 -m pip install -e src
    python3 src/fastapi_app/seed_data.py
    python3 -m gunicorn fastapi_app:app -c src/gunicorn.conf.py
    

App Service でのアプリの構成と起動の詳細については、「Azure App Service 向けの Linux Python アプリを構成する」を参照してください。

4. データベース スキーマを生成する

前のセクションで、entrypoint.sh に次の行が含まれていることに気付いたかもしれません: python3 src/fastapi_app/seed_data.py。 このコマンドにより、データベースが移行されます。 サンプル アプリでは、データベースに正しいテーブルが作成されていることのみを確認します。 これらのテーブルにはデータは設定されません。

このセクションでは、デモンストレーションのためにこのコマンドを手動で実行します。 PostgreSQL データベースは仮想ネットワークによって保護されているため、コマンドを実行する最も簡単な方法は、App Service コンテナーとの SSH セッションです。

  1. azd 出力で前に説明した App Service の値と以下に示すテンプレートを使用して、SSH セッションの URL を作成し、ブラウザーでそれに移動します。

    https://<app-name>.scm.azurewebsites.net/webssh/host
    
  2. SSH ターミナルで python3 src/fastapi_app/seed_data.py を実行します。 それに成功すると、App Service はデータベースに正常に接続した状態になります

    SSH シェルで実行するコマンドとその出力を示すスクリーンショット (FastAPI)。

    Note

    /home 内のファイルへの変更のみが、アプリの再起動後も保持されます。 /home の外部の変更は永続化されません。

5.アプリの参照

  1. azd の出力でアプリの URL を見つけて、ブラウザーでそこに移動します。 URL は、AZD の出力では次のようになります。

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. 一覧にいくつかのレストランを追加します。

    Azure で実行されている PostgreSQL を使用した FastAPI Web アプリで、レストランとレストランのレビューを示すスクリーンショット (FastAPI)。

    おめでとうございます。Azure Database for PostgreSQL へのセキュリティで保護された接続を使用して、Azure App Service で Web アプリを実行できました。

6.診断ログをストリーミングする

Azure App Service はログをキャプチャできるので、アプリケーションに関する問題の診断に役立ちます。 便宜のため、azd テンプレートでは、既にローカル ファイル システムへのログ記録が有効になっています。

サンプル アプリでは、Python Standard Library ログ モジュールを使用してログを出力します。 サンプル アプリには、次に示すようにロガーの呼び出しが含まれています。

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

サブスクリプション ID (Guid)、リソース グループ、および azd 出力と以下に示すテンプレートで先ほどメモした App Service の値を使用して、App Service ログをストリーミングする URL を作成し、ブラウザーでそれに移動します。

https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

イベントが診断ログに表示されるまでに数分かかる場合があります。 Python アプリでのログ記録の詳細については、Python アプリケーション用の Azure Monitor の設定に関するシリーズを参照してください。

7.リソースをクリーンアップする

現在のデプロイ環境のすべての Azure リソースを削除するには、azd down を実行します。

azd down

トラブルシューティング

このチュートリアルの作業中に発生する可能性がある問題と、それらを解決する手順を次に示します。

SSH セッションに接続できません

SSH セッションに接続できない場合は、アプリ自体が起動に失敗しています。 詳細については、診断ログを確認してください。 たとえば、KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING' のようなエラーが表示された場合は、環境変数が存在しないことを意味する可能性があります (アプリの設定を削除した可能性があります)。

データベース移行の実行時にエラーを受け取ります

データベースへの接続に関連するエラーが発生する場合は、アプリの設定 (AZURE_POSTGRESQL_CONNECTIONSTRING) が変更されていないかどうかを確認します。 接続文字列がないと、migrate コマンドでデータベースと通信できません。

よく寄せられる質問

この設定にはいくらかかりますか。

作成したリソースの価格は次のとおりです。

  • App Service プランは Basic レベルで作成され、スケールアップまたはスケールダウンできます。 「App Service の価格」をご覧ください。
  • PostgreSQL フレキシブル サーバーは、ストレージ サイズが最小な、最も低いバースト可能レベルである Standard_B1ms に作成されます。スケールアップまたはダウンすることができます。 Azure Database for PostgreSQL の価格に関するページを参照してください。
  • 仮想ネットワークでは、ピアリングなどの追加機能を構成しない限り、料金は発生しません。 「Azure Virtual Network の価格」を参照してください。
  • プライベート DNS ゾーンでは、少額の料金が発生します。 「Azure DNS の価格」を参照してください。

仮想ネットワークの背後でセキュリティ保護されている PostgreSQL サーバーに他のツールで接続するにはどうすればよいですか?

  • コマンドライン ツールからの基本的なアクセスには、アプリの SSH ターミナルから psql を実行できます。
  • デスクトップ ツールから接続するには、マシンが仮想ネットワーク内にある必要があります。 たとえば、サブネットの 1 つに接続されている Azure VM、または Azure 仮想ネットワークとサイト間 VPN で接続されているオンプレミス ネットワーク内のマシンが該当します。
  • また、仮想ネットワークに Azure Cloud Shell を統合することもできます。

GitHub Actions でのローカル アプリの開発はどのように行いますか。

App Service から自動生成されたワークフロー ファイルを例として使用すると、git push ごとに新しいビルドとデプロイの実行が起動されます。 GitHub リポジトリのローカル クローンから、必要な更新を行い、GitHub にプッシュします。 次に例を示します。

git add .
git commit -m "<some-message>"
git push origin main

次のステップ

次のチュートリアルに進み、カスタム ドメインと証明書を使用してアプリをセキュリティで保護する方法を学習してください。

App Service で Python アプリが実行される方法を確認する: