Aurora Global Databaseをセカンダリークラスターにインスタンスを立てずに作成してみた

CLIを利用して、Aurora Global Databaseをセカンダリークラスターにインスタンスを立てずに作成してみました
2020.07.21

こんにちは、崔です。

Aurora Global Database は、データベースのパフォーマンスへの影響を最小限に留めながら、高速に複数のリージョンへのDR環境を構築可能なAuroraのレプリケーション機能です。

Aurora 独自のストレージ機能を利用して、RPO(目標復旧地点)を5秒未満に、RTO(目標復旧時間)を1分以内におさえた環境を準備できます。

Aurora Global Database のイメージは次のとおりです。

また、Aurora Global Database は、最大5つのセカンダリーリージョン、セカンダリーリージョンに最大16のレプリカインスタンスを持つことができます。

Aurora Global Database をマネジメントコンソールから作成する場合は、セカンダリークラスターとその配下のインスタンスを同時に作成する必要があります。
一方、AWS CLIから作成する場合は、それぞれ別々に作成できるので、やってみました。

グローバルデータベースを作成する

プライマリークラスターが作成されている環境で試してみます。 まずは、グローバルデータベースを作成します。

aws rds create-global-cluster \
    --global-cluster-identifier global-database \
    --source-db-cluster-identifier arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:cluster:primary-cluster

これで、グローバルデータベースが作成され、作成済みのプライマリークラスターとインスタンスがグローバルデータベースに追加されました。

セカンダリークラスターを作成する

次に、セカンダリークラスターを作成、アタッチします。
ソウルリージョン(ap-northeast-2)で試してみます。

aws rds --region ap-northeast-2 \
  create-db-cluster \
    --db-cluster-identifier secondary-cluster \
    --global-cluster-identifier global-database \
    --engine aurora-mysql \
    --engine-version 5.7.mysql_aurora.2.08.1 \
    --db-subnet-group-name db-subnet \
    --vpc-security-group-ids sg-xxxxxxxxxxxxxxxx

グローバルデータベース配下に、セカンダリークラスタが作成されました。
現在の構成は、このような形です。

まだ、セカンダリークラスターにインスタンスを作成していない状態です。

プライマリークラスターにデータを投入する

これで、プライマリークラスターのインスタンスへの変更が、セカンダリークラスターに反映されるか確認してみます。
テーブルを作成し、データをinsertしてみます。
まずは、プライマリークラスターに新規テーブルを作成します。

CREATE TABLE test (
    id INT(11) AUTO_INCREMENT NOT NULL, 
    name VARCHAR(30) NOT NULL ,
    PRIMARY KEY (id));

次に、データをinsertします。

insert into sampledb.test (name) values ('SCOTT');

テーブルの中身を確認します。

select * from sampledb.test;
id | name 
-- | ----
 1 | SCOTT

これで、プライマリークラスターのインスタンスにテーブルが作成され、データもinsertされています。

セカンダリークラスターにインスタンスを追加する

次に、セカンダリークラスターにインスタンスを追加します。

aws rds --region ap-northeast-2 \
  create-db-instance \
    --db-instance-class db.r5.large \
    --db-cluster-identifier secondary-cluster \
    --db-instance-identifier secondary-instance-1 \
    --engine aurora-mysql

セカンダリークラスターにインスタンスを作成しました。この状態です。

セカンダリークラスターのインスタンスから確認する

セカンダリークラスターのインスタンスに接続して、先程のテーブルを確認してみます。
テーブルを検索します。

select * from sampledb.test;
id | name 
-- | ----
 1 | SCOTT

データが反映されていることが確認できました。

まとめ

マネジメントコンソールでは、セカンダリークラスター作成時にインスタンスも同時に作成する必要がありますが、 CLIを利用すれば、Aurora Global Database のセカンダリークラスターの追加が、配下にインスタンスを立てずに可能となります。

これにより、必要なときにセカンダリーインスタンスを立ち上げることが可能です。
つまり、RTO(目標復旧時間)がシビアに求められない環境や、2つ目以降のセカンダリークラスターの場合は、インスタンスの利用料金をセーブしつつ、DRサイトを構築することが可能になります。

参考