[小ネタ] Amazon AuroraデータベースをAWSマネジメントコンソールから作成した際の命名ルールを確認してみた
はじめに
清水です。Amazon AuroraデータベースをAWSマネジメントコンソールから起動する場合、クラスタならびにインスタンスが同時に作成されます。Multi-AZ構成を選択しておくとライターインスタンスとリーダーインスタンスの2台のインスタンスが作成されます。この際にDB識別子の命名として指定できるのはDBクラスタ識別子のみで、インスタンスの識別子についてはマネジメントコンソールで自動で設定されるかたちです。指定したDBクラスタ識別子の末尾に文字列が追加されてインスタンスのDB識別子となりますが、データベース作成時にマルチAZとするか否か、またスナップショットからの復元でデータベースを作成した場合などで命名規則が異なります。いつも、最終的にどんなDB識別子になるかうっかり忘れてしまうため、本エントリではこの命名ルールをまとめておきたいと思います。
あらかじめ命名ルールの結論をまとめておくと以下のようになります。
- Auroraデータベースをマネジメントコンソールで1から作成する場合(
my-database
を指定)- DBクラスタの名称は、作成ダイアログで指定した識別子がそのまま利用される
- 例:
my-database
- 例:
- ライターインスタンスの名称は指定した識別子の末尾に
-instance-1
が付与される- 例:
my-database-instance-1
- 例:
- マルチAZ構成でリーダーインスタンスを一緒に作成した場合
- リーダーインスタンスの名称指定した識別子の末尾に
-instnace-1-[AZ-Name]
が付与される- 例:
my-database-instance-1-ap-northeast-1a
- 例:
- リーダーインスタンスの名称指定した識別子の末尾に
- DBクラスタの名称は、作成ダイアログで指定した識別子がそのまま利用される
- スナップショットの復元でデータベースを作成する場合(
my-database
を指定)- DBクラスタの名称は、作成ダイアログで指定した識別子の末尾に
-cluster
が付与される- 例:
my-database-cluster
- 例:
- ライターインスタンスの名称は指定した識別子がそのまま利用される
- 例:
my-database
- 例:
- DBクラスタの名称は、作成ダイアログで指定した識別子の末尾に
- リーダーインスタンスを別途追加する場合は、指定した識別子がそのままインスタンス名称となる
Auroraデータベースを作成しながら命名ルールを確認してみた
実際にAuroraデータベースをAWSマネジメントコンソールから作成しながら、命名ルールを確認していきたいと思います。
AuroraデータベースをSingle-AZで作成するパターン
まずはSingle-AZ、Auroraのレプリカ(リーダーノード)なしの1台のインスタンス構成でAuroraデータベースを作成してみます。DBエンジンはPostgreSQL(Amazon Aurora PostgreSQL互換エディション)で進めます。マネジメントコンソールの「データベースの作成」画面、DBクラスタ識別子はaurora-postgresql-singleaz
としました。マルチAZ配置は無効(Auroraレプリカを作成しない)でデータベースを作成します。
データベース作成後の状況がこちらです。クラスタ(リージョン別クラスター)は指定した通りのDBクラスタ識別子aurora-postgresql-singleaz
が付与されています。ライターインスタンス(Single-AZ構成なのでこのインスタンスのみ)はDBクラスタ識別子の末尾に-instance-1
をつけたaurora-postgresql-singleaz-instace-1
がDB識別子となっています。インスタンスのDB識別子は明示的にインスタンスとわかるような情報をつけている感じでしょうか。
AuroraデータベースをMulti-AZで作成するパターン
続いてAuroraデータベースをMulti-AZで作成するパターンです。ここでもDBエンジンはPostgreSQLを使用しました。DBクラスタ識別子をaurora-postgresql-multiaz
とし、マルチAZ配置を有効(別のAZでAuroraレプリカ/リーダーノードを作成する)にしてデータベースを作成していきます。
作成後の状況がこちらです。クラスタのDB識別子は指定したとおりaurora-postgresql-multiaz
、ライターインスタンスはaurora-postgresql-multiaz-instance-1
ですね。(ここまではSingle-AZ構成と一緒です。)リーダーインスタンスについては、DB識別子がaurora-postgresql-multiaz-instance-1-ap-northeast-1a
と、作成時に指定したaurora-postgresql-multiaz
のあとに-instance-1
、さらにインスタンスの属するAvailabilityZone名-ap-northeast-1a
が付与されたかたちとなっています。(なんとなく、-instance-2
になりそうと思うかもしれませんが、そうではありません。)
スナップショットを復元しデータベースを作成するパターン
既存のデータベースから取得したスナップショットを用いて新たにデータベースを作成するパターンも確認しておきましょう。(このパターン、これまで確認した1からデータベースを作成する場合と命名規則が少し異なります。)
aurora-postgresql-multiaz
から取得したスナップショットaurora-postgresql-multiaz-snapshot
から復元を行います。
スナップショット復元のダイアログ、DBクラスタ識別子はスナップショットの名称と関係なく入力するかたちです。今回はaurora-postgresql-from-snapshot
としました。スナップショットからの復元の場合、マルチAZ配置は選択できず、シングルAZの状態(レプリカなしの状態)で起動したあとに別途リーダーを追加する必要があります。
スナップショットの復元によるデータベース作成後の状況がこちらです。DBクラスタの識別子は指定したaurora-postgresql-from-snapshot
のあとに-cluster
が付与されたaurora-postgresql-from-snapshot-cluster
です。そしてライターインスタンスのDB識別子が指定したaurora-postgresql-from-snapshot
となり、さきほどのように-instance-1
などは付きません。スナップショット空ではなく1からからデータベースを作成する際と命名規則が変わる点に注意しましょう。
リーダーを追加する場合
データベースを作成する3パターンを確認しました。もう一つ、リーダーを追加するパターンについても確認してみましょう。リーダー追加の際は、ダイアログでDBインスタンス識別子を指定するかたちです。以下、代表としてマルチAZ構成でデータベースを作成したaurora-postgresql-multiaz
を使用してリーダーを追加する例です。DBインスタンス識別子としてaurora-postgresql-multiaz-addreader
を指定しました。
リーダー追加後は以下のように、指定したDBインスタンス識別子がそのまま利用されます。シングルAZやスナップショットから復元したAuroraデータベースへのリーダの追加についても同様、文字列が付与されることはありませんでした。これは作成されるリーダーインスタンスが1台だからなのかな、などと思いました。
クラスタ、インスタンスともにDB識別子の変更は可能
AWSマネジメントコンソールからAuroraデータベースを作成する際、作成する方法などによるDB識別子の命名ルールをまとめてみました。これら命名ルール(DB識別子)は変更が可能です。例えば、スナップショットから復元したデータベースのDB識別子が、他の1から作成したデータベースと揃っていない、などの場合には、本格的にデータベースを利用する前にDB識別子を変更しておきましょう。(実際に利用を開始してからの場合、エンドポイントやCloudWatchまわりの名称変更も絡むため、影響が大きくなるかと思います。)
DBクラスタの変更ではDBクラスタ識別子を、DBインスタンスの変更ではDBインスタンス識別子とDBクラスタ識別子をそれぞれ変更可能です。
まとめ
Amazon AuroraデータベースをAWSマネジメントコンソールから作成する場合の、クラスタならびにインスタンスのDB識別子の命名規則についてまとめてみました。Single-AZ構成ならびにMulti-AZ構成のライターインスタンスには末尾に-instance-1
が付与され、Multi-AZ構成のリーダーインスタンス(2台目)は-instance-1-[AZ-Name]
が付与されます。2台目なら-instance-2
となりそうなところがAvailabilityZone名称になっているのは、フェイルオーバーが発生することも考慮してでしょうか。(-2
をつけたインスタンスがライターとなることもありえますよね。)そしてリーダーインスタンスを追加して1つのAZに複数台のインスタンスとなる場合については更に命名について検討が必要かなと思いました。(-instance-2-[AZ-Name]
または-instance-1-[AZ-Name]-2
??)
また例えばAWS CLIなどを使用してデータベースを作成する場合は、このような制限を受けず、コマンド実行時の引数に都度DB識別子を指定するかたちです。とはいえ、突発的な作業でAWS CLIのコマンドを確認する時間がなくAWSマネジメントコンソールから作業をする、なんてこともあるかもしれません。(私はこのケースがありました。)そんなときでも場合に命名規則に驚かないようにしておきましょう。