最近、EC2に「正規化係数」というものがあると知りました。
きっかけは、RI(リザーブドインスタンス)の購入を調べていたときです。 m5.large を何台買えばいいか考えながらドキュメントを読んでいたら、Normalization Factor という見慣れない言葉が出てきました。調べてみると、RIの割引は台数ではなく、インスタンスのサイズごとに決まった「ポイント」で数えているんですね。
知らずに買っていたら、請求を見て「あれ、割引が思った台に乗ってない」と首をかしげていたと思います。せっかくなので、分かったことを短くまとめておきます。
RIは「サーバー」じゃなくて「割引枠」
最初に勘違いしていたのがここです。RIは特定のサーバーを予約する契約ではありません。すでに動いているオンデマンドインスタンスに、AWSが自動で当ててくれる割引枠です。
なので「どの台に割引を付けるか」は自分では選べません。AWSがルールに沿って割り振ります。そのルールの中心にあるのが正規化係数です。
サイズごとにポイントが決まっている
正規化係数は、すごく雑に言うと「サイズごとのポイント」です。 small を1として、サイズが1段上がるごとに倍になります。
| サイズ | 正規化係数 |
|---|---|
| nano | 0.25 |
| micro | 0.5 |
| small | 1 |
| medium | 2 |
| large | 4 |
| xlarge | 8 |
| 2xlarge | 16 |
| 4xlarge | 32 |
| 8xlarge | 64 |
| 16xlarge | 128 |
ポイントはサイズの名前だけで決まるので、 m5.large でも c5.large でも4です。vCPUの数とも関係ありません。 t3.nano はvCPUが2つありますが、ポイントは0.25です。
倍々にならないサイズもあります。 3xlarge は24、 6xlarge は48、 12xlarge は96といった具合です。大きいサイズを買うときは、ユーザーガイドの表を一度見ておくと安心です。
metal だけはちょっと特殊で、同じファミリーの対応するサイズと同じポイントになります。たとえば i3.metal は i3.16xlarge と同じ128です。
買った枠は「ポイント × 台数」
RIを買うと、1時間あたり「ポイント × 台数」の枠が手に入ります。 m5.xlarge を1台分買えば、枠は8ポイントです。
この8ポイントは、同じ m5 ファミリーならサイズをまたいで使えます。
m5.large 2台なら4+4でぴったり使い切ります。 m5.xlarge 1台でも同じです。 m5.2xlarge は16ポイント必要なので、半分だけ割引になって、残りはオンデマンド料金になります。
ただ、ポイントが使えるのは同じファミリーの中だけです。 m5 の枠は m6i や c5 には使えません。
このサイズ融通が効くのは、リージョン指定で、プラットフォームが Linux/UNIX、テナンシーがデフォルトのRIです。Amazon Linux や Ubuntu ならここに入ります。リージョンの中ならどのアベイラビリティゾーン(AZ)で動いていても大丈夫です。
小さいインスタンスから先に使われる
個人的に、ここが一番ハマりそうだと思ったポイントです。
複数のサイズが同時に動いていると、割引はポイントの小さいインスタンスから順に当たります。
たとえば m5.2xlarge のRIを1つ持っていて、枠が16ポイントあるとします。そこに m5.large 2台と m5.xlarge 2台が動いていたらどうなるか。
まず large 2台で8ポイントを使います。残りの8ポイントで xlarge が1台分カバーされて、もう1台の xlarge はオンデマンドのままです。xlarge のために買ったつもりでも、小さい台が先に枠を持っていってしまうんですね。
Organizations で一括請求している場合は、RIを買ったアカウントの利用に先に当たって、余った分がほかのアカウントに回ります。
サイズ融通が効かないケースもある
ポイントの考え方が使えないRIもあります。AZ指定で買ったRI、Dedicated テナンシー、Windows、RHEL、SUSE などは、買ったサイズにしか割引が当たりません。
インスタンスファミリーでも例外があって、G4dn、G5、G6、P5、Inf2 など、GPU系を中心にサイズ融通の対象外になっています。この一覧はときどき増えるので、GPUインスタンスのRIは動かすサイズそのもので買うのが無難です。
買ったあとにRIのサイズを変えるときも、ポイントで帳尻を合わせます。 t3.small(1ポイント)を4台分持っていれば、合計4ポイントなので t3.large(4ポイント)1台分にまとめられます。変更できるのは同じファミリー、同じ世代の中だけで、 t3 から t4g のような乗り換えはコンバーティブルRIの交換が必要です。
請求で確かめるなら
実際にどう当たったかは、Cost and Usage Report の lineItem/NormalizationFactor と lineItem/NormalizedUsageAmount で確認できます。
ちなみに EC2 Instance Savings Plans だと、同じファミリー内のサイズ差はプラン側で吸収してくれます。ポイント計算を意識しないといけないのは、RIをサイズ違いで使うときです。
正規化係数を知ってから、RIの購入画面の見え方がだいぶ変わりました。台数ではなくポイントで数えてみると、手元の構成にどれだけ割引が乗るかが見えてきます。
参考にしたのは EC2 ユーザーガイドの How Reserved Instance discounts are applied です。対象外のファミリーもここで更新されます。
