スキップしてコンテンツを表示

暗号化されていない Amazon RDS for MySQL または MariaDB の DB インスタンスを最小限のダウンタイムで暗号化する方法を教えてください。

所要時間3分
0

暗号化されていない Amazon Relational Database Service (Amazon RDS) for MySQL または MariaDB の DB インスタンスから暗号されたリードレプリカを作成しようとしましたが、エラーが発生しました。

簡単な説明

Amazon RDS には、暗号化された DB インスタンスに対して次の制限があります。

  • 既存の暗号化されていない Amazon RDS DB インスタンスを変更してインスタンスを暗号化することはできません。
  • 暗号化されていないインスタンスから暗号化されたリードレプリカを作成することはできません。

既存の RDS DB インスタンスを暗号化できないため、新しい暗号化されたインスタンスを作成する必要があります。それ以外の場合、暗号化されていない Amazon RDS for MySQL インスタンスの暗号化されたリードレプリカを作成すると、次のエラーが表示されます。

"You cannot create an encrypted Read Replica from an unencrypted DB instance.(Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)"

暗号化されていない DB インスタンスを最小限のダウンタイムで暗号化するには、次の手順に従います。

  1. DB インスタンスの暗号化されていないリードレプリカから取得した暗号化されていないスナップショットを暗号化します。
  2. 暗号化されたスナップショットから新しい DB インスタンスを復元して、暗号化された新しい DB インスタンスをデプロイします。
  3. MySQL レプリケーションを使用して、ソースから暗号化された新しい DB インスタンスに対して、変更を同期します。
  4. 新しい、暗号化された DB インスタンスがソース DB インスタンスと同期していることを確認します。
  5. 接続を切り替え、トラフィックを新しい DB インスタンスにリダイレクトします。

解決策

暗号化されていないスナップショットを暗号化する

暗号化されていないリードレプリカから取得した暗号化されていないスナップショットを暗号化するには、次の手順を実行します。

  1. 暗号化されていないソース RDS DB インスタンスの一時的なリードレプリカを作成します。この例では、暗号化されていないソース DB インスタンスは SOURCE-EU で、一時的なリードレプリカは TEMP-RR です。

  2. TEMP-RR に接続してください。続いて、次のコマンドを実行して、Seconds_Behind_Master の値が 0 で安定するまでレプリカの遅延を監視します。

    mysql> SHOW SLAVE STATUS \G
    Seconds_Behind_Master: 0

    注: 値が安定していれば、TEMP-RR が SOURCE-EU と同期していることを示しています。

  3. 次のコマンドを実行して、TEMP-RR のレプリケーションプロセスを停止します。

    MySQL > call mysql.rds_stop_replication;
    +---------------------------+
    | Message                   |
    +---------------------------+
    | Slave is down or disabled |
    +---------------------------+
    
  4. TEMP-RR のRelay_Master_Log_File および Exec_Master_Log_Pos の値を、次の例に示すように書き留めておきます。

    mysql> SHOW SLAVE STATUS \G
    Relay_Master_Log_File: mysql-bin-changelog.000012
    Exec_Master_Log_Pos: 123
  5. 操作の完了までにかかる時間分、バイナリログが保持されるよう、SOURCE-EU で、binlog retention hours パラメータを設定します。次の例では、binlog retention hours (バイナリログの保持時間) は 24 時間に設定されています。

    mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
  6. TEMP-RR のスナップショットを取得します。オプションで、スナップショットの作成後に TEMP-RR を削除します。

  7. TEMP-RR のスナップショットをコピーし、[暗号化の有効化] を [はい] に設定します。

暗号化されたスナップショットから新しい DB インスタンスを復元する

コピーしたスナップショットから新しい DB インスタンスを復元し、暗号化を有効にします。この例では、暗号化された新しい DB インスタンスは NEW-RR-EN です。

SOURCE-EU セキュリティグループのインバウンドルールを変更し、NEW-RR-EN からのトラフィックを許可します。両方の DB インスタンスで同じセキュリティグループを使用する場合、SOURCE-EU と同じセキュリティグループ ID リファレンスを使用できます。

注: NEW-RR-EN から SOURCE-EU へのアウトバウンドトラフィックを許可してください。

ソースインスタンスからの変更を新しい暗号化されたインスタンスに同期する

MySQL レプリケーションを使用して、ソースからの変更を新しい暗号化された DB インスタンスに同期するには、次の手順を実行します。

  1. SOURCE-EU にログインします。
  2. 次のコマンドを実行してレプリケーションユーザーを設定し、このユーザーに必要なアクセス許可を付与します。
    mysql> create user 'repl_user'@'%' identified by 'password123';
    mysql> grant replication slave, replication client on *.* to 'repl_user'@'%';
    mysql> show grants for 'repl_user'@'%';
    注: repl_user をレプリケーションユーザー名に、password123 をパスワードに置き換えてください。
  3. 次のコマンドを実行して NEW-RR-EN に接続し、SOURCE-EU へのレプリケーション接続を確立します。
    mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );
    注: rds-endpoint を SOURCE-EU の DB インスタンスエンドポイントに置き換えます。repl_user と password123 は、それぞれ作成したユーザー名とパスワードに置き換えます。Relay_Master_Log_File と Exec_Master_Log_Pos の値を使用して、mysql.rds_set_external_master プロシージャを使用してレプリケーションを設定します。SOURCE-EU がパブリックアクセス可能で、NEW-RR-EN が private に設定されている場合は、rds-endpoint の代わりに SOURCE-EU のプライベート IP アドレスを使用します。
  4. NEW-RR-EN から次のコマンドを実行して、レプリケーションを開始します。
    mysql > CALL mysql.rds_start_replication;

暗号化されたインスタンスがソースインスタンスと同期していることを確認する

暗号化された新しい DB インスタンスがソース DB インスタンスと同期していることを確認するには、次の手順を実行します。

  1. NEW-RR-EN から次のコマンドを実行して、レプリケーションが成功し、SOURCE-EU と NEW-RR-EN 間で同期されていることを確認します。

    mysql> SHOW SLAVE STATUS \G

    ソース DB インスタンスとリードレプリカ間の接続が成功すると、出力は次のようになります。

    Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
  2. Seconds_Behind_Master が値 0 で安定したら、トラフィックを停止し、SOURCE-EU で接続を閉じます。
    注: SOURCE-EU に接続するすべてのアプリケーションサーバーとクライアントを停止し、SOURCE-EU に変更を加えないようにします。オプションで、SOURCE-EU が使用するセキュリティグループを一時的にロックできます。NEW-RR-EN とユーザーがこれらのアクションを実行するホストを除く、すべてのアプリケーションまたはクライアントからのインバウンドトラフィックを防ぐ必要があります。

接続を切り替えて、トラフィックを新しい DB インスタンスにリダイレクトする

接続を切り替えてトラフィックを新しい DB インスタンスにリダイレクトするには、次の手順を実行します。

  1. データベースリーダーユーザーとして NEW-RR-EN に接続し、次のコマンドを実行してレプリケーションを停止します。

    MySQL > call mysql.rds_stop_replication;

    注: このコマンドを実行すると、NEW-RR-EN は SOURCE-EU からのデータをレプリケートしなくなります。

  2. NEW-RR-EN をスタンドアロンサーバーに昇格するには、次のコマンドを実行して、SOURCE-EU と NEW-RR-EN の間のレプリケーション関係を停止します。

    MySQL > call mysql.rds_reset_external_master;
  3. すべてのアプリケーション、クライアント、およびデータベース接続を NEW-RR-EN に向けるには、すべての接続文字列に NEW-RR-EN DNS エンドポイントを指定します。または、SOURCE-EU の名前を変更してから、NEW-RR-EN を変更して SOURCE-EU が使用していた名前と同じ名前を使用します。

  4. NEW-RR-EN のセキュリティグループのルールによって、適切なアプリケーションとクライアントからのインバウンドトラフィックが許可されていることを確認します。

  5. SOURCE-EU を削除します。
    注: このオペレーションを本番環境に適用する前に、テストインスタンスでこのオペレーションをテストすることがベストプラクティスです。

関連情報

DB インスタンスのリードレプリカの操作

暗号化されていない Amazon RDS DB インスタンスの暗号化されたスナップショットを取得する方法を教えてください

Troubleshooting replication (レプリケーションのトラブルシューティング)(MySQL ウェブサイト)

外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ