チュートリアル: Service Connector を使用して、Azure App Service 上に Postgres を使用した Django アプリをビルドする
Note
このチュートリアルでは、Web アプリをデータベース サービスに接続するプロセスを簡略化する Service Connector を使用します。 このチュートリアルは App Service チュートリアルの改訂版であるため、いくつかの類似点が見られる場合があります。 セクション「データベースに接続するための環境変数を構成する」を参照して、どのような場合に Service Connector を使用するのかと、App Service チュートリアルで説明されている接続プロセスがどのように簡略化されるかを確認します。
このチュートリアルでは、データ ドリブンの Python Django Web アプリを Azure App Service にデプロイし、それを Azure Database for PostgreSQL フレキシブル サーバー データベースに接続する方法について説明します。
このチュートリアルでは、Azure CLI を使用して以下のタスクを実了します。
- Python と Azure CLI を使用して初期環境を設定する
- Azure Database for PostgreSQL フレキシブル サーバー データベースを作成する
- Azure App Service にコードをデプロイして PostgreSQL フレキシブル サーバーに接続する
- コードを更新して再デプロイする
- 診断ログを表示する
- Azure portal で Web アプリを管理する
初期環境を設定する
Python 3.8 以上をインストールします。 ご利用の Python のバージョンが 3.8 以上かどうかを確認するには、ターミナル ウィンドウ内で次のコードを実行します。
python3 --version
Azure CLI 2.30.0 以上をインストールします。 ご利用の Azure CLI のバージョンが 2.30.0 以上かどうかを確認するには、
az --version
コマンドを実行します。 アップグレードする必要がある場合は、az upgrade
を実行します (バージョン 2.30.0 以上が必要です)。CLI で
az login
を使用して、Azure にサインインします。 このコマンドを実行すると、お客様の資格情報を収集するためにブラウザーが開かれます。 コマンドが終了すると、ご利用のサブスクリプションに関する情報を含んだ JSON 出力が表示されます。 サインイン後は、Azure CLI を使用して Azure コマンドを実行して、サブスクリプション内のリソースを操作することができます。
サンプル アプリをクローンまたはダウンロードする
サンプル リポジトリをクローンします。
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django.git
次のフォルダーに移動します。
cd serviceconnector-webapp-postgresql-django
サンプルのフレキシブル サーバー ブランチを使用します。このブランチには、データベース サーバーの URL の設定方法や、Azure PostgreSQL フレキシブル サーバーで必要な Django データベース構成に 'OPTIONS': {'sslmode': 'require'}
を追加するなど、必要な変更がいくつか含まれます。
git checkout flexible-server
djangoapp サンプルには、データ ドリブンの Django 投票アプリが含まれます。これを、Django ドキュメントの「はじめての Django アプリ作成」に従って取得します。 参考までに、完成したアプリをここに記載しています。
このサンプルは、App Service のような運用環境で実行するために変更もされています。
- 運用環境の設定は、azuresite/production.py ファイルにあります。 開発環境の設定は、azuresite/settings.py にあります。
WEBSITE_HOSTNAME
環境変数を設定すると、アプリで運用環境の設定が使用されます。 この変数は、Azure App Service によって Web アプリの URL (msdocs-django.azurewebsites.net
など) に自動的に設定され ます。
運用環境の設定は、任意の運用環境で実行するために Django を構成する場合に固有であり、App Service に固有なものではありません。 詳細については、Django デプロイ チェックリストに関するページを参照してください。 一部の変更点の詳細については、Azure 上での Django の運用設定に関するセクションを参照してください。
問題がある場合は、 お知らせください。
Azure で Postgres データベースを作成する
すべてのコマンドでパラメーターを指定する必要がないように、Azure CLI でのパラメーターのキャッシュを有効にします。 (キャッシュされた値は .azure フォルダーに保存されます。)
az config param-persist on
リソース グループを作成します (必要に応じて名前を変更できます)。 リソース グループ名はキャッシュされ、後続のコマンドに自動的に適用されます。
az group create --name ServiceConnector-tutorial-rg --location eastus
データベース サーバーを作成します (この処理には数分かかります)。
az postgres flexible-server create --sku-name Standard_B1ms --public-access all
az
コマンドが認識されない場合は、「az
」の説明に従って Azure CLI がインストールされていることを確認してください。az postgres flexible-server create コマンドでは、次のアクションが実行されます (数分かかります)。
- キャッシュされた名前がまだ存在していない場合は、既定のリソース グループを作成します。
- PostgreSQL フレキシブル サーバーを作成します:
- 既定では、このコマンドでは
server383813186
のような生成された名前が使用されます。--name
パラメーターを使用して、独自の名前を指定できます。 Azure 全体で重複しない、一意の名前にしてください。 - このコマンドでは、最も低コストの価格レベル
Standard_B1ms
が使用されます。 既定のStandard_D2s_v3
レベルを使用するには、--sku-name
引数を省略します。 - このコマンドでは、前の
az group create
コマンドからキャッシュされたリソース グループと場所が使用されます。この例では、eastus
リージョン内のリソース グループServiceConnector-tutorial-rg
です。
- 既定では、このコマンドでは
- ユーザー名とパスワードを使用して管理者アカウントを作成します。 これらの値は、
--admin-user
および--admin-password
パラメーターを使用して直接指定できます。 - 既定の
flexibleserverdb
という名前のデータベースを作成します。--database-name
パラメーターを使用すると、データベース名を指定できます。 - 完全なパブリック アクセスを有効にして、
--public-access
パラメーターを使用して制御できます。
コマンドが完了したら、コマンドの JSON 出力をファイルにコピーします。このチュートリアルで後ほど、出力された値 (特にホスト、ユーザー名、パスワード) とデータベース名が必要となります。
問題がある場合は、 お知らせください。
Azure App Service にコードをデプロイする
このセクションでは App Service アプリでアプリ ホストを作成し、このアプリを Postgres データベースに接続して、そのホストにコードをデプロイします。
App Service アプリを作成する
ターミナルで、現在の場所がアプリ コードを含む djangoapp リポジトリ フォルダーであることを確認します。
サンプル アプリの
flexible-server
ブランチに切り替えます。 このブランチには、PostgreSQL フレキシブル サーバーに必要な特定の構成が含まれています。git checkout flexible-server
次の
az webapp up
コマンドを実行して、アプリの App Service ホストを作成します。az webapp up --name <app-name> --sku B1
このコマンドでは、前の
az group create
コマンドからキャッシュされたリソース グループと場所を使用して (この例ではPython-Django-PGFlex-rg
リージョン内のグループeastus
)、次のアクションが実行されます。これには数分かかる場合があります。- Basic 価格レベル (B1) で App Service プランを作成します。
--sku
を省略すると、既定値を使用できます。 - App Service アプリを作成します。
- アプリの既定のログを有効にします。
- ビルド オートメーションを有効にし、ZIP デプロイを使用してリポジトリをアップロードします。
- Basic 価格レベル (B1) で App Service プランを作成します。
デプロイが成功すると、コマンドによって次の例のような JSON 出力が生成されます。
問題がある場合は、 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください。
データベースに接続するための環境変数を構成する
コードを App Service にデプロイしたので、次の手順として、アプリを Azure の Postgres データベースに接続します。
アプリ コードでは、AZURE_POSTGRESQL_HOST
、AZURE_POSTGRESQL_NAME
、AZURE_POSTGRESQL_USER
、および AZURE_POSTGRESQL_PASS
という 4 つの環境変数でデータベース情報を検索することを想定しています。
App Service 内に環境変数を設定するには、次の az connection create
コマンドを使用して "アプリ設定" を作成します。
az webapp connection create postgres-flexible --client-type django
リソース グループ、アプリ名、db 名は、キャッシュされた値から取得されます。 このコマンドの実行中に、postgres データベースの管理者パスワードを指定する必要があります。
- このコマンドは、アプリ コードで想定されている "AZURE_POSTGRESQL_HOST"、"AZURE_POSTGRESQL_NAME"、"AZURE_POSTGRESQL_USER"、"AZURE_POSTGRESQL_PASS" という名前の設定を作成します。
- 管理者の資格情報を忘れた場合は、コマンドを使用してリセットします。
Note
"The subscription is not registered to use Microsoft.ServiceLinker (サブスクリプションが Microsoft.ServiceLinker を使用するように登録されていません)" というエラー メッセージが表示される場合は、az provider register -n Microsoft.ServiceLinker
を実行して Service Connector リソース プロバイダーを登録し、接続コマンドを再度実行してください。
Python コードでは、os.environ.get('AZURE_POSTGRESQL_HOST')
のようなステートメントを使用して、環境変数としてこれらの設定にアクセスします。 詳細については、「環境変数へのアクセス」を参照してください。
問題がある場合は、 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください。
Django データベースの移行を実行する
Django データベースの移行によって、Azure データベース上の PostgreSQL のスキーマが、コードと一致していることが確認されます。
az webapp ssh
を実行して、ブラウザーで Web アプリの SSH セッションを開きます。az webapp ssh
SSH セッションで、次のコマンドを実行します。
# Run database migrations python manage.py migrate # Create the super user (follow prompts) python manage.py createsuperuser
データベースへの接続に関するエラーが発生した場合は、前のセクションで作成したアプリケーション設定の値を確認してください。
createsuperuser
コマンドを使用すると、スーパーユーザーの資格情報の入力を求められます。 このチュートリアルの目的では、既定のユーザー名であるroot
を使用し、Enter キーを押してメール アドレスを空白のままにして、パスワードを「Pollsdb1
」と入力します。データベースがロックされているというエラーが表示された場合は、前のセクションで
az webapp settings
コマンドを実行したことを確認してください。 それらの設定を行わないと、migrate コマンドがデータベースと通信できずにエラーが発生します。
問題がある場合は、 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください。
アプリで投票の質問を作成する
アプリの Web サイトを開きます。 データベース内に特定の投票がまだないため、アプリには "Polls app (投票アプリ)" および "No polls are available (投票は利用できません)" というメッセージが表示されます。
az webapp browse
"アプリケーション エラー" が表示される場合は、前の手順「データベースに接続するための環境変数を構成する」で必須の設定を作成していないか、またはそれらの値にエラーが含まれていることが考えられます。 コマンド
az webapp config appsettings list
を実行して、設定を確認します。設定を更新してエラーを修正したら、アプリが再起動するまで少し待ってから、ブラウザーを最新の状態に更新します。
URL に
/admin
を追加して、Web アプリの管理ページを参照します (例:http://<app-name>.azurewebsites.net/admin
)。 前のセクションで用いた Django のスーパーユーザー資格情報 (root
とPollsdb1
) を使用してサインインします。 [Polls](投票) で、 [Questions](質問) の横の [Add](追加) を選択し、いくつかの選択肢がある投票の質問を作成します。メインの Web サイト (
http://<app-name>.azurewebsites.net
) に戻り、質問がユーザーに表示されるようになったことを確認します。 質問に自由に回答してデータベースにデータを生成します。
おめでとうございます。 アクティブな Postgres データベースを使用して、Azure App Service for Linux で Python Django Web アプリが実行されています。
Note
App Service では、各サブフォルダー内で wsgi.py ファイル (manage.py startproject
によって既定で作成されます) を探すことにより、Django プロジェクトが検出されます。 App Service でそのファイルが見つかると、Django Web アプリが読み込まれます。 詳細については、組み込みの Python イメージの構成に関するページを参照してください。
リソースをクリーンアップする
アプリを残しておく場合、または別のチュートリアルに進む場合は、「次のステップ」に進んでください。 それ以外の場合は、継続して料金が発生しないように、このチュートリアルで作成したリソース グループを削除します。
az group delete --name ServiceConnector-tutorial-rg --no-wait
リソース グループを削除することによって、その中に含まれるすべてのリソースの割り当て解除と削除も行われます。 このコマンドを使用する前に、グループ内のリソースが不要になったことを確認してください。
すべてのリソースが削除されるまでには多少時間がかかります。 --no-wait
引数を指定すると、コマンドからすぐに制御が戻されます。
問題がある場合は、 お知らせください。