次の方法で共有


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 名の一部として使用される名前です。
  • 世界でアプリを物理的に実行するためのリージョン
  • アプリの [ランタイム スタック]。 ここで、アプリに使う 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. [確認と作成] を選びます。
  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. [保存] を選択します。 メッセージが表示されたら、[続行] を選びます。 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. [移動] を選びます。

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

5. アプリを参照する

手順 1: [App Service] ページで、次を行ないます。

  1. 左側のメニューから [概要] を選びます。
  2. アプリの URL を選びます。

手順 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. [削除] を選びます。

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. メッセージが表示されたら、次の応答を入力します。

    質問 応答
    現在のディレクトリが空ではありません。 '<ディレクトリ>' でプロジェクトを初期化しますか? Y
    これらのファイルをどうしますか? Keep my existing files unchanged (既存のファイルを変更しないでそのままにする)
    新しい環境の名前を入力してください 一意の名前を入力します。 この 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 を構築し、ブラウザーでそれに移動します。

  2. SSH ターミナルで python3 src/fastapi_app/seed_data.py を実行します。 それが成功したら、App Service はデータベースに正常に接続しています

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

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

5. アプリを参照する

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

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  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)
    )

ログ ストリームにアクセスするには、Azure portal でアプリを開きます。 [ 監視>ログ ストリーム] を選択します。

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

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

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

azd down

トラブルシューティング

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

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

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

データベースの移行を実行するとエラーが発生します

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

よくあるご質問

このセットアップのコストはどのくらいですか?

作成されるリソースの価格は次のとおりです。

  • 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 アプリを実行する方法を学びます。