Aurora I/O-OptimizedでのRI購入についてまとめ
はじめに
みなさんこんにちは、クラウド事業本部コンサルティング部の浅野です。
Aurora I/O-Optimizedをご存知ですか、簡単にいうとAuroraインスタンス起動料金(約30%増)、ストレージ料金(約25%増)を割増する代わりにI/Oに関わる料金を実質0にしてくれるというAuroraクラスターに適用する料金タイプです。I/O費用がDB費用内で25%以上を占める場合はこの料金タイプを選択した方が良いとされています。
しかしこのAurora I/O-Optimizedを適用する際に、同時にRIを購入しようとすると購入方法がかなり複雑になり、詳細な計算をして購入しないと最大限のコスト最適化ができません。
今回はAurora I/O-Optimized を適用したインスタンスに対しRIを購入するための計算方法をまとめます。
ここからつらつらと前提説明を述べていますが、結論を急ぎたい方は Aurora I/O-Optimized のRI購入計算式を参照してください。
RI(リザーブドインスタンス)の適用について
Aurora Standardを使用するなら基本的にオンデマンドで使用するインスタンスタイプと同じインスタンスタイプのRIを使用台数分購入すれば良いですが、
Aurora I/O-Optimizedを使用する際は Standardに加えて30%分の追加購入 をしないと最大限のコスト最適化がなされません。
ただし、以下公式ドキュメントの説明と計算表では少し分かりにくいので今回は噛み砕いて説明します。
公式ドキュメントから引用
Aurora I/O-Optimized を使用した場合の例
既存の Aurora Standard リザーブド DB インスタンスは Aurora I/O-Optimized で再利用できます。Aurora I/O-Optimized でリザーブドインスタンス割引のメリットを最大限に活用するには、現在のリザーブドインスタンスと同様、30% の追加リザーブドインスタンスを購入できます。
次の表は、Aurora I/O-Optimized を使用した場合に追加のリザーブドインスタンスを見積もる方法の例を示しています。必要なリザーブドインスタンスがごくわずかである場合、リザーブドインスタンスのサイズの柔軟性を活用して整数にすることができます。これらの例では、「現行」とは現在所有している Aurora Standard リザーブドインスタンスを指します。追加リザーブドインスタンスとは、Aurora I/O-Optimized 使用時に現在のリザーブドインスタンス割引を維持するために購入する必要がある Aurora Standard リザーブドインスタンスの数のことです。
例 RI購入見積もり表 ※公式ドキュメントから抜粋
DB インスタンスクラス | 現行の Aurora Standard リザーブドインスタンス | Aurora I/O-Optimized に必要なリザーブドインスタンス | 必要な追加のリザーブドインスタンス | サイズの柔軟性を使った、必要な追加のリザーブドインスタンス |
---|---|---|---|---|
db.r6g.large | 10 | 10 * 1.3 = 13 | 3 * db.r6g.large | 3 * db.r6g.large |
db.r6g.4xlarge | 20 | 20 * 1.3 = 26 | 6 * db.r6g.4xlarge | 6 * db.r6g.4xlarge |
db.r6g.12xlarge | 5 | 5 * 1.3 = 6.5 | 1.5 * db.r6g.12xlarge | db.r6g.12xlarge、r6g.4xlarge、r6g.2xlarge をそれぞれ 1 つ (0.5 * db.r6g.12xlarge = 1 * db.r6g.4xlarge + 1 * db.r6g.2xlarge) |
db.r6i.24xlarge | 15 | 15 * 1.3 = 19.5 | 4.5 * db.r6i.24xlarge | 4 * db.r6i.24xlarge + 1 * db.r6i.12xlarge (0.5 * db.r6i.24xlarge = 1 * db.r6i.12xlarge) |
上記計算表ですが一見どういう理論で計算されているか分かりにくいです。なので今回はこの計算表の考え方をわかりやすく説明したいと思います。
まず前提としてRDSのRI購入には「サイズ柔軟性」という考え方ができます(一部エンジンのみ対応)。 これも公式ドキュメントに載っている通りですが、同じインスタンスクラスであればサイズを変更してもRI割引の適用を柔軟に行ってくれるというものです。
公式ドキュメントを読み込むと
「db.t3.medim」×1台 のRIを購入すると「db.t3.small」×2台分のRI料金で割引が効きます。
また、
「db.t3.large」×1台を動かすと、そのうち50%分は「db.t3.medium」×1台分のRI割引が効く
とも記載してあります。
ではmedium ×1台分で small ×2台分というのはどっから来てるの?といった疑問が湧きますが、これは以下の1時間あたりの正規化された単位表の値から来ています。
以下がAuroraに関するインスタンスサイズ別正規化単位表です。※公式ドキュメントから抜粋
インスタンスサイズ | [A] 1 つの DB インスタンスの 1 時間あたりの正規化された単位 Aurora Standard | [B] 1つの DB インスタンスの 1 時間あたりの正規化された単位 Aurora I/O-Optimized |
---|---|---|
small | 1 | 1.3 |
medium | 2 | 2.6 |
large | 4 | 5.2 |
xlarge | 8 | 10.4 |
2xlarge | 16 | 20.8 |
4xlarge | 32 | 41.6 |
8xlarge | 64 | 83.2 |
12xlarge | 96 | 124.8 |
16xlarge | 128 | 166.4 |
24xlarge | 192 | 249.6 |
32xlarge | 256 | 332.8 |
Aurora Standardの場合インスタンスサイズ「small」は"1"で「medium」は"2"となっています。この数値の関係が先ほどの説明の正体です。
例えば「db.t3.medim」×1台 のRIを購入すると
「db.t3.small」×2台分のRI料金で割引が効きます。
つまり、あらかじめ購入した「正規化単位」の数値だけ1時間あたりに割引価格で使用できるインスタンスサイズの使用権利が与えられているわけです。
「db.t3.large」×1台を動かすと、そのうち50%分は「db.t3.medium」×1台分のRI割引が効く
こちらに関しても正規化単位表の「medium」である"2"分を購入した状態で「large」インスタンスを一台動かすと正規化単位表の"4"のうち"2"に関してはRI金額で計算されますよ、ということです。
めちゃくちゃわかりやすく例えると商品の金券と同じですね。特定の店舗で使える1000円分の商品券を金券ショップで900円で買い、その店舗で1000円分の商品を購入する。実質支払ったのは900円で100円の割引と同じです。
また1000円分の商品券で2000円分の商品を買った場合は、その半額は実質900円で購入したことになる。これと全く同じ理論です。
上記のようにAurora Standardの場合はこの理論で必要なRIの購入数(正確には1時間あたりの正規化単位数)を見積もれば良いのですが、I/O-Optimizedの場合はさらにこれに30%分上乗せした金額を計算しなくてはならず、少し複雑になります。
Aurora I/O-Optimized のRI購入計算式
以下の正規化単位表をみてAurora I/O-Optimizedの正規化単位からAurora Standardの正規化単位を引き、RIとして稼働予定のインスタンス台数分を掛け、算出した数値の分Aurora Standardの正規化単位で差を埋めるようにRIを追加購入すると最もコストが削減されます。
この考え方はマルチAZだろうがリードレプリカであろうが総稼働インスタンス台数分
だけ算出すれば関係なく、さらにRIの期間(1年 or 3年)、前払いの有無に関係なく全て同じ考え方で見積もれます。
上記説明だけではややこしいので計算式にすると以下のような形です。
追加で必要なRI正規化単位 = ([B] - [A]) × 稼働インスタンス台数
インスタンスサイズ | [A] 1 つの DB インスタンスの 1 時間あたりの正規化された単位 Aurora Standard | [B] 1つの DB インスタンスの 1 時間あたりの正規化された単位 Aurora I/O-Optimized |
---|---|---|
small | 1 | 1.3 |
medium | 2 | 2.6 |
large | 4 | 5.2 |
xlarge | 8 | 10.4 |
2xlarge | 16 | 20.8 |
4xlarge | 32 | 41.6 |
8xlarge | 64 | 83.2 |
12xlarge | 96 | 124.8 |
16xlarge | 128 | 166.4 |
24xlarge | 192 | 249.6 |
32xlarge | 256 | 332.8 |
見積もり方法: 上記式で出てきた数値に最も近くなるように複数の[A]を組み合わせて購入する。
例①: r5.8xlarge × 5台の場合
前提条件
- インスタンスタイプ: r5.8xlarge
- 稼働予定台数: 5台(リードレプリカ等全て含む)
- RI条件: 1年、前払いなし
計算
追加で必要な正規化単位 = (83.2 - 64) × 5 = 96
追加購入パターン
- パターン1: r5.8xlarge × 1台(64) + r5.4xlarge × 1台(32) = 96
- パターン2: r5.12xlarge × 1台(96)
最終的なRI購入構成
パターン1の場合:
r5.8xlarge × 5台 (ベース)
r5.8xlarge × 1台 (追加購入分)
r5.4xlarge × 1台 (追加購入分)
パターン2の場合:
r5.8xlarge × 5台 (ベース)
r5.12xlarge × 1台 (追加購入分)
どちらのパターンも同じ正規化単位を満たすため、RI購入料金は同じです。
料金確認
r5.8xlarge(1年、前払いなし)の1時間あたり料金:
r5.4xlarge(1年、前払いなし)の1時間あたり料金:
r5.12xlarge(1年、前払いなし)の1時間あたり料金:
上記の通り、r5.12xlarge の料金は r5.8xlarge + r5.4xlarge と同額になっていることが確認できます。
例②: r5.4xlarge × 1台の場合
前提条件
- インスタンスタイプ: r5.4xlarge
- 稼働予定台数: 1台
計算
追加で必要な正規化単位 = (41.6 - 32) × 1 = 9.6
追加購入の検討
r5インスタンスクラスは「large」からしか存在しないため、最も近い組み合わせ:
r5.xlarge × 1台 = 8正規化単位
残り1.6正規化単位はオンデマンド料金で計算されます。
最終的なRI購入構成
r5.4xlarge × 1台 (ベース)
r5.xlarge × 1台 (追加購入分)
まとめ
Aurora I/O-Optimizedインスタンスで最大限のコスト削減を実現するには、Aurora Standard のRI購入よりも複雑な計算が必要になります。
重要なポイント:
- 正規化単位の理解: RI割引は1時間あたりの「正規化単位」で按分適用される
- 30%追加購入の意味: I/O-Optimizedは正規化単位がStandardの1.3倍になるため、その差分を埋める追加RI購入が必要
- サイズ柔軟性の活用: 複数のインスタンスサイズを組み合わせることで、必要な正規化単位を効率的に満たせる
この前提を理解した上で上記計算方法を意識すると、Aurora I/O-Optimized導入時のRI購入戦略を正確に立てられ、コストの最適化が図れると思います。
今回は以上です。