1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
以前Azure VM(仮想マシン)にLAMP構成で日記アプリを作成しました。今回はアプリサーバ、データベースを分離し、Azure Key Vaultにデータベースのログインユーザ、パスワードを格納する構成でアプリを動作させます。
1-2 前回記事
前回記事は以下リンクです。
【Azure × LAMP】Bicepで構築する日記Webアプリケーション
2. 構築
インフラはBicepで構築します。アプリサーバのミドルウェアのインストールはcloud-init_web.txt、データベースサーバのミドルウェアのインストールはcloud-init_db.txtを利用します。
※main.bicepと同じフォルダに格納すれば自動的に読み込まれます。
1 . 資材をダウンロードします。
2 . Azureへログインします。
az login
3 . リソースグループを作成します。
az group create --name rg-diary-dev --location japaneast
# az group create --name <your resource group name> --location <location>
4 . Azureリソースをデプロイします。
az deployment group create --template-file main.bicep --resource-group rg-diary-dev --parameters adminPassword='P@ssw0rd1234!' dbPassword='P@ssw0rd1234!'
# az deployment group create --template-file main.bicep --resource-group <your resource group name> --parameters adminPassword='<login password for the Azure VM>' dbPassword='<login password for Database>'
以下リソースがデプロイされます。
ここでAzure Key VaultとデータベースサーバのプライベートIPアドレスを確認します。
5 . Azureリソースのデプロイ後、terratermの[SSH SCP...]等でアプリサーバのホームディレクトリにdiary-app.tar.gzをアップロードします。
6 . アプリケーションサーバ内で以下コマンドを実行します。
# アプリケーションを所定の位置に展開
sudo tar -xzvf ~/diary-app.tar.gz -C /var/www/html/
# サンプルページの削除
sudo rm /var/www/html/index.html
# config.phpの更新
# Azure key Vault名をセット
sudo sed -i "s/\$vaultName = 'kv-diary-dev-.*';/\$vaultName = 'kv-diary-dev-1fcf1';/" /var/www/html/diary-app/config.php
# データベースサーバのプライベートIPアドレスをセット
sudo sed -i "s/\$host = '.*';/\$host = '10.0.2.4';/" /var/www/html/diary-app/config.php
# Apacheサービスの再起動
sudo systemctl restart apache2
# データベースサーバへアクセス
ssh azureuser@10.0.2.4
7 . データベースサーバ内で以下コマンドを実行します。
# アプリケーションからの許可設定
sudo sed -i 's/^bind-address\s*=.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
# データベースサービスの再起動
sudo systemctl restart mysql
# データベースの操作
sudo mysql -u root
# 以下SQLコマンド
# rootユーザのパスワードをセット
CREATE USER 'root'@'%' IDENTIFIED BY 'P@ssw0rd1234!';
# アプリサーバからの許可設定
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
# ユーザー権限の変更を反映
FLUSH PRIVILEGES;
# データベースからログアウト
exit
# sshからログアウト(アプリサーバに戻る)
exit
8 . アプリケーションサーバ内で以下コマンドを実行します。
# データベースとテーブルの作成
mysql -h 10.0.2.4 -u root -p < /var/www/html/diary-app/db/init.sql
# データベースの確認
sudo mysql -h 10.0.2.4 -u root -p -D diary -e "SHOW DATABASES;"
# データベースの確認結果
+--------------------+
| Database |
+--------------------+
| diary |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
9 . ブラウザからアプリケーションにアクセスします。
http://<パブリックIPアドレス>/diary-app
10 . 日記を書いてMySQLデータベースにデータが格納されるか確認します。
11 . テーブル内のデータを確認します。
# テーブルのデータを取得
mysql -h 10.0.2.4 -u root -p -D diary -e "SELECT * FROM entries;"
# テーブルのデータを取得結果
+----+-------+---------+---------------------+
| id | title | content | created_at |
+----+-------+---------+---------------------+
| 1 | Hello | World! | 2025-08-17 00:53:57 |
+----+-------+---------+---------------------+
無事にデータが確認されていることを確認できました。
12 . Azure Key Vaultに格納されているデータベースのログイン名、パスワードを確認します。自分のアカウントに閲覧権限がなかったため、Key Vaultのポリシーを設定して権限を付与します。
# 変数宣言
myResourceGroup="rg-diary-dev"
myKeyVault="kv-diary-dev-1fcf1"
# myKeyVault="kv-diary-dev-<randomSuffix>"
# 自分のAzureアカウントIDを取得
myObjectId=$(az ad signed-in-user show --query id --output tsv)
# 自分のAzureアカウントIDを設定
az keyvault set-policy --name $myKeyVault --resource-group $myResourceGroup --object-id $myObjectId --secret-permissions get list
13 . 権限が付与されました。
ログインパスワードを確認できました。
3. 終わりに
本記事を最後まで読んで頂きましてありがとうございます。
次回はPaaS構成への移行を検討したいと思います。