次の方法で共有


仮想ネットワーク内に Web アプリを使用して Azure Database for PostgreSQL を作成する

この記事では、 仮想ネットワーク内に Azure Database for PostgreSQL フレキシブル サーバーを使用して Azure App Service Web アプリを作成する方法について説明します。

この記事では、次の方法について説明します。

  • 仮想ネットワーク内に Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する
  • Web アプリを作成する
  • Web アプリを仮想ネットワークに追加する
  • Web アプリから Azure Database for PostgreSQL フレキシブル サーバーに接続する

[前提条件]

  • Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

  • Azure CLI バージョン 2.0 以降をローカルにインストールします (または、CLI がプレインストールされている Azure Cloud Shell を使用します)。 インストールされているバージョンを確認するには、az --version コマンドを実行します。

  • az login コマンドを使用して、お使いのアカウントにサインインします。 対応するサブスクリプション名のコマンド出力で id プロパティを確認します。

    az login
    
  • 複数のサブスクリプションがある場合は、リソースの課金に適したサブスクリプションを選択します。 az account set コマンドを使用して、アカウントの特定のサブスクリプション ID を選択します。

    az account set --subscription <subscription ID>
    

フレキシブル サーバー インスタンスを作成する

次のコマンドを使用して、仮想ネットワーク内に PostgreSQL フレキシブル サーバー インスタンス用のプライベート Azure Database を作成します。

az postgres flexible-server create --resource-group demoresourcegroup --name demoserverpostgres --vnet demoappvnet --location westus2

このコマンドでは、次のアクションが実行されます。これには数分かかる場合があります。

  • リソース グループがまだ存在しない場合は作成します。
  • 指定しない場合は、サーバー名を生成します。
  • Azure Database for PostgreSQL フレキシブル サーバー インスタンス用の仮想ネットワークとサブネットを作成します。
  • 指定しない場合は、サーバーの管理者ユーザー名とパスワードを作成します。
  • postgres という名前の空のデータベースを作成します。

出力例を次に示します。

Creating Resource Group 'demoresourcegroup'...
Creating new Vnet "demoappvnet" in resource group "demoresourcegroup"
Creating new Subnet "Subnetdemoserverpostgres" in resource group "demoresourcegroup"
Creating a private dns zone demoserverpostgres.private.postgres.database.azure.com in resource group "demoresourcegroup"
Creating PostgreSQL Server 'demoserverpostgres' in group 'demoresourcegroup'...
Your server 'demoserverpostgres' is using sku 'Standard_D2s_v3' (Paid Tier). Please refer to https://aka.ms/postgres-pricing for pricing details
Creating PostgreSQL database 'flexibleserverdb'...
Make a note of your password. If you forget, you would have to reset your password with "az postgres flexible-server update -n demoserverpostgres -g demoresourcegroup -p <new-password>".
Try using 'az postgres flexible-server connect' command to test out connection.
{
  "connectionString": "postgresql://generated-username:generated-password@demoserverpostgres.postgres.database.azure.com/postgres?sslmode=require",
  "host": "demoserverpostgres.postgres.database.azure.com",
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/demoresourcegroup/providers/Microsoft.DBforPostgreSQL/flexibleServers/demoserverpostgres",
  "location": "East US",
  "password": "generated-password",
  "resourceGroup": "demoresourcegroup",
  "skuname": "Standard_D2s_v3",
  "subnetId": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/demoresourcegroup/providers/Microsoft.Network/virtualNetworks/demoappvnet/subnets/Subnetdemoserverpostgres",
  "username": "generated-username",
  "version": "12"
}

Web アプリを作成する

このセクションでは、App Service アプリでアプリ ホストを作成し、このアプリを Azure Database for PostgreSQL フレキシブル サーバー データベースに接続してから、そのホストにコードをデプロイします。 ターミナルで、アプリケーション コードのリポジトリのルートにいることを確認します。 Basic プランでは、仮想ネットワーク統合はサポートされていません。 Standard または Premium を使ってください。

az webapp up コマンドを使用して App Service アプリ (ホスト プロセス) を作成します。

az webapp up --resource-group demoresourcegroup --location westus2 --plan testappserviceplan --sku P2V2 --name mywebapp

  • _--location_ argumentでは、前のセクションのデータベースと同じ場所を使用します。
  • <app-name>をすべての Azure で一意の名前に置き換えます。 <app-name>に使用できる文字は、A から Z、0 ~ 9、および -です。 会社名とアプリ識別子を組み合わせて使用すると、適切なパターンになります。

このコマンドでは、次のアクションが実行されます。これには数分かかる場合があります。

  • リソース グループがまだ存在しない場合は作成します。 (このコマンドでは、前にデータベースを作成したのと同じリソース グループを使用します)。
  • App Service アプリが存在しない場合は作成します。
  • まだ有効になっていない場合は、アプリの既定のログ記録を有効にします。
  • ビルド自動化を有効にした ZIP デプロイを使用してリポジトリをアップロードします。

Web アプリのサブネットを作成する

仮想ネットワーク統合を有効にする前に、App Service Web App に委任されたサブネットが必要です。 サブネットを作成する前に、Web アプリ サブネットに同じアドレス プレフィックスを使用しないように、データベース サブネット のアドレスを表示します。

az network vnet show --resource-group demoresourcegroup -n demoappvnet

次のコマンドを実行して、Azure Database for PostgreSQL フレキシブル サーバー インスタンスと同じ仮想ネットワークに新しいサブネットを作成します。 アドレス プレフィックスを更新して、Azure Database for PostgreSQL フレキシブル サーバー サブネットとの競合を回避します。

az network vnet subnet create --resource-group demoresourcegroup --vnet-name demoappvnet --name webappsubnet  --address-prefixes 10.0.1.0/24  --delegations Microsoft.Web/serverFarms

Web アプリを仮想ネットワークに追加する

az webapp vnet-integration コマンドを使用して、リージョン仮想ネットワーク統合を Web アプリに追加します。

az webapp vnet-integration add --resource-group demoresourcegroup -n  mywebapp --vnet demoappvnet --subnet webappsubnet

データベースに接続するための環境変数を構成する

App Service にコードをデプロイした後、アプリを Azure の Azure Database for PostgreSQL フレキシブル サーバー インスタンスに接続します。 アプリ コードでは、多くの環境変数でデータベース情報を検索することを想定しています。 App Service で環境変数を設定するには、 az webapp config appsettings set コマンドを 使用します。

az webapp config appsettings set  --name mywebapp --settings DBHOST="<postgres-server-name>.postgres.database.azure.com" DBNAME="postgres" DBUSER="<username>" DBPASS="<password>"
  • postgres-server-nameusername、および password を、新しく作成された Azure Database for PostgreSQL フレキシブル サーバー インスタンスの値に置き換えます。

  • <username><password> を、コマンドによって生成される資格情報に置き換えます。

  • リソース グループとアプリ名は、.azure/config ファイルのキャッシュされた値から取得されます。

  • このコマンドは、DBHOST、DBNAMEDBUSER、および DBPASS という名前の設定作成します。 アプリケーション コードでデータベース情報に異なる名前を使用する場合は、コードで説明されているように、これらの名前をアプリ設定に使用します。

仮想ネットワーク内からの送信接続をすべて許可するように Web アプリを構成します。

az webapp config set --name mywebapp --resource-group demoresourcegroup --generic-configurations '{"vnetRouteAllEnabled": true}'

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

次のコマンドを使用して、記事で作成したすべてのリソースをクリーンアップします。 このコマンドによって、このリソース グループ内にあるすべてのリソースが削除されます。

az group delete -n demoresourcegroup