[AWS] CloudFormationで管理しているRDS for MySQLからAurora MySQLに移行する手順
AWSのCloudFormationで管理しているRDS for MySQLのリソースがあり、それをAurora MySQLに移行する手順を記載しておく。また、それに伴い、今回はRubyのアプリの更新(データベースの接続先の切替)までを行います。
参考サイト
いつもお世話になっているクラスメソッドの記事:
AWS CloudFormationで管理しているAmazon RDS for MySQLからAmazon Aurora MySQLに移行する手順を整理した
流れとしては、
DB Cluster Parameterグループを作成する
RDS for MySQLのAuroraのリードレプリカを作成する
Auroraのリソースをインポートする
リードレプリカを昇格する
CloudFormationの更新を行う
アプリのデータベース接続を更新する
といった内容となる。
以下、CloudFormation=CFnと略する。
DB Cluster Parameterグループを作成する
文字コード関連を「utf8mb4」、タイムゾーンを「Asia/Tokyo」に設定するためのauroraのパラメータグループの作成を行う。
タイプ:DB Cluster Parameter Group
グループ名:aurora-cluster-param(自分で決める)
タイムゾーンをAsia/Tokyo
タイムゾーンをAsia/Tokyo
に変更する。
文字コード関連をutf8mb4
文字コード関連6つをutf8mb4
に変更する。
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
以上のような設定を行い、パラメータグループを作成しておく。
RDS for MySQLのAuroraのリードレプリカを作成する
RDSのスナップショットを作成し、作成後にそのスナップショットをベースに作成するといったことは必要なく、ここではRDSのAuroraリードレプリカを作成することで目的が達成できる。しかもボタン1つでOK。
Auroraリードレプリカを作成する
RDSの[アクション] > [Auroraリードレプリカの作成]を行う。各設定は要件に合わせて選択する。
そうすると既存のRDSのリードレプリカとしてAuroraが作成され、自動的にデータが同期されるようになる。便利すぎる。さっそくAuroraリードレプリカを作成する。
インスタンスを選択する:
ネットワーク&セキュリティは環境に合わせる:
データベースの設定する:
DBクラスターのパラメータグループは、最初作成したものを設定する。
暗号化は有効にする:
今回暗号の有効化はしておく。
バックアップ:
1日の保存期間としているが、要件に応じて7日などに変更するとOK。
今回は以上の内容で作成した。
データベースの一覧に戻ると「作成中」となった。
約10分後「Preparing-data-migration」、約20分後「移行中」となり
約23分後クラスターが「利用可能」となった。
約35分後すべて「利用可能」になった。
同期するデータの量にもよると思うけど、リードレプリカの作成完了までは少なくとも30分は見込んでおいた方が良さそう。
CFnスタックにインポートする
[CloudFormation]>[スタック]>[スタックアクション:スタックへのリソースのインポート]で作成したリードレプリカを現状のCFnで認識できるようにインポートする。
現状のCFnにAurora MySQLの記述を追記したテンプレートをインポートする。
CFnの更新
既存のテンプレートにAurora MySQLの記述を追記する。
※記載例:「DBSubnetGroup」「DBUser」「DBPassword」は別途定義しておく。DBInstanceClass
ものちのちは変数定義する。
....
....
DBCluster:
Type: AWS::RDS::DBCluster
DeletionPolicy: Retain
Properties:
DBClusterParameterGroupName: aurora-cluster-param
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: aurora-mysql
EngineVersion: 5.7.mysql_aurora.2.07.2
MasterUsername: !Ref DBUser
MasterUserPassword: !Ref DBPassword
DBWriterInstance:
Type: AWS::RDS::DBInstance
DeletionPolicy: Retain
Properties:
DBClusterIdentifier: !Ref DBCluster
DBInstanceClass: db.t2.small
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: aurora-mysql
DBReaderInstance:
Type: AWS::RDS::DBInstance
DeletionPolicy: Retain
Properties:
DBClusterIdentifier: !Ref DBCluster
DBInstanceClass: db.t2.small
DBSubnetGroupName: !Ref DBSubnetGroup
Engine: aurora-mysql
....
....
CFnファイルアップロード
[ファイルの選択]から選んでアップロードし、[次へ]
インポートするリソース識別
Aurora MySQLのリソース3つを入力する。