まだPreviewですが、Azure App Service Web Apps内で利用できるローカルのMySQLインスタンスが構成できるようになりました。(Preview)
新規でWeb Appsを作成する際、「Web Apps + MySQL」を選択し、プロバイダーからMySQL in App (Preview)を選択することで有効化できます。
既存のWeb Appsで有効化する場合はWeb Appsのブレード内にある「MySQL In App」から機能をOnにするだけです。
有効化された場合、ログの設定など見ることができます。
なお有効化するとphpMyAdminのプラグインも入るので *.scm.azurewebsites.net/phpMyAdmin でアクセスできます。(ブレード上部の「管理」のリンク)
※SCM配下なのでMSアカウントなど権限のあるユーザーで認証してアクセスすればphpMyAdminそのもののログインはパスしてアクセスできます
なお既定のユーザーは azure 、パスワードは password なようです。このMySQLのインスタンスにはローカルからしか接続できないのでそのあたり注意が必要ですね。またリスンしてるポートもバラバラ(既定値ではないし、インスタンスがリサイクルされると変わる)ので注意してください。Kudu上のコンソールなどでMySQL.exeを使ってアクセスすることもできます。
"D:\Program Files (x86)\mysql\5.7.9.0\bin\mysql.exe" -e "show databases" --user=azure --password=password --port=49175 --bind-address=127.0.0.1
空のデータベースとしてazuredb が作られてたりします。まぁ後はご自由に(基本的にこのazuredbだけが使える感じでしょうか?)。ポート番号はphpMyAdmin上で確認するのが楽です。またアプリから接続する場合はサーバー環境変数に「MYSQLCONNSTR_localdb」という名前で接続文字列が入ってるのでそこから取得する感じになります。(MySQLのポート番号は WEBSITE_MYSQL_PORT に入ってます)
元Blogに接続文字列からもろもろ取得する方法が書かれているので参考にどうぞ。またベストプラクティスとしては決めうちせず、サーバー環境変数から取得するようにしましょう、ということです。ポート番号が毎度かわったりするので。これは現状mysqldをワーカープロセス内で動かしてるためです。
ということでベストプラクティスとして挙げられているのは、Web AppsがBasic以上の場合はAlwaysOnを有効にしてアイドル時にMySQLのインスタンスが落ちないようにする、Free、Shardプランの場合はWEBSITE_FASTCGI_MAXINSTANCES アプリ設定を3に設定するなどでしょうか。
制限事項
プレビューということで以下の制限事項があります。
- 現状、Web Appsのインスタンスが1つの場合のみサポートしてます。オートスケールも非サポートです。
- Web AppsのLocal Cache機能は非サポートです。
- MySQL in Appにリモートからアクセスできません。同じWeb Apps上のアプリやKuduのコンソール上もしくはphpMyAdminからのみアクセスできます。
パフォーマンスについて
リモートから接続できないのであくまで参考まで。
WordPress経由での例ですね。キャッシュなども併用してがんばってください。
その他
- Exporting your database to MySQL in-app database
- phpMyAdmin使っての例。WordpressのデータをMySQL in Appのazuredb上にインポートする方法など
- トラブルシューティングなど
まとめ
まだPreviewということで制限もありますが、単純なMySQL+Webアプリの場合に活躍できそうですね。ただ現状の制限だと1インスタンスで賄える範囲が対象となると思います。
マネージドなClearDBの代わりに自前で仮想マシンを立てる必要もないのでその手の用途では重宝しそうです。
ピンバック: WordPress + MySQL In Appをざっくり試してみました。 | nrjlog
ピンバック: Azure Update (2016.09.01) | ブチザッキ