演習 - マルチテナント データを実装する
この演習では、次の作業を体験します。
- Azure Database for PostgreSQL をサーバー デプロイ モデルでインストールします。
- サンプルの在庫データを含んだデータベースを作成します。
- サーバーと Microsoft Entra ID の統合。
- Microsoft Entra 認証を利用して、データベースに対してクエリを実行するシンプルな Node.js ベース アプリケーションの実装。
Note
この演習では、マルチテナント機能をサポートするための単純化したアプローチを、Azure Database for PostgreSQL の Hyperscale デプロイ モデルのマルチテナント機能にならって紹介しています。 また、Microsoft Entra の B2B 機能を利用し、マルチテナント シナリオで Microsoft Entra 認証を実装する簡略化されたアプローチも提供されます。 Microsoft Entra ID ではマルチテナント アプリケーションが直接サポートされますが、その詳しい内容についてはこのモジュールの範囲外となります。
この演習では、以下のことを行います。
- Azure Database for PostgreSQL サーバーのインスタンスを作成します。
- Azure Database for PostgreSQL サーバーに接続します。
- データベースとサンプル テーブルを作成します。
- Azure Database for PostgreSQL サーバーを Microsoft Entra ID と統合します。
- Microsoft Entra ID でアプリケーションを登録します。
- シンプルな Microsoft Entra 統合 Node.js ベースのアプリケーションを実装します。
- Node.js ベース アプリケーションの機能を検証します。
前提条件
この演習を実行するには、以下が必要です。
- Azure サブスクリプションで演習 "Microsoft Entra ID を設定する" を完了していること。
- Azure サブスクリプションに関連付けられている Microsoft Entra テナントの全体管理者ロールと、Azure サブスクリプションの所有者または共同作成者ロールを持つ Microsoft アカウントまたは Microsoft Entra アカウント。
警告
このモジュールの演習では、昇格された管理特権を必要とする機密性の高い操作が実行されるため、テスト環境を使用してください。
Azure Database for PostgreSQL サーバーのインスタンスを作成する
最初に、Azure Database for PostgreSQL サーバーのインスタンスを作成します。
必要に応じて Web ブラウザーを起動し、Azure portal に移動してサインインし、このモジュールで使用する Azure サブスクリプションにアクセスします。
Azure portal ページ上部にある [リソース、サービス、ドキュメントの検索] ボックスを使用して「Azure Database for PostgreSQL」を検索し、検索結果の一覧の [サービス] セクションから [Azure Database for PostgreSQL] を選択します。
[Azure Database for PostgreSQL サーバー] ペインで、[+ 作成] を選択します。
[Azure Database for PostgreSQL デプロイ オプションの選択] ペインの [Azure Database for PostgreSQL] タイルで、[リソースの種類] に対して [単一サーバー] を選択します。
[作成] を選択します
[単一サーバー] ペインの [基本] タブで次の設定を構成し、[レビューと作成] を選択します。その他の設定はすべて既定値のままにします。
設定 構成 サブスクリプション このモジュールで使用する Azure サブスクリプションの名前を選択します。 Resource group postgresql-db-RG という名前の新しいリソース グループを作成します。 サーバー名 小文字、数字、またはダッシュで構成され、文字で始まる一意の名前を入力します。 データ ソース [なし] を選択します。 場所 Azure Database for PostgreSQL インスタンスを作成できるラボ環境の場所に最も近い Azure リージョンを選択します。 Version [11] を選択します。 コンピューティングとストレージ [サーバーの構成] リンクを選択します。 [構成] ブレードの [基本] を選択し、[仮想コア] の値を 1 に、[Storage](ストレージ) を 5 GB に設定して、[OK] を選択します。 管理者ユーザー名 「student」と入力します。 Password 「 <password>
」と入力します。[単一サーバー] ブレードの [確認と作成] タブで [作成] を選択します。
プロビジョニングが完了するまで待ちます。 これには 5 分ほどかかる場合があります。
Note
プロビジョニング プロセスによって、postgres という名前のデータベースがターゲット サーバー内に自動的に作成されます。
Azure Database for PostgreSQL サーバーに接続する
プロビジョニングされた Azure Database for PostgreSQL サーバーには、psql ツールを使用して接続します。
[Microsoft.PostgreSQLServer.createPostgreSqlServer の概要] ペインで、[リソースに移動] を選択します。
[デプロイ] ペインの縦長のメニューの [設定] セクションで、[接続のセキュリティ] を選択します。
[接続のセキュリティ] ブレードで、[Azure サービスへのアクセスを許可] を [はい] に設定し、[+ クライアント IP の追加] を選択して、[SSL 接続を強制する] を [無効] に設定し、[保存] を選択します。
Note
これらの設定によって、自分のコンピューターから、また、Azure で実行されているアプリケーションからデータベースに接続できるようになります。
Note
SSL の強制を無効にするのは、後続の演習を単純化するためです。 一般に、この設定は有効のままにする必要があります。
Azure portal の [デプロイ] ペインが表示されているブラウザー ウィンドウの縦長のメニューで [概要] を選択します。
[Essentials](基本) セクションで、[サーバー名] ラベルと [管理ユーザー名] ラベルの横にあるエントリを確認し、それらの値を記録します。
Note
ユーザー名には、前のタスクで指定したサーバー名が、@ 記号に続けて含まれることに注意してください。
Azure portal の [Azure Database for PostgreSQL 単一サーバー] ペインが表示されているブラウザー ウィンドウの縦長のメニューで、[設定] セクションの [接続文字列] を選択します。
接続文字列の一覧で、psql 接続文字列の値をコピーして記録します。後でこの演習の中で使用します。
Note
接続文字列の構文は以下のとおりです。
<server_name>
プレースホルダーは、先ほどこのタスクの中で確認したサーバーの名前を表します。psql "host=<server_name>.postgres.database.azure.com port=5432 dbname={your_database} user=student@<server_name> password={your_password} sslmode=require"
Azure portal で、検索テキスト ボックスの横にあるツールバーのアイコンを選択して、Cloud Shell の Bash セッションを開きます。
[Cloud Shell] ペインの Bash セッション内で、psql 接続文字列の値をクリップボードから貼り付けて、次のコマンドと一致するように変更を加えます。コマンドを実行すると、新しくデプロイされた Azure Database for PostgreSQL のサーバー インスタンスをホストとする postgres データベースに接続されます。 クリップボードから貼り付けた接続文字列には、最初から
<server_name>
プレースホルダーの値が含まれています。psql "host=<server_name>.postgres.database.azure.com port=5432 dbname=postgres user=student@<server_name>.postgres.database.azure.com password=<enter your password> sslmode=require"
Note
接続に成功すると、
postgres=>
というプロンプトが表示されます。
データベースとサンプル テーブルを作成する
Cloud Shell ペインで、
postgres=>
プロンプトから次のコマンドを実行して、cnamtinventory という名前の新しいデータベースを作成します。CREATE DATABASE cnamtinventory;
次のコマンドを実行して、新しく作成したデータベースに接続を切り替えます。
\c cnamtinventory
次のコマンドを実行して、tenants テーブルを作成します。
CREATE TABLE tenants ( id bigserial PRIMARY KEY, name text NOT NULL, created_at TIMESTAMP DEFAULT NOW()::date, updated_at TIMESTAMP DEFAULT NOW()::date );
次のコマンドを実行して、inventory テーブルを作成します。
CREATE TABLE inventory ( id bigserial, tenant_id bigint REFERENCES tenants (id), name VARCHAR(50), quantity INTEGER, date DATE NOT NULL DEFAULT NOW()::date, created_at TIMESTAMP DEFAULT NOW()::date, updated_at TIMESTAMP DEFAULT NOW()::date, PRIMARY KEY (tenant_id, id, date) ) PARTITION BY RANGE (date); CREATE TABLE inventory_default PARTITION OF inventory DEFAULT;
Note
データは、date 列の値に基づいてパーティション分割されます。
次のコマンドを実行して、テーブルが正常に作成されたことを確認します。
\dt
次のコマンドを実行して、tenants テーブルにサンプル データを読み込みます。
INSERT INTO tenants (id, name) VALUES (1, 'adatum'); INSERT INTO tenants (id, name) VALUES (2, 'contoso');
次のコマンドを実行して、inventory テーブルにサンプル データを読み込みます。
INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 1, 'yogurt', 200); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 1, 'milk', 100); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 2, 'yogurt', 20); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 2, 'milk', 10);
次のコマンドを実行して、挿入したデータが inventory テーブルに存在することを確認します。
SELECT * FROM inventory;
[Cloud Shell] ペインを閉じます。
Azure Database for PostgreSQL サーバーを Microsoft Entra ID と統合する
Azure Database for PostgreSQL サーバー インスタンスを Microsoft Entra ID と統合するには、サーバーの指定 Active Directory 管理者として Microsoft Entra ユーザー アカウントを指定する必要があります。 その用途には、前のタスクで作成した adatumadmin1 ユーザー アカウントを使用します。 サーバーには、そのユーザー アカウントを使用してサインインする必要があります。 その時点で、Microsoft Entra ID ベースのデータベース ユーザーを作成し、それらのユーザーにデータベース ロールを割り当てることができます。 ここでは、前の演習で作成した adatumuser1、adatumgroup1、contosouser1 の各 Microsoft Entra オブジェクトを使用します。
Azure portal の Azure Database for PostgreSQL サーバー ブレードが表示されているブラウザー ウィンドウの縦長のメニューで、[設定] セクションの [Active Directory 管理者] を選択し、ツール バーから [管理者の設定] を選択します。
[Active Directory 管理者] ブレードの Microsoft Entra ユーザー アカウントのリストで、前の演習で作成した [adatumadmin1] ユーザー アカウントを選んで [選択]、[保存] の順に選択します。
さらに別の Web ブラウザー ウィンドウをシークレット (InPrivate) モードで開いて Azure portal に移動し、前の演習で作成した adatumadmin1 ユーザー アカウントとパスワードを使ってサインインします。
Azure portal で、検索テキスト ボックスの横にあるツール バーのアイコンを選択して、Cloud Shell を開きます。
Bash または PowerShell を選択するよう求められたら Bash を選択し、"ストレージがマウントされていません" というメッセージが表示されたら [ストレージの作成] を選択します。
[Cloud Shell] ペインの Bash セッション内で、次のコマンドを実行し、Azure Database for PostgreSQL にアクセスするために必要な Microsoft Entra アクセス トークンを取得して表示します。
FULL_TOKEN=$(az account get-access-token --resource-type oss-rdbms) echo $FULL_TOKEN
Note
このコマンドから生成される出力には、Base 64 でエンコードされたトークンが含まれます。Azure Database for PostgreSQL リソースに対する認証済みユーザーが、このトークンによって識別されます。
出力には、次の形式が使用されます。
{ "accessToken": "<placeholder for token value>", "expiresOn": "2021-05-21 18:22:44.000000", "subscription": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a", "tenant": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "tokenType": "Bearer" }
次のコマンドを実行して、PGPASSWORD 変数の値を、前の手順で実行したコマンドの出力から得たアクセス トークンの値に設定します。
export PGPASSWORD=$(echo $FULL_TOKEN | jq -r '.accessToken')
psql ツールを使い、Microsoft Entra 認証を使用して、次のコマンドを実行して cnamtinventory データベースに接続します (
<server_name>
プレースホルダーは、この演習で先ほど特定したサーバーの名前に置き換えます)。DOMAIN_NAME=$(az rest --method GET --url 'https://management.azure.com/tenants?api-version=2020-01-01' --query "value[0].defaultDomain" -o tsv) psql "host=<server_name>.postgres.database.azure.com user=adatumadmin1@$DOMAIN_NAME@<server_name> dbname=cnamtinventory sslmode=require"
Note
接続に成功すると、
cnamtinventory=>
というプロンプトが表示されます。cnamtinventory=>
プロンプトから次のコマンドを実行して、前の演習で作成した Microsoft Entra グループ adatumgroup1 に対応するデータベース ロールを作成します。CREATE ROLE "adatumgroup1" WITH LOGIN IN ROLE azure_ad_user;
次のコマンドを実行して、ロールが正常に作成されたことを確認します。
SELECT rolname FROM pg_roles;
次のコマンドを実行して、前の演習で作成した adatumgroup1 に、inventory テーブルに対する SELECT アクセス許可を付与します。
GRANT SELECT ON inventory TO adatumgroup1;
adatumadmin1 ユーザー アカウントとしてサインアウトし、シークレット (InPrivate) モードの Web ブラウザー ウィンドウを閉じます。
演Microsoft Entra ID でアプリケーションを登録する
Microsoft Entra 認証を使用して Azure Database for PostgreSQL データベースにアクセスする Node.js ベースのサンプル アプリケーションを実装するには、Microsoft Entra アプリケーション オブジェクトとそれに対応するセキュリティ プリンシパルを作成する必要があります。 そうすることで、Node.js ベースのアプリケーションが Microsoft Entra ユーザーを偽装してデータベース オブジェクトにアクセスできるようになります。
Azure portal で、[リソース、サービス、ドキュメントの検索] テキスト ボックスを使用して Microsoft Entra ID を検索し、結果のリストで [Microsoft Entra ID] を選択します。
Microsoft Entra ブレードの垂直メニューで、[管理] セクションの [アプリの登録] を選択します。
[アプリの登録] ブレードで [+ 新規登録] を選択します。
[アプリケーションの登録] ブレードの [名前] ボックスに「cna-app」と入力します。 [サポートされているアカウントの種類] セクションで、[Accounts in this organizational directory only (Default directory only - Single tenant)](この組織のディレクトリ内のアカウントのみ (既定のディレクトリのみ - シングル テナント)) が選択されていることを確認します。 [リダイレクト URI (省略可能)] セクションで [Web] エントリを
http://localhost:8080/redirect
に設定し、[登録] を選択します。Note
Microsoft Entra 登録済みアプリケーションには、マルチテナント サポートの構成を選択することもできます。 ただし、このアプローチの詳しい内容についてはこのモジュールの範囲外となります。
注意
アプリケーションのデプロイ後、[リダイレクト URI (省略可能)] の値を変更してその実際の URL を反映する必要があります。
結果として得られた設定を [cna-app] ブレードで確認し、[アプリケーション (クライアント) ID] プロパティと [ディレクトリ (テナント) ID] プロパティの値を記録します。
[cna-app] ブレードの [管理] セクションで [証明書とシークレット] を選択し、[+ 新しいクライアント シークレット] を選択します。
[クライアント シークレットの追加] ブレードの [説明] ボックスに「cna-secret-0」と入力します。 [有効期限] ドロップダウン リストのエントリは既定値のままにして、[追加] を選択します。
[cna-app | 証明書とシークレット] ブレードに戻って、新しく生成されたシークレットの値をコピーします。
Note
このブレードから移動する前に必ずシークレットの値をコピーしてください。ブレードから移動した時点で値を取得できなくなります。 その場合は、新たにシークレットを作成してください。
[cna-app | 証明書とシークレット] ブレードで、縦長のメニューの [管理] セクションから [API のアクセス許可] を選択します。
[cna-app | API のアクセス許可] ブレードで [+ アクセス許可の追加] を選択し、[API アクセス許可の要求] ブレードの [所属する組織で使用している API] タブを選択して、検索テキスト ボックスに「Azure OSSRDBMS Database」と入力し、検索結果の一覧から [Azure OSSRDBMS Database] を選択します。
[API アクセス許可の要求] ペインの [委任されたアクセス許可] を選択し、[user_impersonation] チェック ボックスをオンにして、[アクセス許可の追加] を選択します。
[cna-app | API のアクセス許可] ブレードに戻って [既定のディレクトリに管理者の同意を与えます] を選択し、確認のメッセージが表示されたら [はい] を選択します。
[cna-app | API のアクセス許可] ブレードで、アクセス許可が付与されていることを確認します。
シンプルな Microsoft Entra 統合 Node.js ベースのアプリケーションを実装する
アプリケーションが Microsoft Entra テナントに登録されたので、その実装に進むことができます。
Azure portal で、検索テキスト ボックスの横にあるツールバーのアイコンを選択して、Cloud Shell で Bash セッションを開始します。
[Cloud Shell] ペインの Bash セッションで次のコマンドを実行し、新しいディレクトリで Node.js プロジェクトを初期化します。
mkdir -p cna-aadexpress && cd cna-aadexpress npm init -y
次のコマンドを実行して、必要なパッケージをプロジェクトの依存関係に追加します。
npm install express npm install pg npm install @azure/msal-node
次のコマンドを実行して、index.js という名前のファイルをプロジェクトのルートに作成します。
touch ./index.js
nano エディターを使用して index.js ファイルを開き、次の内容を追加します。 このユニットの後半で、プレースホルダー
<webapp_name>
を置き換えるアプリ名を作成します。<client_id>
、<tenant_id>
、<client_secret>
、および<server_name>
(.postgres.database.azure.com
サフィックスを除く) は、先ほどこの演習の中で記録した実際の値に置き換えてください。Note
プレースホルダー
<client_id>
と<tenant_id>
は、先ほどこの演習の中で触れた [アプリケーション (クライアント) ID] プロパティと [ディレクトリ (テナント) ID] プロパティに対応します。// Import dependencies const express = require("express"); const msal = require('@azure/msal-node'); const pg = require('pg'); const port = process.env.PORT || 8080 // Initialize express const app = express(); app.use(express.json()); app.listen(port, () => console.log(`Sample app is listening on port ${port}!`)) // Authentication parameters const config = { auth: { clientId: "<client_id>", authority: "https://login.microsoftonline.com/<tenant_id>", clientSecret: "<client_secret>" }, system: { loggerOptions: { loggerCallback(loglevel, message, containsPii) { console.log(message); }, piiLoggingEnabled: false, logLevel: msal.LogLevel.Verbose, } } }; var outputrows = "" // Initialize MSAL Node object using authentication parameters const cca = new msal.ConfidentialClientApplication(config); app.get('/auth', (req, res) => { redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect"; // Construct a request object for auth code const authCodeUrlParameters = { scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"], redirectUri: redirectUri, }; // Request auth code, then redirect cca.getAuthCodeUrl(authCodeUrlParameters) .then((response) => { res.redirect(response); }).catch((error) => res.send(error)); }); app.get('/redirect', (req, res) => { redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect"; // Use the auth code in redirect request to construct a token request object const tokenRequest = { code: req.query.code, scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"], redirectUri: redirectUri, }; // Exchange the auth code for tokens cca.acquireTokenByCode(tokenRequest) .then((response) => { //res.send(response); var username = 'adatumgroup1'; var databasename = 'cnamtinventory'; var servername = '<server_name>'; var tablename = 'inventory'; process.env.PGPASSWORD = response.accessToken; const connectionString = `postgres://${username}@${servername}@${servername}.postgres.database.azure.com:5432/${databasename}?ssl=true`; res.write(connectionString + "\n\n"); res.write(response.accessToken + "\n\n"); const client = new pg.Client(connectionString); client.connect(err => { if (err) throw err; else { queryDatabase(response.account.name); } }); function queryDatabase(tenant_id) { console.log(`Running query to PostgreSQL server: ${servername}`); switch (tenant_id) { case "adatumuser1": id = "1"; break; case "contosouser1": id = "2"; break; } const query = `SELECT * FROM ${tablename} WHERE tenant_id = ${id};`; client.query(query) .then(qresponse => { const rows = qresponse.rows; rows.map(row => { var singlerow = `${JSON.stringify(row)}`; console.log(singlerow); outputrows += singlerow + "\n"; }); res.write(outputrows); res.end(); process.exit(); }) .catch(err => { console.log(err); }); } }).catch((error) => res.write(error)); });
Note
マルチテナントの Microsoft Entra 登録済みアプリケーションでは、汎用機関 URL
authority: "https://login.microsoftonline.com/common"
が使用されますが、このケースでは、実際のテナント ID を含むシングルテナント URL を使用する必要があります。Note
アプリケーションのデプロイ後は、[リダイレクト URL] の値を実際のリダイレクト URL に置き換える必要があることに留意してください。
プロジェクトのルートにある package.json ファイルを nano エディターを使用して編集します。次の内容に置き換えてください。
{ "name": "node-express", "version": "1.0.0", "description": "Node.js express sample", "main": "index.js", "scripts": { "start": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "@azure/msal-node": "^1.1.0", "body-parser": "^1.19.0", "express": "^4.17.1", "http": "0.0.0", "morgan": "^1.10.0", "pg": "^8.6.0" } }
Node.js ベース アプリケーションの機能を検証する
いよいよ Web アプリの機能をテストする準備が整いました。 コンテナー化することもできますが、単純化するために、ここでは Azure App Service にデプロイします。 そうすることで手軽にその機能を検証し、コンテナー化が実用的な選択肢であることを確認することができます。
[Cloud Shell] ペインの Bash セッションから以下のコマンドを実行して、Node.js Express アプリのデプロイ先となり、Azure Web アプリのホストとなるリソース グループを作成します。
RG1NAME=postgresql-db-RG LOCATION=$(az group show --resource-group $RG1NAME --query location --output tsv) RG2NAME=cna-aadexpress-RG az group create --name $RG2NAME --location $LOCATION
次のコマンドを実行して、新しい Azure Web アプリのホストとなる Free レベルの Azure App Service プランを作成します。
SPNAME=aadexpress-sp az appservice plan create --name $SPNAME --resource-group $RG2NAME --sku F1 --is-linux
次のコマンドを実行して、Node.js ベースの新しい Azure Web アプリを作成します。
WEBAPPNAME=aadexpress$RANDOM$RANDOM az webapp create --name $WEBAPPNAME --resource-group $RG2NAME --plan $SPNAME --runtime "NODE|16-lts"
次のコマンドを実行して Web アプリの名前を確認します。
echo $WEBAPPNAME
nano エディターを使用して index.js ファイルを開き、
<webapp_name>
という 2 つのプレースホルダーを、前の手順で確認した名前に置き換え、変更を保存してファイルを閉じます。Note
必ず両方の
<webapp_name>
プレースホルダーを置き換えてください。Azure portal が表示されている Web ブラウザー ウィンドウでタブをもう 1 つ開き、Azure portal に移動します。プロンプトが表示されたら、サインインして、このモジュールで使用する Azure サブスクリプションにアクセスします。
Azure portal で、[リソース、サービス、ドキュメントの検索] テキスト ボックスを使用して Microsoft Entra ID を検索し、結果のリストで [Microsoft Entra ID] を選択します。
Microsoft Entra ブレードの [アプリの登録] ブレードに移動して [cna-app] エントリを選択し、垂直メニューの [管理] セクションで [認証] を選択します。
[cna-app | 認証] ブレードで、index.js ファイルの更新内容に合わせて [リダイレクト URI] の値を変更し、その変更を保存します。
[Cloud Shell] ペインに Bash セッションが表示されている Web ブラウザー タブに戻り、次のコマンドを実行してローカル Git リポジトリを初期化し、メイン ブランチの変更をすべてコミットします。
cd ~/cna-aadexpress git config --global user.email "user1@adatum.com" git config --global user.name "Adatum User1" git init git add -A git commit -m "Initial Commit"
次のコマンドを実行して、ユーザーレベルのデプロイ資格情報を設定します。
DEPLOYMENTUSER=m06User$RANDOM DEPLOYMENTPASS=m06Pass$RANDOM$RANDOM az webapp deployment user set --user-name $DEPLOYMENTUSER --password $DEPLOYMENTPASS
次のコマンドを実行してユーザーレベルのデプロイ資格情報を確認し、その値を記録します。後でこのタスクの中で必要になります。
echo $DEPLOYMENTUSER echo $DEPLOYMENTPASS
次のコマンドを実行して、
git push
コマンドのターゲットとして使用する Azure Web アプリのデプロイ URL を確認します。RG2NAME=cna-aadexpress-RG WEBAPPNAME=$(az webapp list --resource-group $RG2NAME --query "[0].name" --output tsv) DEPLOYMENTURL=$(az webapp deployment source config-local-git --name $WEBAPPNAME --resource-group $RG2NAME --output tsv)
前の手順で確認したデプロイ URL を表す azure という名前のリモート リポジトリを、次のコマンドを実行して構成します。
git remote add azure $DEPLOYMENTURL
次のコマンドを実行して、main ブランチに基づいて test ブランチを作成し、その内容を Azure Web アプリにプッシュします (パスワードの入力を求められた場合、このタスクで前に記録したユーザーレベルのデプロイ資格情報から取得できます)。
git checkout -b test git commit -a -m "testing" git push --set-upstream azure test
[Cloud Shell] ペインを閉じます。
さらに別の Web ブラウザー ウィンドウをシークレット (InPrivate) モードで開いて Azure portal に移動し、前の演習で作成した adatumuser1 ユーザー アカウントを使用してサインインします。
Azure portal で、Azure portal ページの上部にある [リソース、サービス、ドキュメントの検索] テキスト ボックスを使用して、「App Services」を検索します。
[App Services] ブレードで、App Service インスタンスの一覧から、新たにデプロイした Azure Web アプリを表すエントリを選択します。
Web アプリのプロパティが表示されているブレードの [Essentials](基本) セクションで、規定のドメインの URL の値をコピーします。
同じブラウザー ウィンドウでもう 1 つタブを開き、その検索ボックスに https:// と入力して、先ほどクリップボードにコピーした URL を貼り付け、/auth サフィックスを追加して Enter キーを押します。
Note
URL は、
https://<webapp_name>.azurewebsites.net/auth
という形式になっている必要があります。結果の Web ページが、現在サインインしているユーザーの Microsoft Entra 認証情報で構成されていることを確認します (出力は異なる場合があります)。
結果
おめでとうございます。 このモジュールの 2 番目の演習を完了しました。 この演習では、Azure Database for PostgreSQL をシングル サーバー デプロイ モデルでインストールし、サンプルの在庫データを含むデータベースを作成して、サーバーを Microsoft Entra ID と統合し、Microsoft Entra 認証を利用してデータベースに対してクエリを実行するシンプルな Node.js ベース アプリケーションを実装しました。