WordPress
MySQL
Azure
Paas
WebApps

Check! 試用版 Azure Web Apps の WordPress テンプレートのデータベースは?

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに

試用版 Azure Web Apps で WordPress のテンプレートを使用した場合のデータベースについて観察してみました。

どうやら、Azure Web Apps の MySQL In App を使うようです。(・ω・)ノ

試用版 Azure Web Apps の WordPress のデータベースをみてみる

試しに、試用版の Web Apps で、 WordPress のテンプレートを選択して作成してみます。作成した WordPress をひらくと、初回の管理者情報を入力した後、データベースの設定ができていないという警告が表示されます。

ですが、その警告を無視して記事を書いてみると、ちゃんと保存されます!

データベースは?

どういうことかしら?

wp-config.php のデータベース設定をみてみましょう。

実は、 MySQL In App と呼ばれる Azure Web Apps に内蔵された MySQL へ接続する処理が差し込まれているのでした。

wp-config.php
// ... <略> ...

$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key => $value) {
    if (strpos($key, "MYSQLCONNSTR_") !== 0) {
        continue;
    }

    $connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
    $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
    $connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
    $connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $connectstr_dbname);

/** MySQL database username */
define('DB_USER', $connectstr_dbusername);

/** MySQL database password */
define('DB_PASSWORD', $connectstr_dbpassword);

/** MySQL hostname */
define('DB_HOST', $connectstr_dbhost);

// ... <略> ...

もう少し種明かしをすると、MySQL In App の接続情報は、 MYSQLCONNSTR_localdb という環境変数として提供されていて、以下のようなフォーマットの文字列です。

MYSQLCONNSTR_localdb
Database=localdb;Data Source=127.0.0.1:<ポート番号>;User Id=azure;Password=<パスワード>

ですので、 wp-config.php では、この環境変数をパースしてそれぞれ設定している、という種明かしでした!

Epilogue - おわりに

小ネタですが…、これを応用すると、簡単に MySQL In App を使えそうですね!