RDSってなんでAZ(Availability Zone)を指定する項目がふたつあるの?

RDSにはAvailability Zone(AZ)に関する設定項目がふたつあります。サブネットグループとアベイラビリティーゾーンです。ふたつの設定項目がそれぞれどういう役割を持っているのか調べました。
2019.04.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、大阪オフィスのかずえです。 先日RDSについてひとつ学んだので、レポートします。

RDSにはAvailability Zoneを指定する項目がふたつある

RDSコンソールをさわっていると、RDSにはAvailability Zone(以下AZ)関連の設定項目がふたつあることに気づきました。

RDSのコンソール画面キャプチャ

項目1 サブネットグループ

サブネットグループは、RDSインスタンスが配置されうるVPCサブネット群をグループ化したものです。
サブネットグループにはふたつ以上のサブネットが登録必須であり、かつそのサブネットたちは最低ふたつのAZにまたがっている必要があります。
※Single-AZ構成の場合でもこの「最低ふたつのAZにまたがっている必要がある」は必須です。

RDSユーザーガイド DB サブネットグループの使用

各サブネットは特定のAZひとつと紐づいています。ですので、サブネットグループを指定するとRDSが配置されうるAZが絞られることになります。

項目2 アベイラビリティーゾーン

名前の通りRDSインスタンスの配置されるAZを指定する項目です。 前述のサブネットグループ項目の選択内容に準じたAZ群内のAZのいずれかか、「指定なし」を選択します。

筆者の予測

「サブネットグループ」でRDSインスタンスが配置されうるAZが決まるので、「アベイラビリティーゾーン」はそのAZ群の中からインスタンス作成直後の初期状態でインスタンスが配置されるAZを決めるのかな?と考えました。
→ この予測は間違っておりました。詳細は以下をご確認ください。

項目がふたつある理由

社内の先輩方に教えていただきました。
「アベイラビリティーゾーン」はSingle-AZ構成の場合のみ設定可能な項目でした。「Single-AZ構成の場合の、RDSインスタンスの配置されるAZを指定する項目」ということですね。

Multi-AZの場合、選択はできますがサブミットしようとするとRequesting a specific availability zone is not valid for Multi-AZ instancesというエラーになります。

Requesting a specific availability zone is not valid for Multi-AZ instances

Multi-AZの場合の初期AZの指定はできる?

できません。手動でフェイルオーバーする必要があります。
フェイルオーバーの方法については以下をご確認ください。

マルチAZ構成のRDS(MySQL)を強制フェイルバックさせてみた

おまけ AWSに関する調べもののコツ

私はAWSでわからないことがあると、基本的に各サービスの公式ユーザーガイドを調べることが多いです。が、今回の件はユーザーガイドには解説がありませんでした。 ただし、APIリファレンスには解説がありました。

RDS APIリファレンス CreateDBInstance

Constraint: The AvailabilityZone parameter can't be specified if the MultiAZ parameter is set to true.

AWSについてわからないことがある場合、ユーザーガイドを漁るだけでなく、対応するAPIが何かを調べてそのリファレンスをチェックするという方法があることを学びました。

まとめ

  • RDSにはAvailability Zoneを指定する項目がふたつある
    • サブネットグループ
    • アベイラビリティーゾーン
  • Multi-AZの場合、「アベイラビリティーゾーン」は設定不可
  • Multi-AZでインスタンスが配置されるAZを指定したい場合は、手動でフェイルオーバーする
  • 調べ物はAPIリファレンスも調べてみよう

以上です。お読みいただきありがとうございました!