AmimotoAMI のデータベースを RDS に変更する

AmimotoAMIの WordPress で RDS を使用するための手順を解説します。

Amazon RDS での MySQL サーバの作成

詳細は以下URLを参考にしてください。
MySQL DB インスタンスを作成して MySQL DB インスタンス上のデータベースに接続する

ここでは、各ステップで出てくる重要な入力項目について説明します。

ステップ Specify DB Details

マルチ AZ 配置

単一アベイラビリティーゾーンで DB インスタンスを作成する場合は、[No] を選択します。

[Yes]にして、マルチAZ配置にすると複数のアベイラビリティゾーンに MySQL が配置され、一台はコールドスタンバイ状態となります。
マスター側に障害が発生した場合、自動でスレーブ側の MySQL サーバに切り替えられるため耐障害性は高いですが、価格も2倍になりますので注意してください。

Allocated Storage

DBで使用するディスク容量になります。

DB Instance Identifier

DB インスタンス名です。これは自分のアカウント内で一意にしておく必要があります。

Master Username, Master Password, Confirm Password

MySQL に接続するときに使用するユーザ名、パスワードを指定します。

ステップ Configure Advanced Settings

VPC

どの VPC に設置するかを選択します。通常は Default VPC で良いでしょう。

DB Security Groups

RDS が所属するセキュリティグループを選択します。
詳細は以下URLを参考にしてください。
DB セキュリティグループを操作する

このセキュリティグループでは、AmimotoAMIが所属するセキュリティグループからの 3306 ポートへのアクセスを許可しておく必要があります。

Database Name

データベース名を入力しておくと自動で RDS にデータベースが作成されます。
未入力の場合は、RDS 起動後に MySQL クライアントで接続して create database 文を実行してデータベースを作成する必要があります。

EC2 から RDS への接続確認

RDS が起動したら、AmimotoAMIインスタンスに ssh 接続して接続できるか確認しましょう。

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

endpoint は、AWS マネージメントコンソールの RDS の情報から確認できます。
RDS

mymasteruser, password は RDS を作成するときに指定した Master Username, Master Password です。

データ移行と wp-config.php の書き換え

AmimotoAMI上の MySQL にあるデータを RDS に移行する場合は、以下の手順で行います。

wp-cli によるデータのエクスポート

wp-cli を使用して、DBデータをエクスポートします。

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

/path/to/wordpress は WordPress がインストールされているディレクトリです。
AmimotoAMIでは、通常 /var/www/vhosts/{instance_id} になっています。

mysql コマンドによる RDS へのインポート

wp-cli でエクスポートしたファイルを mysql コマンドで 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 : Configure Advanced Settings で設定した Database Name
  • RDS_USER_NAME_HERE : Specify DB Details で設定した Master Username
  • RDS_PASSWORD_HERE : Specify DB Details で設定した Master Password
  • RDS_ENDPOINT_HERE : RDS の endpoint

これで wp-config.php の設定変更が完了しましたので、実際に WordPress から接続できるか確認しましょう。

AmimotoAMIでの MySQL プロセスの停止

MySQL を RDS に移動させたので、AmimotoAMI上で MySQL プロセスを動作させておく必要がなくなりました。
以下の手順で MySQL サーバの停止と自動起動をオフにすることが可能ですので、必要に応じて作業してください。

構成ファイルを書き換える

AmimotoAMIでは、ミドルウェアの設定に chef-solo を利用しており、その設定は /opt/local/amimoto.json に記述されています。
MySQL を起動しないように設定するには、このファイルを以下のように書き換えてください。

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

HHVM 版Amimotoの場合には、以下のように書き換えます。

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

その後、以下のコマンドを実行します。

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

これでAmimotoAMI 上で MySQL プロセスが動作しなくなりました。