RDS には DB インスタンスクラスも DB インスタンスタイプもあるけど DB インスタンスファミリーはない

db.r6g.2xlarge の「DB インスタンスタイプ」を教えて、と言われたらどの部分を答えますか?

コンバンハ、千葉(幸)です。

先日、EC2 のインスタンスファミリーはどこのことを指すのかを調べました。「C5d.xlarge」で考えた場合、Cを指すこともあればC5dを指すこともありました。

では RDS における「インスタンスファミリー」はどういった考え方なんだろう、というのが気になってきたので、今回はそれを調べます。

まとめ

イメージは以下です。

  • ドキュメントの定義に則れば、DBインスタンスクラスは以下から構成される
    • DBインスタンスタイプ(DBインスタンスクラスタイプとも)
    • サイズ
  • DB インスタンスクラスのことを指して DB インスタンスタイプと表現されることもある
  • DB インスタンスファミリーという言葉は厳密にはない
    • db.r6g.2xlarge を例にとると、
    • db.r6gを指すのは「DB インスタンスタイプ」
    • rだけを指してrクラスという表現がされることもある
    • R*インスタンスファミリーという表現がされることもある
    • R6gインスタンスファミリーという表現がされることもある
  • このあたりの表現は場合によって変わるので、あまり厳密に考えず文脈から判断しよう

ちなみに EC2 の場合の考え方は以下です。「狭義/広義」はわたしが勝手にそう呼んでいるだけです。

DB インスタンスタイプは DB インスタンスクラスの一部

個人的に、調べ直して一番意外だったところです。

AWS ドキュメントには以下の記載があります。(文中の太字化はわたしによるもの。以降も同様です。)

DB インスタンスクラスは、DB インスタンスタイプとサイズの両方で構成されます。例えば、db.m6g は AWS Graviton2 プロセッサを搭載した汎用 DB インスタンスタイプですが、db.m6g.2xlarge は db.m6g インスタンスタイプ内の DB インスタンスクラスです。

正確な定義に則ると、DB インスタンスタイプはdb.m6gといった部分のみを指すようです。上記のドキュメントは RDS のものですが、Aurora 向けのドキュメントでも同様の記述がありました。

わたしは特に気にせず EC2 の「インスタンスタイプ」と同じノリで「DB インスタンスタイプ」と呼んでしまっていたことがありました。

DB インスタンスクラスのことをインスタンスタイプって言っちゃう

本来の意味での DB インスタンスクラスを意図しながら「インスタンスタイプ」「DB インスタンスタイプ」と言ってしまうのはわたしだけではないようです。

RDS の「よくある質問」より。

DB インスタンスをどのように作成しますか?

(略)

AWS マネジメントコンソールを使用して DB インスタンスを起動するには、[RDS] をクリックし、次に [インスタンス] タブにある [DB インスタンスの起動] ボタンをクリックします。そこから、DB エンジンとバージョン、ライセンスモデル、インスタンスタイプ、ストレージタイプと量、およびプライマリユーザーの認証情報を含む DB インスタンスに対して、パラメータを指定できます。

ここで実際に選択できるのは「DBインスタンスクラス」です。

RDS_Management_Console_Instance_class

Aurora のよくある質問でも「DB インスタンスタイプ」の表現があります。

Q: Amazon Aurora DB インスタンスに関連するコンピューティングリソースはどのようにスケールしますか?

(略)

要求された変更は、指定されたメンテナンスウィンドウ中に適用されます。あるいは、[すぐに適用] フラグを使用すると、DB インスタンスタイプをすぐに変更できます。これらのオプションはいずれも、スケーリング操作が実行されている数分間の可用性に影響を与えます。保留中の他のシステム変更も適用されることにご注意ください。

サイズも含めて変更できるわけですから、ここでの DB インスタンスタイプは(厳密な意味での)DB インスタンスクラスを指しています。

そして、BlackBelt でもサイズまで含めたものを指して「DB インスタンスタイプ」という表現がされていました。

BlackBelt_DB_instance_Typehttps://pages.awscloud.com/rs/112-TZM-766/images/20180425_AWS-BlackBelt_RDS.pdf より)

特に気にせず EC2 の「インスタンスタイプ」と同じノリで「DB インスタンスタイプ」と呼んでしまってもいいかな、という気になってきました。

DB がつかない「インスタンスクラス」

単に「インスタンスクラス」という時は、より広い意味を指すようです。 *1

Amazon RDS は、3 種類のインスタンスクラス (汎用、メモリ最適化、バーストパフォーマンス) をサポートしています。

インスタンスクラスの中で、DB インスタンスタイプの中のアルファベットをとって「m クラス」「r クラス」といった表現がされるようです。

RDS_Management_Console_Instance_class

EC2 で言う(広い意味での)インスタンスファミリーに似た表現ですね。

EC2 と同じノリでインスタンスファミリーって言っちゃう

RDS でも「インスタンスファミリー」という表現はあるのか?と調べたところバッチリありました。

保有する DB インスタンスのクラスをスケールアップまたはスケールダウンした場合、予約はどうなりますか?

(略)

サイズの柔軟性を利用できる DB エンジンとライセンスモデル (MySQL、MariaDB、PostgreSQL、Amazon Aurora、Oracle の「自分のライセンス使用」) の予約は、同じデータベースエンジンとリージョンの同じインスタンスファミリー (M4、T2、R3 など) に含まれる、任意のサイズの実行中である DB インスタンスに、自動的に適用されます。また、予約はシングル AZ またはマルチ AZ 配置オプションのいずれかで実行されている DB インスタンスにも適用されます。

世代や追加機能をワイルドカード的に表してR* インスタンスファミリーという表現もあるようでした。

Q: Parallel Query はすべてのインスタンスタイプに対して利用できますか?

いいえ。現時点では、Parallel Query は R* インスタンスファミリーのインスタンスで使用できます。

ただ、「DB インスタンスファミリー」という表現はどこでも見つけることはできませんでした。AWS ドキュメント上でも定義はなかったので、「意味は通じるけど正確な言葉ではない」といった位置づけでしょうか。

DB インスタンスタイプこと DB インスタンスクラスタイプ

冒頭で「DB インスタンスタイプは DB インスタンスクラスの一部」という確認をしましたが、DB インスタンスクラスタイプ という豪勢な表現もありました。

「インスタンスクラスタイプ」とされることもあります。

サイズ柔軟なリザーブド DB インスタンスは、そのインスタンスクラスタイプでしかスケールできません。例えば、db.r5.large のリザーブド DB インスタンスは db.r5.xlarge には適用できますが、db.r6g.large には適用できません。db.r5 と db.r6g は異なるインスタンスクラスタイプであるためです。

どちらも指している内容としては DB インスタンスタイプと同じですね。

「RDS インスタンスタイプ」なんてのもあるのか

EC2 サービスにおけるインスタンスは EC2 インスタンスです。

RDS サービスにおけるインスタンスは RDS インスタンスではなく DB インスタンス(あるいは RDS DB インスタンス)です。

しかし「RDS インスタンスタイプ」という表現が製品ページで大々的になされています。

他では同様の表現は見つけられなかったので、何でここだけ……?と不思議に思ったりします。非エンジニアの方への分かりやすさを優先した……?などと勝手に妄想しています。

終わりに

RDS の DB インスタンスクラスまわりの表現を調べ直してみました。

EC2 インスタンスタイプと同様、なかなかに表現にバラつきがあることが分かりました。そういうものだと割り切って、うまいこと付き合っていきましょう。

わたしも今度「変更前の DB インスタンスタイプを教えてください」と言われたら、「…………。…………、…………………… ………… db.r6g、2xlargeです。」と答えようと思います。

以上、 チバユキ (@batchicchi) がお送りしました。

脚注

  1. と思っていたら DB インスタンスクラスのことを指して「インスタンスクラス」としている例もありました。

    リザーブド DB インスタンスを購入する際、指定する項目の 1 つはインスタンスクラス (db.r5.large など) です。


    Amazon RDS 向けリザーブド DB インスタンス - Amazon Relational Database Service
    バリエーションに事欠かないですね。