AWSのマネジメントコンソール…
AWSでは、実際に手を動かして学ぶワークショップのコンテンツも多数公開されています。
本記事は、それらのうち「アプリケーション移行ワークショップ」を実施した記録です。
このワークショップを通じて、AWSクラウドに移行する方法のうち、以下のものを学ぶことができます。
前回はAWSクラウドに移行元想定(ソース)の環境と、移行先(ターゲット)環境を準備しました。
今回は全5回のうちの第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マネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | RI-SG | |
説明 | Security Group for Replication Instance | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
ターゲットデータベースで使用するセキュリティグループを作成します。
のちほど使用する際のおおよその場所を図に示します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | DB-SG | |
説明 | Security group for the target database | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
インバウンドルールに以下のルールを追加します。
パラメータ | 値 | 備考 |
---|---|---|
タイプ | MYSQL/Aurora | |
ソース | RI-SG | 「レプリケーションインスタンス用セキュリティグループ作成」で作成したもの |
ターゲットデータベースで使用するサブネットグループを作成します。
この手順で作成するのは図の部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
名前 | 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マネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
エンジンのタイプ | MySQL | |
バージョン | MySQL 5.7.33 | |
テンプレート | 無料利用枠 | |
DBインスタンス識別子 | database-1 | |
マスターパスワード | ********** | 任意の値を設定する |
ストレージの自動スケーリングを有効にする | (チェックを外す) | |
Virtual Private Cloud(VPC) | TargetVPC | 「環境の準備」で作成したもの |
サブネットグループ | database-subnet-group | 「ターゲットデータベース用サブネットグループ作成」で作成したもの |
既存のVPCセキュリティグループ | DB-SG | 「ターゲットデータベース用セキュリティグループ作成」で作成したもの |
レプリケーションインスタンスで使用するサブネットグループを作成します。
この手順で作成するのは、図の部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
名前 | dms-subnet-group | |
説明 | Default VPC Subnet Group for DMS | |
VPC | TargetVPC | 「環境の準備」で作成したもの |
サブネットの追加 | TargetVPC-public-a TargetVPC-public-b |
レプリケーションインスタンスを作成します。
この手順で作成するのは、図の部分です。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
名前 | 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の値}}
ソースデータベースサーバで、手順のとおり権限を追加します。
$ 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マネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
エンドポイントタイプ | ソースエンドポイント | |
エンドポイント識別子 | source-endpoint | |
ソースエンジン | MySQL | |
エンドポイントデータベースへのアクセス | アクセス情報を手動で提供する | |
サーバ名 | (Source-DBServerのパブリックIPv4 DNS) | 「環境の準備」で作成したApplicationMigrationWorkshopスタックのDBServerDNSNameの値 |
ポート | 3306 | |
Secure Socket Layer(SSL)モード | なし | |
ユーザ名 | wordpress-user | |
パスワード | AWSRocksSince2006 |
「AWS Database Migration Serviceとは?」の図を参考に、この手順での作成部分を示すと以下の部分となります。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
エンドポイントタイプ | ターゲットエンドポイント | |
RDSインスタンス | database-1 | 「ターゲットデータベース作成」で作成したもの |
エンドポイント識別子 | target-endpoint | |
エンドポイントデータベースへのアクセス | アクセス情報を手動で提供する | |
パスワード | ******** | 「ターゲットデータベース作成」で設定したマスターパスワード |
エンドポイント接続属性を使用 | (チェックを入れる) | |
追加の接続属性 | parallelLoadThreads=1; initstmt=SET FOREIGN_KEY_CHECKS=0 |
「AWS Database Migration Serviceとは?」の図を参考に、この手順での作成部分を示すと以下の部分となります。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
タスク識別子 | replication-cdc | |
レプリケーションインスタンス | replication-instance | 「レプリケーションインスタンス作成」で作成したもの |
ソースデータベースエンドポイント | source-endpoint | 「ソースエンドポイント作成」で作成したもの |
ターゲットデータベースエンドポイント | target-endpoint | 「ターゲットエンドポイント作成」で作成したもの |
移行タイプ | 既存のデータを移行して、継続的な変更をレプリケートする |
「タスク設定」セクションに以下を設定します。
パラメータ | 値 |
---|---|
ターゲットテーブル作成モード | 何もしない |
検証の有効化 | (チェックを入れる) |
CloudWatchログを有効化 | (チェックを入れる) |
「テーブルマッピング」セクションに以下を設定します。
パラメータ | 値 |
---|---|
選択ルール | 「新しい選択ルールの追加」ボタンを押す |
スキーマ | スキーマの入力 |
スキーマ名 | wordpress-db |
テーブル名 | % |
アクション | 含む |
「移行タスクのスタートアップ設定」セクションに以下を設定します。
パラメータ | 値 |
---|---|
移行タスクを開始 | 作成時に自動的に行う |