Amimoto AMI で Amazon RDS を使う

Amimoto AMI で データベースに Amazon RDS を採用する手順を解説しています。

Amazon RDS とは

Amazon リレーショナルデータベースサービスは、リレーショナルデータベースのセットアップ・運用・クラウド上でのスケール変更すべてが驚くほど簡単に実現できるウェブサービスです。
コストパフォーマンスにすぐれており、データベース・ソフトウェアへのパッチの自動適用、データベースのバックアップユーザ定義の保持期間のバックアップを格納し、ポイント・イン・タイム・リカバリを可能にすることによって、時間のかかるデータベース管理タスクを管理しつつ、高いコストパフォーマンスと柔軟に変更可能なストレージを提供します。

MySQL、MariaDB、PostgreSQL、Oracle、Microsoft SQL サーバ、そして MySQL 互換の Amazon Aurora DB Engine から選択が可能です。

マルチ AZ 配置オプションにより、複数のアベイラビリティゾーンで DB インスタンスを起動が可能です。このオプションを選択すると、Amazon は自動的にプロビジョニングと異なるアベーラビリティゾーンに自身の DB インスタンスと同期したレプリカを配置します。これはプライマリ DB インスタンスと同期し、データの冗長性を担保しつつ、フェールオーバーをサポートする I/O がフリーズを排除、また、システムバックアップ時の待ち時間のスパイクを最小限に抑えるように利用可能ゾーンの間でレプリケーションされます。

メリット

  • CPU、IOPS、ストレージのスケールが容易
  • 任意・自動のスナップショットベースのバックアップ
  • マルチ アベーラビリティのデプロイメント
  • プライマリの障害発生時には同期しているセカンダリへの切り替えが容易

デメリット

  • DB インスタンスへのシェルアクセスができない
  • ユーザ権限に制限がある
  • MySQL 内のレプリケーションが無効化される
  • 週4時間のメンテナンスウィンドウが表示される
  • RDS インスタンスを止められない

 

Amazon RDS 内に MySQL サーバを構築する

詳細な情報は以下の Amazon のドキュメントをご参照ください:
MySQL DB インスタンスを作成して MySQL DB インスタンス上のデータベースに接続する

 
ここでは各設定で必要かつ重要なポイントに絞ってご説明します。
 

ステップ 1.  データベースの設定を決めます

Multi-AZ Deployment (マルチ AZ 配置)

DB インスタンスをシングル AZ 配置にするであればここは [NO] を選択してください。
[Yes]
にした場合 マルチ AZ デプロイメントと MySQL は複数のアベイラビリティゾーンは配置され、コールドスタンバイ状態となります。
マスターで障害が発生した場合、 BD サーバは自動でスレーブへ切り替わります。料金が倍になる事なく、障害耐性を高めることが可能です。 

データベースへ割り当てるストレージサイズ
データベースが使用するストレージサイズを指定してください

データベースインスタンスの ID
データベースインスタンスに分かりやすい名前を付けてください。

マスターユーザ名、マスターパスワード、パスワードの確認
MySQL へ接続する際に設定するユーザ名とパスワードです。
 

ステップ 2. 詳細設定をする

VPC
どの VPC を選択してもよいですが、デフォルトの VPC で十分です。

データベース セキュリティグループ
RDS を置くセキュリティグループを選択してください。
詳しくは DB セキュリティグループを操作する をご参照ください。

設定するセキュリティグループ内ではポート 3306 を Amimoto AMI のセキュリティグループからアクセスできるよう設定をしてください。

データベース名
データベース名を入力後、データベースはRDSに自動で作成されます。
データベース名が未設定の場合はRDS を起動して MySQL クライアントへ接続後次のコマンドを実行後、データベースを作成してください。
create database

EC2 から RDS への接続確認
RDS を有効化したあと ssh を使い、 Amimoto AMI インスタンスから接続ができるかを確認してください。コマンドは次の通りです。

$ mysql -h {endpoint} -P 3306 -u {mymasteruser} -p 

Endpoint  へは AWS マネージメントコンソールの RDS 情報の項目に表示されています。

mymasteruser と password  は RDS 作成時のマスターユーザ名 とマスターパスワード です。

データのマイグレーションと wp-config.php の修正
MySQL のデータを Amimoto AMI の RDS へマイグレーションする場合は以下のステップを踏んでください:

wp-cli でデータをエクスポート
データベースのデータを wp-cli でエクスポートしてください

$ wp --path=/path/to/wordpress db export
/path/to/wordpress

 は WordPress のインストールディレクトリです。
Amimoto AMI の場合、WordPress は通常 /var/www/vhosts/{instance_id} または  /var/www/vhosts/{DOMAIN-NAME} にインストールされています。
 

mysql コマンドで MySQL のデータを RDS へインポートする
wp-cli でエクスポートしたデータを今度は RDS へインポートします。

$ mysql -h {endpoint} -P 3306 -u {mymasteruser} -p {databasename} < dump.sql

 
wp-config.php を編集します

以下のように wp-config.php を書き換えてください:

 // ** MySQL settings - You can get this info from your web host ** //
$db_data = false;
if ( file_exists('/opt/aws/cloud_formation.json') ) {
        $db_data = json_decode(file_get_contents('/opt/aws/cloud_formation.json'), true);
        if ( isset($db_data['rds']) ) {
                $db_data = $db_data['rds'];
                $db_data['host'] = $db_data['endpoint'] . ':' . $db_data['port'];
        }
}
if ( !$db_data ) {
        $db_data = array(
                'database' => 'RDS_DATABASE_NAME_HERE',
                'username' => 'RDS_USER_NAME_HERE',
                'password' => 'RDS_PASSWORD_HERE',
                'host'     => 'RDS_ENDPOINT_HERE',
        );
  • RDS_DATABASE_NAME_HERE : 詳細設定で指定したデータベース名を入れてください
  • RDS_USER_NAME_HERE : データベース名のマスターユーザ名を入れてください
  • RDS_PASSWORD_HERE  : データベース名のマスターパスワードを入れてください
  • RDS_ENDPOINT_HERE  : RDS のエンドポイントを入れてください

wp-config.php の書き換えが終わったあとは WordPress へ接続ができるかを確認しましょう。
 

MySQL プロセスを終了
MySQL を RDS へ移動させたので Amimoto AMI 内の MySQL プロセスは不要となります。止めてしまいましょう。

次の方法で MySQL の自動起動を止めた上で MySQL プロセスを終了させましょう:

設定ファイルを変更する

Amimoto AMI のミドルウェアの設定は chef  で行っています。設定ファイルは /opt/local/amimoto.jsonです。

MySQL を停止させるにはファイルに"mysql" : { "enabled" : false }, を追記してを次のように書き換えてください:

{
  "nginx" : { "config" : { "user" : "nginx", "group" : "nginx" } },
  "php"   : { "config" : { "user" : "nginx", "group" : "nginx" } },
  "mysql" : { "enabled" : false },
  "phpfpm"  : { "enabled" : true },
  "run_list" : [ "recipe[amimoto]" ]
}

仕上げに設定の再読み込みと MySQL の停止を以下のコマンドを実行してください:

$ sudo /opt/local/proviosion
$ service mysql stop

これで Amimoto AMI で MySQL プロセスは完全に停止し、以降は起動しなくなります。

スライド

[日本語]How to use Amazon RDS with Amimoto AMI WordPress