1. Azure Database for MySQL/PostgreSQLとは?
MySQLとPostgreSQLが追加されたラインナップ拡充の背景として、以前からAzureではClearDBというサードパーティー製のMySQLを提供していましたが、利用者からはMicrosoftが提供するマネージドなMySQLやPostgreSQLを利用したいという要望が数多くあり、それが実現したという結果になります。
Azureの要望は見える化がされていて、Feedback Forumsでは、執筆時点で2328 vote(投票)もありました。タイトルは「ClearDBを消してネイティブなAzure MySQL互換データベースを作って欲しい」という少し過激な内容が含まれていますが、ClearDBは現在も使用できます。
投票は誰でもできますし、自分で新たに作成することもできます。気になるものがありましたら、皆さんも投票することでAzureの新機能が実装されるかもしれません。
サービスの特徴
大きな特徴は、フルマネージドなPaaS型のサービスであることです。Virtual MachineなどのIaaSと異なり、皆さん自身でOSのアップデートやデータベースのセキュリティパッチを適用する必要はありません。
標準で冗長化されており、もしお使いのデータベースインスタンスで不具合があった場合は自動でフェールオーバーされます。冗長化の恩恵として、ダウンタイムなしのスケールアップ、スケールダウンが可能です。
データは自動バックアップされており、ポイントインタイムリカバリ(PITR)が最大35日間可能です。
Azure Database for MySQL/PostgreSQLを使い始めるのに特別なドライバやツールは必要なく、オンプレのMySQLやPostgreSQLと同じように使えます。新たに覚えなければいけないこともありませんし、マイクロソフト製のツールやドライバも不要です。
Virtual Machineとは一味違う、サービスの仕組み
Azure Database for MySQL/PostgreSQLは単純にVirtual Machine上で動いているのではなく、Service Fabric上で動いています。
Service Fabricは長年Azureの基幹サービスとして使われており、Azure SQL Databaseも同様にService Fabric上で運用されています。長年蓄積されたAzure SQL Databaseの運用ノウハウをもとにMySQLとPostgreSQLサービスを展開しているので、皆さんはセキュリティやファイル破損などを気にすることなく、安心してサービスを利用できます。
サービスの概念と接続イメージ
冒頭でAzure Database for MySQL/PostgreSQLは「標準で冗長化されている」と記載しました。皆さんのクライアントから接続するデータベースは「論理データベース」であり、実際のデータベースインスタンスはService Fabricのクラスタ上で動作しています。下図のようなイメージです。
このように冗長化されているため、SLAは99.99%で提供されています。2018年3月に一般提供が開始され、SLAが設定されました。
セキュリティの仕組み
データベースで最も気になるポイントの一つはセキュリティです。Azure Database for MySQL/PostgreSQLは次の3つの層でセキュリティを管理しています。
-
ID管理
- MySQL/PostgreSQLネイティブ認証
-
アクセス管理
- SSL接続
- ファイアウォール(IPホワイトリスト方式)
-
データ保護
- データベースバックアップ
- 暗号化(AES 256)
1点だけ、IPアドレスはパブリックIPとなり、VNET統合はまだサポートされていませんのでご注意ください。パブリックIPというと、通信が不特定多数のインターネット上に流れてしまい、情報漏えいを心配される方がいるかもしれませんが、ほとんどのケースでは安全です。
例えば、プライベートIPを持つVirtual Machineから、パブリックIPのAzure Database for MySQLに接続した場合の通信は、Microsoftのネットワーク内でルーティングされるので極めて安全であり、高速に動作します。つまり、Azureのサービス同士で使用するならば、皆さんは安心してお使いいただけます。
その他運用面でのメリット
フルマネージドならではのメリットが多数あります。
- 自動的にパッチを適用
- メトリック監視とアラート機能
- サーバーログの保存(最大7日分)
- 最大35日分のポイントインタイムリカバリ可能なバックアップ
- MySQL/PostgreSQLのコンフィグを編集可能(一部のみ)
注意点として、パッチ適用時は自動フェールオーバーにより、接続が切断される可能性があります。プログラムでは再接続可能なように設定しておくと良いでしょう。
2. Azure Database for MySQLを使ってみる
ここからは実際に試してみましょう。
Azure Database for MySQLの新規作成
Azure Portalにブラウザでアクセスし、「新規」-「Database」-「Azure Database for MySQL (preview)」の順に選択します。
「サーバー名」「サブスクリプション」「リソースグループ」「サーバー管理者ログイン名」「パスワード」「パスワードの確認」「場所」「バージョン」「価格レベル」を適宜入力していきます。価格レベルは「Standard」の最低スペックにしました。
「OK」選択で価格レベルを確定して、「作成」を選択すると、早速デプロイが始まります。
デプロイが終わりました。概要の画面が表示されます。
表示されている[サーバー名][サーバー管理者ログイン名]と、作成時に入力した[パスワード]は後ほど使用します。[サーバー管理者ログイン名]は一般的なオンプレミス環境と異なり、作成時に入力した文字列に加えて「@」(アットマーク)と[サーバー名]が加わっていますのでご注意ください。
Azure Database for MySQLの接続設定
ファイアウォールが有効になっており、デフォルトではすべての接続を受け付けてくれません。
まず「接続のセキュリティ」から「SSL接続を強制する」を「無効」に設定します。本来であれば、「有効」とすべきところですが、お試しに使う場合は設定が複雑になるため、あえて「無効」とします。
次に「自分のIPを追加」を選択すると、ファイアウォール規則にブラウザを立ち上げているマシンのIPが自動で設定されます。こちらも、開発時に一時的に使用するようにしてください。
上記の設定を行ったら、「保存」を選択します。
データベースの接続確認
mysql
コマンドでデータベースに接続できるかを確認します。
mysql -u [サーバー管理者ログイン名] -h [サーバー名] -P 3306 -p
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 65455 Server version: 5.6.26.0 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
quit
で切断します。
mysql> quit Bye
PHPサンプルスクリプトの実行
PHPを使用して単純にサーバーのバージョンを表示するスクリプトを実行します。ソースは次のとおりです。
<?php $mysqli = new mysqli("[サーバー名]", "[サーバー管理者ログイン名]", "[パスワード]"); echo $mysqli->server_info;
こちらのソースをsample-mysql.php
というファイル名で保存し、次のコマンドで実行します。
php sample-mysql.php
正常にデータベースに接続できれば、次のような出力結果となります。
5.6.26.0
3. Azure Database for PostrgreSQLを使ってみる
Azure Database for PostrgreSQLも同様に試してみましょう。データベースの作成まではMySQLと同様になります。
Azure Database for PostrgreSQLの新規作成
Azure Portalにブラウザでアクセスし、「新規」-「Database」-「Azure Database for PostgreSQL (preview)」の順に選択します。
「サーバー名」「サブスクリプション」「リソースグループ」「サーバー管理者ログイン名」「パスワード」「パスワードの確認」「場所」「バージョン」「価格レベル」を適宜入力していきます。価格レベルは「Standard」にします。
「OK」を選択して価格レベルを確定し、「作成」を選択すると、早速デプロイが始まります。
デプロイが終わりました。概要の画面が表示されます。ここまでMySQLとほとんど同じですね。
MySQLと同様に[サーバー管理者ログイン名]は一般的なオンプレミス環境と異なり、作成時に入力した文字列に加えて「@」(アットマーク)と[サーバー名]が加わっていますのでご注意ください。
Azure Database for PostgreSQLの接続設定
MySQLと同じ設定をします。
「接続のセキュリティ」から「SSL接続を強制する」を「無効」にし、「自分のIPを追加」を選択後、「保存」を選択します。
データベースの接続確認
psql
コマンドでデータベースに接続できるか確認します。
psql -h [サーバー名] -U [サーバー管理者ログイン名] -d postgres -W
psql (10.0, server 9.6.5) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-SHA384, bits: 256, compression: off) Type "help" for help. postgres=>
\q
で切断します。
postgres=> \q
サンプルスクリプトの実行
MySQLと同様にPHPを使用して単純にサーバーのバージョンを表示するスクリプトを実行します。ソースは次のとおりです。
<?php $dbconn = pg_connect("host=[サーバー名] dbname=postgres user=[サーバー管理者ログイン名] password=[パスワード]") or die('Could not connect: ' . pg_last_error()); $v = pg_version($dbconn); echo $v['server']; pg_close($dbconn);
phpコマンドで実行した結果は次のような出力となります。
9.6.5
4. Ruby on Railsを試してみる
Azure Database for MySQLとAzure Database for PostgreSQLをRuby on Rails(以下、Rails)で試してみましょう。
Railsの環境構築
次のコマンドでインストールを行います。Windowsを使用している方は「Ruby on Railsのインストール手順」を参照して環境を構築してください。
gem install rails --no-ri --no-rdoc
バージョンを次のコマンドで確認します。
rails -v
正常にインストールされると、次のように表示されます。
Rails 5.1.5
一行掲示板を作ってみよう
Railsアプリを新規に作成してみましょう。ここでは例として、一行掲示板を作ってみます。データベースはMySQLを使用します。
rails new miniboard --skip-bundle --database mysql
なお、PostgreSQLで試す場合は、--databaseにpostgresqlと変えてください。
rails new miniboard --skip-bundle --database postgresql
miniboardディレクトリに移動して、次のコマンドを実行します。
cd miniboard bundle install --path vendor\bundle
config/database.ymlのusername、passwordとhostを各自の環境に応じて修正します。
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: [サーバー管理者ログイン名] password: [パスワード] host: [サーバー名]
データベースを作成します。
bundle exec rake db:create
データベースの作成が終わったら、scaffoldを次のコマンドで作成します。
rails generate scaffold Article title:string
データベースをマイグレーションします。
rake db:migrate
Railsサーバーを立ち上げます。
rails server
「http://localhost:3000」をブラウザで開くと、次の画面が表示されます。
[New Article]をクリックして、[Title]に「テスト」と入力して[Create Article]をクリックします。
次の画面が表示されれば成功です。
[Back]をクリックして戻ると一覧が表示されます。[Edit]で編集が行え、[Destroy]で削除ができます。
5. まとめ
Azure Database for MySQL/PostgreSQLはAzure Portalから簡単に作成が可能で、PHPやRubyからも今までと同じように扱えます。他のプログラミング言語でも同様です。皆さんもぜひチャレンジしてみてはいかがでしょうか?