アプリケーション移行ワークショップやってみた(2) – AWS DMSでのリプラットフォーム

AWSでは、実際に手を動かして学ぶワークショップのコンテンツも多数公開されています。
本記事は、それらのうち「アプリケーション移行ワークショップ」を実施した記録です。

このワークショップを通じて、AWSクラウドに移行する方法のうち、以下のものを学ぶことができます。

  • AWS Database Migration Service(AWS DMS)を使ったデータベースのリプラットフォーム
  • AWS Application Migration Service(AWS MGN)を使ったウェブサーバのリホスト
  • Amazon Elastic Container Service(Amazon ECS)で稼働するコンテナへの移行による、ウェブサーバのモダナイゼーション

前回はAWSクラウドに移行元想定(ソース)の環境と、移行先(ターゲット)環境を準備しました。
今回は全5回のうちの第2回として、AWS Database Migration Service(AWS DMS)を使ったデータベースのリプラットフォームを行います。

目次
  1. AWS Database Migration Service(AWS DMS)を使用したデータベースのリプラットフォーム
    1. レプリケーションインスタンス用セキュリティグループ作成
    2. ターゲットデータベース用セキュリティグループ作成
    3. ターゲットデータベース用サブネットグループ作成
    4. ターゲットデータベース作成
    5. レプリケーションインスタンス用サブネットグループ作成
    6. レプリケーションインスタンス作成
    7. ソースデータベースでバイナリログを有効化
    8. ソースエンドポイント作成
    9. ターゲットエンドポイント作成
    10. レプリケーション実行タスク作成
  2. まとめ

AWS Database Migration Service(AWS DMS)を使用したデータベースのリプラットフォーム

マニュアル:https://application-migration-with-aws.workshop.aws/en/database-migration.html

この章ではAWS Database Migration Service(AWS DMS)を使用して、データベースのリプラットフォームを体験します。
具体的には、移行元サーバ(「環境の準備」で作成した「Source-DBServer」)にインストールされたMySQLデータベースを、AWSのマネージドサービスであるAmazon RDS for MySQLへ移行します。

AWS公式の「AWS Database Migration Serviceとは?」の図を参考に、この章で設定する部分を示すと以下のようになります。

それぞれの要素を簡単に説明します。

要素名 作成する名前 説明
Source Database
ソースデータベース
Source-DBServer 「環境の準備」で作成した移行元(ソース)のデータベースサーバです。
AWS DMSで継続的なレプリケーションを行うため、バイナリログを有効化する設定変更を行います
Source Endpoint
ソースエンドポイント
source-endpoint 「ソースデータベース」の接続情報などを定義します。
手順の中で作成します
Replication Instance
レプリケーションインスタンス
replication-instance データの転送や、データのロード中に「ソースデータベース」に発生した変更のキャッシュを行うインスタンスです。
手順の中で作成します
Replication Task
レプリケーションタスク
replication-cdc レプリケーション処理を定義し、レプリケーションを実行します。
手順の中で作成します
Target Endpoint
ターゲットエンドポイント
target-endpoint 「ターゲットデータベース」の接続情報などを定義します。
手順の中で作成します
Target Database
ターゲットデータベース
database-1 移行先(ターゲット)のRDSインスタンスです。
手順の中で作成します

それでは作成していきます。

レプリケーションインスタンス用セキュリティグループ作成

レプリケーションインスタンスで使用するセキュリティグループを作成します。
のちほど使用する際のおおよその場所を図に示します。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「EC2 > セキュリティグループ」へ移動します
  • 「セキュリティグループを作成」ボタンをクリックします
  • 設定値のとおりセキュリティグループを作成します

設定値は以下のとおりです。

パラメータ 備考
セキュリティグループ名 RI-SG
説明 Security Group for Replication Instance
VPC TargetVPC 「環境の準備」で作成したもの

ターゲットデータベース用セキュリティグループ作成

ターゲットデータベースで使用するセキュリティグループを作成します。
のちほど使用する際のおおよその場所を図に示します。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「EC2 > セキュリティグループ」へ移動します
  • 「セキュリティグループを作成」ボタンをクリックします
  • 設定値のとおりセキュリティグループを作成します

設定値は以下のとおりです。

パラメータ 備考
セキュリティグループ名 DB-SG
説明 Security group for the target database
VPC TargetVPC 「環境の準備」で作成したもの

インバウンドルールに以下のルールを追加します。

パラメータ 備考
タイプ MYSQL/Aurora
ソース RI-SG 「レプリケーションインスタンス用セキュリティグループ作成」で作成したもの

ターゲットデータベース用サブネットグループ作成

ターゲットデータベースで使用するサブネットグループを作成します。
この手順で作成するのは図の部分です。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「RDS > サブネットグループ」へ移動します
  • 「DBサブネットグループを作成」ボタンをクリックします
  • 設定値のとおりDBサブネットグループを作成します

設定値は以下のとおりです。

パラメータ 備考
名前 database-subnet-group
説明 Subnets where RDS will be deployed
VPC TargetVPC 「環境の準備」で作成したもの

「サブネットを追加」セクションに以下を設定します。

パラメータ 備考
アベイラビリティゾーン us-west-2a
us-west-2b
サブネット TargetVPC-private-a-db
TargetVPC-private-b-db
「環境の準備」で作成したもの
VPC TargetVPC

ターゲットデータベース作成

ターゲットデータベースを作成します。
この手順で作成するのは図の部分です。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「RDS > データベース」へ移動します
  • 「データベースの作成」ボタンをクリックします
  • 設定値のとおりデータベースを作成します

設定値は以下のとおりです。

パラメータ 備考
エンジンのタイプ MySQL
バージョン MySQL 5.7.33
テンプレート 無料利用枠
DBインスタンス識別子 database-1
マスターパスワード ********** 任意の値を設定する
ストレージの自動スケーリングを有効にする (チェックを外す)
Virtual Private Cloud(VPC) TargetVPC 「環境の準備」で作成したもの
サブネットグループ database-subnet-group 「ターゲットデータベース用サブネットグループ作成」で作成したもの
既存のVPCセキュリティグループ DB-SG 「ターゲットデータベース用セキュリティグループ作成」で作成したもの

レプリケーションインスタンス用サブネットグループ作成

レプリケーションインスタンスで使用するサブネットグループを作成します。
この手順で作成するのは、図の部分です。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「AWS DMS > サブネットグループ」へ移動します
  • 「サブネットグループの作成」ボタンをクリックします
  • 設定値のとおりサブネットグループを作成します

設定値は以下のとおりです。

パラメータ 備考
名前 dms-subnet-group
説明 Default VPC Subnet Group for DMS
VPC TargetVPC 「環境の準備」で作成したもの
サブネットの追加 TargetVPC-public-a
TargetVPC-public-b

レプリケーションインスタンス作成

レプリケーションインスタンスを作成します。
この手順で作成するのは、図の部分です。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「AWS DMS > レプリケーションインスタンス」へ移動します
  • 「レプリケーションインスタンス作成」ボタンをクリックします
  • 設定値のとおりレプリケーションインスタンスを作成します

設定値は以下のとおりです。

パラメータ 備考
名前 replication-instance
説明 DMS replication instance
VPC TargetVPC 「環境の準備」で作成したもの
マルチAZ 開発またはテストワークロード(シングルAZ)

「セキュリティとネットワークの詳細設定」セクションに以下を設定します。

パラメータ 備考
レプリケーションサブネットグループ dms-subnet-group 「レプリケーションインスタンス用サブネットグループ作成」で作成したもの
アベイラビリティゾーン us-west-2a
VPCセキュリティグループ RI-SG 「レプリケーションインスタンス用セキュリティグループ作成」で作成したもの

ソースデータベースでバイナリログを有効化

ソースデータベースからターゲットデータベースへの、変更の継続的なレプリケーションのため、ソースデータベースでバイナリログを有効化します。

ソースデータベースサーバへ接続

「AWS CloudFormationの出力確認」で確認した「DBServerDNSName」「DBServerUsername」「SSHKeyURL」の値を用いて、移行元(ソース)のデータベースサーバへ接続します。

クライアントPCでSSHKeyをダウンロードし、ソースデータベースサーバに接続するコマンドは以下のようなイメージです。

接続コマンドのイメージ

> Invoke-WebRequest -OutFile migration_workshop.pem {{SSHKeyURLの値}}
 
> ssh -i migration_workshop.pem -l {{DBServerUsernameの値}} {{DBServerDNSNameの値}}

wordpress-userデータベースユーザーに権限追加

ソースデータベースサーバで、手順のとおり権限を追加します。

$ sudo mysql -u root -pAWSRocksSince2006
mysql> GRANT REPLICATION CLIENT ON *.* to 'wordpress-user';
mysql> GRANT REPLICATION SLAVE ON *.* to 'wordpress-user';
mysql> GRANT SUPER ON *.* to 'wordpress-user';
mysql> exit

バイナリログ用ディレクトリ作成

ソースデータベースサーバで、手順のとおりディレクトリを作成します。

$ sudo su -
# mkdir /var/lib/mysql/binlogs
# chown -R mysql:mysql /var/lib/mysql/binlogs
# exit

バイナリログ有効化

ソースデータベースサーバで、手順のとおりMySQLの設定を変更します。

$ sudo su -
# cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
# chown -R mysql:mysql /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
server_id=1
log-bin=/var/lib/mysql/binlogs/log
binlog_format=ROW
expire_logs_days=1
binlog_checksum=NONE
binlog_row_image=FULL
log_slave_updates=TRUE
performance_schema=ON
# service mysql restart
 
# exit

ソースエンドポイント作成

AWS Database Migration Serviceとは?」の図を参考に、この手順での作成部分を示すと以下の部分となります。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「AWS DMS > エンドポイント」へ移動します
  • 「エンドポイントの作成」ボタンをクリックします
  • 設定値のとおりソースエンドポイントを作成します

設定値は以下のとおりです。

パラメータ 備考
エンドポイントタイプ ソースエンドポイント
エンドポイント識別子 source-endpoint
ソースエンジン MySQL
エンドポイントデータベースへのアクセス アクセス情報を手動で提供する
サーバ名 (Source-DBServerのパブリックIPv4 DNS) 「環境の準備」で作成したApplicationMigrationWorkshopスタックのDBServerDNSNameの値
ポート 3306
Secure Socket Layer(SSL)モード なし
ユーザ名 wordpress-user
パスワード AWSRocksSince2006

ターゲットエンドポイント作成

AWS Database Migration Serviceとは?」の図を参考に、この手順での作成部分を示すと以下の部分となります。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「AWS DMS > エンドポイント」へ移動します
  • 「エンドポイントの作成」ボタンをクリックします
  • 設定値のとおりターゲットエンドポイントを作成します

設定値は以下のとおりです。

パラメータ 備考
エンドポイントタイプ ターゲットエンドポイント
RDSインスタンス database-1 「ターゲットデータベース作成」で作成したもの
エンドポイント識別子 target-endpoint
エンドポイントデータベースへのアクセス アクセス情報を手動で提供する
パスワード ******** 「ターゲットデータベース作成」で設定したマスターパスワード
エンドポイント接続属性を使用 (チェックを入れる)
追加の接続属性 parallelLoadThreads=1; initstmt=SET FOREIGN_KEY_CHECKS=0

レプリケーション実行タスク作成

AWS Database Migration Serviceとは?」の図を参考に、この手順での作成部分を示すと以下の部分となります。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「AWS DMS > データベース移行タスク」へ移動します
  • 「タスクの作成」ボタンをクリックします
  • 設定値のとおりレプリケーションタスクを作成します

設定値は以下のとおりです。

パラメータ 備考
タスク識別子 replication-cdc
レプリケーションインスタンス replication-instance 「レプリケーションインスタンス作成」で作成したもの
ソースデータベースエンドポイント source-endpoint 「ソースエンドポイント作成」で作成したもの
ターゲットデータベースエンドポイント target-endpoint 「ターゲットエンドポイント作成」で作成したもの
移行タイプ 既存のデータを移行して、継続的な変更をレプリケートする

「タスク設定」セクションに以下を設定します。

パラメータ
ターゲットテーブル作成モード 何もしない
検証の有効化 (チェックを入れる)
CloudWatchログを有効化 (チェックを入れる)

「テーブルマッピング」セクションに以下を設定します。

パラメータ
選択ルール 「新しい選択ルールの追加」ボタンを押す
スキーマ スキーマの入力
スキーマ名 wordpress-db
テーブル名 %
アクション 含む

「移行タスクのスタートアップ設定」セクションに以下を設定します。

パラメータ
移行タスクを開始 作成時に自動的に行う

まとめ

  • ターゲットデータベースと AWS Database Migration Service の各要素を作成し、レプリケーションが開始されました
  • 移行先(ターゲット)環境は以下のようになっています
  • 次回は、AWS Application Migration Service(AWS MGN)を用いて、ソース環境のウェブサーバをターゲット環境へ移行します