Amazon RDSリザーブドインスタンスで「1年/3年」「前払いなし/一部前払い/全前払い」すべての組み合わせが対応しているわけではない
コンバンハ、千葉(幸)です。
Amazon RDS DBインスタンスのランニングコストを抑える方法として、Database Savings Plans(DB SP)とAmazon RDSリザーブドインスタンス(RDS RI)があります。どちらも一定期間の利用をコミットする代わりに割引を受ける仕組みです。
両者の「コミット期間」「支払い方式」を整理すると下記のようになります。
| 期間 | 支払い方式 | DB SP | RDS RI |
|---|---|---|---|
| 1年間 | 前払いなし | ⚫︎ | ⚫︎ |
| 一部前払い | ー | ⚫︎ | |
| 全て前払い | ー | ⚫︎ | |
| 3年間 | 前払いなし | ー | ⚫︎ |
| 一部前払い | ー | ⚫︎ | |
| 全て前払い | ー | ⚫︎ |
DB SPで対応しているのは1年前払いなしのみである一方で、RDS RIでは6種類の購入方式に対応しています。
とはいえ、RDS RIであればいかなる場合でも6種類の方式が選択できる、というわけでもありません。DBインスタンスクラスなどの条件によっては購入可能な方式が限定される場合があります。
今回はRDS RIに焦点を当て、「リージョン」と「DBエンジン」の組み合わせごとの購入可能方式の確認の仕方、異なる組み合わせにおける差異の確認結果をご紹介します。
先にまとめ
- DB SPで可能な購入方式は「1年前払いなし」のみ
- RDS RIでは「3年前払いなし」での購入はほとんど不可(ごく一部で可能)
- 同一リージョン、同一DBエンジン内で下記観点による購入可能方式の差異は概ね無い(一部ではある)
- Multi-AZかどうかによる違い
- 同一DBインスタンスクラス内でのサイズによる違い
- 2026年8月現在、第7世代、第8世代のDBインスタンスクラスでは下記の傾向が多い(全てではない)
db.m7i/db.m8g/db.r7i/db.r8g:3年間を指定した購入が不可db.m7g/db.r7g:3年一部前払い/全前払いを指定した購入が可能
2行目以降の歯切れの悪い感じが、RDS RIの複雑さを感じさせますね。
DBインスタンスクラスに関する用語について
本ブログでは、以下の使い分けに則り用語を用います。

https://dev.classmethod.jp/articles/rds-dont-have-db-instance-family/ より
db.r6g.2xlargeを例にとると、各用語が指すのは下記部分です。
- DBインスタンスクラス:
db.r6g.2xlarge - DBインスタンスクラスタイプ:
db.r6g - サイズ:
2xlarge
EC2のインスタンスタイプとちょっと用語が異なるので、混乱しやすい部分だと思います。思わず「DBインスタンスファミリー」などと言いたくなりますが、正式にはそういった用語はありません。
検証環境
このブログに載せているコマンドは下記の環境で実行しています。他の環境ではうまく動作しない場合があります。
- macOS
- Zshバージョン:
zsh 5.9 (arm64-apple-darwin25.0) - AWS CLIバージョン:
aws-cli/2.36.19 Python/3.14.6 Darwin/25.5.0 exe/arm64 - Jqバージョン:
jq-1.6
特定リージョン、特定DBエンジンのRDS RIオファー一覧を取得する
どのようなRDS RIの購入の仕方ができるか?その詳細は、オファー情報として下記AWS CLIコマンドで取得できます。
下記のようなフォーマットで情報が返ってきます。
{
"ReservedDBInstancesOfferings": [
{
"CurrencyCode": "USD",
"UsagePrice": 0.0,
"ProductDescription": "oracle-se2(li)",
"ReservedDBInstancesOfferingId": "005bdee3-9ef4-4182-aa0c-58ef7cb6c2f8",
"MultiAZ": true,
"DBInstanceClass": "db.m4.xlarge",
"OfferingType": "Partial Upfront",
"RecurringCharges": [
{
"RecurringChargeAmount": 0.594,
"RecurringChargeFrequency": "Hourly"
}
],
"FixedPrice": 4089.0,
"Duration": 31536000
},
...some output truncated...
}
特にフィルタリングをしないと膨大な量が出力されることになるため、リージョン/DBエンジンを限定して出力するのが良いでしょう。
今回は下記の形で環境変数に対象を設定します。
REGION=ap-northeast-1
ENGINE=mysql
DBエンジンのタイプは、例えば下記コマンドの結果から確認できます。
% aws rds describe-reserved-db-instances-offerings \
--region ap-northeast-1 \
--output json \
| jq -r '[.ReservedDBInstancesOfferings[].ProductDescription] | unique[]'
2026/08/28時点、東京リージョンでの実行結果は下記です。
aurora-mysql
aurora-postgresql
custom-sqlserver-ee(byol)
custom-sqlserver-ee(li)
custom-sqlserver-se(byol)
custom-sqlserver-se(li)
custom-sqlserver-web(li)
db2-ae(byol)
db2-ae(mpl)
db2-se(byol)
db2-se(mpl)
mariadb
mysql
oracle-ee(byol)
oracle-se2 (byol)
oracle-se2(li)
postgresql
sqlserver-ee(li)
sqlserver-ex(li)
sqlserver-se(li)
sqlserver-web(li)
東京リージョンのMySQLを指定して結果を取得するコマンド例が下記です。冒頭の変数の宣言も含めて載せています。
REGION=ap-northeast-1
ENGINE=mysql
TS=$(date +%Y%m%d_%H%M%S)
aws rds describe-reserved-db-instances-offerings \
--product-description "$ENGINE" \
--region "$REGION" \
--output json \
| jq -r '
["1yr_NoUpfront","1yr_PartialUpfront","1yr_AllUpfront","3yr_NoUpfront","3yr_PartialUpfront","3yr_AllUpfront"] as $cols
| [
.ReservedDBInstancesOfferings[]
| . as $o
| ($o.Duration/3600) as $hours
| (($o.RecurringCharges // []) | map(select(.RecurringChargeFrequency=="Hourly") | .RecurringChargeAmount) | add // 0) as $rec
| (((($o.FixedPrice/$hours) + $rec) * 10000) | round / 10000) as $eff
| {
class: $o.DBInstanceClass,
az: (if $o.MultiAZ then "Multi-AZ" else "Single-AZ" end),
col: ((if $o.Duration==31536000 then "1yr" else "3yr" end) + "_" + ($o.OfferingType | gsub(" ";""))),
val: $eff
}
]
| group_by([.class, .az])
| map({
class: .[0].class,
az: .[0].az,
cols: (map({key: .col, value: .val}) | from_entries)
})
| sort_by(.class, .az)
| ( [["DBInstanceClass","MultiAZ"] + $cols]
+ map(. as $row | [$row.class, $row.az] + ($cols | map($row.cols[.] // "-"))) )[]
| @csv
' > rds_ri_${ENGINE}_${REGION}_effective_hourly_usd_${TS}.csv
echo "rds_ri_${ENGINE}_${REGION}_effective_hourly_usd_${TS}.csv"
処理の概要は下記のとおりです。
- リージョン/DBエンジン名/タイムスタンプを変数に設定し、
describe-reserved-db-instances-offeringsでRIオファリング一覧をJSON形式で取得する - インスタンスクラスとAZ種別(Single-AZ/Multi-AZ)の組み合わせでオファリングをグループ化する
- グループの中身を6種の購入方式をキーにしたオブジェクトに変換し、インスタンスクラス/AZの順に並べ替える
- ヘッダー行と各データ行を組み立ててCSV形式の文字列に変換する
- タイムスタンプ付きのファイル名でCSVファイルとして保存し、そのファイル名を画面に表示する
FixedPrice(前払い金額)を契約期間の総時間で割って時間換算し、時間従量分のRecurringChargesを加算することで、「1時間あたりの実質コスト」を算出しています。
出力されたCSVのイメージはこんな感じ。

せっかくなので全量を貼っておきます……と言いたいところですが、結果が405行、文字にして27,000弱あったためやめておきます。
もっと簡易版の対応表を作れないか?
リージョン、DBエンジンを限定しても数百行の結果にのぼることがあります。全体の傾向を見るためにもう少し簡易版が欲しくなります。
下記の観点で差異が無ければ、ギュッとした表が作れそうです。
- Multi-AZかどうかで購入方式に差が無いか
- 同一DBインスタンスクラスタイプ内で、サイズによって購入方式に差が無いか
下記関数を定義し、引数にCSVファイルを指定して実行することで確認してみます。
check_diff() {
local SRC="$1"
tail -n +2 "$SRC" | awk -F, '
{
cls=$1; az=$2
gsub(/"/,"",cls); gsub(/"/,"",az)
split(cls,p,".")
classtype=p[1]"."p[2]
bits=""
for(i=3;i<=NF;i++){ v=$i; gsub(/"/,"",v); bits = bits (v=="-" ? "0" : "1") }
if (az=="Single-AZ") single[cls]=bits
else multi[cls]=bits
classlist[cls]=1
if (!(classtype in ctPattern)) { ctPattern[classtype]=bits; ctRef[classtype]=cls }
else if (ctPattern[classtype]!=bits) { ctDiffFlag[classtype]=1; ctDiff[classtype]=ctDiff[classtype]" "cls"("az")="bits }
}
END {
print "=== AZ構成による差異 ==="
az_diff_found=0
for (c in classlist) {
if ((c in single) && (c in multi) && single[c]!=multi[c]) {
print c"\tSingle="single[c]"\tMulti="multi[c]
az_diff_found=1
}
}
if (!az_diff_found) print "なし"
print "=== DBインスタンスクラスタイプ内差異 ==="
ct_diff_found=0
for (t in ctDiffFlag) {
print t": "ctRef[t]"="ctPattern[t]" と異なる ->"ctDiff[t]
ct_diff_found=1
}
if (!ct_diff_found) print "なし"
}
'
}
- CSVの各行をDBインスタンスクラス(
db.m5.largeなど)とAZ構成(Single-AZ/Multi-AZ)で処理し、6つの購入方式列を-なら0/値があれば1とした6桁のビット文字列に変換する - 同じDBインスタンスクラスのSingle-AZとMulti-AZのビット文字列を比較する
- DBインスタンスクラスタイプ(
db.m5など)ごとに最初に出たビット文字列を基準にし、以降で違うものが出たら差異として記録する - 全行読み終えたら、AZ構成による差異とDBインスタンスクラスタイプ内差異をそれぞれ出力する
- どちらも差異がなければ「なし」と出力する
差異が無い場合の実行イメージは下記の通り。
% check_diff rds_ri_mysql_ap-northeast-1_effective_hourly_usd_20260828_135435.csv
=== AZ構成による差異 ===
なし
=== DBインスタンスクラスタイプ内差異 ===
なし
差異がある場合の実行イメージは下記の通り。
% check_diff rds_ri_sqlserver-ee_li_ap-northeast-1_effective_hourly_usd_20260828_135435.csv
=== AZ構成による差異 ===
db.r5.12xlarge Single=111011 Multi=011011
db.r5.24xlarge Single=111011 Multi=011011
db.r5.8xlarge Single=111011 Multi=011011
db.r5.xlarge Single=111011 Multi=011011
db.r5.2xlarge Single=111011 Multi=011011
db.r5.16xlarge Single=111011 Multi=011011
db.r5.4xlarge Single=111011 Multi=011011
=== DBインスタンスクラスタイプ内差異 ===
r5: db.r5.12xlarge=011011 と異なる -> db.r5.12xlarge(Single-AZ)=111011 db.r5.16xlarge(Single-AZ)=111011 db.r5.24xlarge(Single-AZ)=111011 db.r5.2xlarge(Single-AZ)=111011 db.r5.4xlarge(Single-AZ)=111011 db.r5.8xlarge(Single-AZ)=111011 db.r5.xlarge(Single-AZ)=111011
各エンジンごとに、東京リージョン、大阪リージョン、バージニア北部リージョンでの差異(AZ構成/DBインスタンスクラスタイプ内の区別せず)の確認結果をまとめてみました。
○:差異なし×:差異ありN/A:エンジン非対応
| エンジン | 東京 | 大阪 | バージニア北部 |
|---|---|---|---|
| aurora-mysql | ○ | ○ | × |
| aurora-postgresql | ○ | ○ | ○ |
| custom-sqlserver-ee(byol) | ○ | N/A | ○ |
| custom-sqlserver-ee(li) | ○ | N/A | ○ |
| custom-sqlserver-se(byol) | ○ | N/A | ○ |
| custom-sqlserver-se(li) | ○ | N/A | ○ |
| custom-sqlserver-web(li) | ○ | N/A | ○ |
| db2-ae(byol) | ○ | ○ | ○ |
| db2-ae(mpl) | ○ | ○ | ○ |
| db2-se(byol) | ○ | ○ | ○ |
| db2-se(mpl) | ○ | ○ | ○ |
| mariadb | ○ | ○ | ○ |
| mysql | ○ | ○ | ○ |
| oracle-ee(byol) | ○ | ○ | ○ |
| oracle-se2(byol) | ○ | ○ | ○ |
| oracle-se2(li) | ○ | ○ | ○ |
| postgresql | ○ | ○ | ○ |
| sqlserver-ee(li) | × |
○ | × |
| sqlserver-ex(li) | ○ | ○ | ○ |
| sqlserver-se(li) | ○ | ○ | ○ |
| sqlserver-web(li) | × |
○ | × |
概ね「Multi-AZかどうか」「同一DBインスタンスクラスタイプ内のサイズ」の観点で購入方式に差異がないことがわかりました。
一点珍しいところとしては、バージニア北部のaurora-mysqlでは、db.r5の特定のサイズのみ購入可能方式に制限がかかっていました。
○:購入可能×:購入不可
| DBインスタンスクラス | 1yr No | 1yr Partial | 1yr All | 3yr No | 3yr Partial | 3yr All |
|---|---|---|---|---|---|---|
db.r5.large〜16xlarge |
○ | ○ | ○ | × |
○ | ○ |
db.r5.24xlarge |
× |
○ | × |
× |
○ | × |
一部前払いでのみ購入が可能というものです。珍しいですね。(なお、Auroraの場合、RDS RIをMulti-AZで購入するという考え方はありません。
簡易版のRDS RI購入方式対応表を作ってみる
ここまでの手順で「Multi-AZかどうか」「同一DBインスタンスクラスタイプ内のサイズ」の観点で差異があるかないかが確認できたので、差異がないものについては簡易版を作りたいです。
下記の関数を定義し、CSVを引数に実行することで簡易版の表を作ります。
make_simple() {
local SRC="$1"
local OUT="${SRC/_effective_hourly_usd_/_simple_}"
{
head -1 "$SRC" | awk -F, '{h="ClassType"; for(i=3;i<=NF;i++){v=$i; gsub(/"/,"",v); gsub(/Upfront$/,"",v); gsub(/Partial/,"Part",v); gsub(/_/,"",v); h=h","v}; print h}'
tail -n +2 "$SRC" | awk -F, '
{ cls=$1; gsub(/"/,"",cls); split(cls,p,"."); classtype=p[1]"."p[2]
if (classtype in seen) next
seen[classtype]=1
line=classtype
for(i=3;i<=NF;i++){ v=$i; gsub(/"/,"",v); line=line","(v=="-"?"×":"○") }
print line
}' | sort -t, -k1,1
} > "$OUT"
echo "$OUT"
}
- 引数のCSVパスから
_effective_hourly_usd_を_simple_に置き換えて出力ファイル名を作る - ヘッダー行の列名を短縮し(
Upfront削除/Partial→Part/アンダースコア削除)、ClassType+6つの短縮列名の新ヘッダーを作る - 各データ行の
DBInstanceClassから1・2番目のドット区切り(db.m5など)をDBインスタンスクラスタイプとして取り出し、同じタイプの2行目以降はスキップする - 残った行の6列を
-なら×/値があれば○に変換する - タイプ名で並べ替えてヘッダーと結合し、出力ファイルに保存する
実行イメージは下記の通りです。
% make_simple rds_ri_mysql_ap-northeast-1_effective_hourly_usd_20260828_135435.csv
rds_ri_mysql_ap-northeast-1_simple_20260828_135435.csv
冒頭で取得した東京リージョンMySQLの表は、ここまで簡易化できました。
○:購入可能×:購入不可
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
○ | ○ |
| db.m5d | ○ | ○ | ○ | × |
○ | ○ |
| db.m6g | ○ | ○ | ○ | × |
○ | ○ |
| db.m6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.m6i | ○ | ○ | ○ | × |
○ | ○ |
| db.m6id | ○ | ○ | ○ | × |
○ | ○ |
| db.m6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.m6in | ○ | ○ | ○ | × |
○ | ○ |
| db.m7g | ○ | ○ | ○ | × |
○ | ○ |
| db.m7i | ○ | ○ | ○ | × |
× |
× |
| db.m8g | ○ | ○ | ○ | × |
× |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r5b | ○ | ○ | ○ | × |
○ | ○ |
| db.r5d | ○ | ○ | ○ | × |
○ | ○ |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r6id | ○ | ○ | ○ | × |
○ | ○ |
| db.r6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.r6in | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
3年前払いなし(3yrNo)はすべての行で非対応(購入不可)となっています。m7i/m8g/r7i/r8gは3年間を指定した購入が不可です。これは新し目のタイプだからか?と思いつつ、m7g/r7gでは購入可能である点が印象的です。
リージョンごとに対応状況に差はあるか?
東京リージョン、大阪リージョン、バージニア北部リージョンで、エンジンごとに簡易版の表を基にして差異を比較してみました。
- 一致:簡易版の内容が一致している
- 判定不可:いずれかもしくは両方のリージョンで簡易版が作成できない
- N/A:大阪リージョンで非提供のエンジン
- {東京/バージニア}のみ:一方のリージョンでのみ対応したDBインスタンスクラスがある
- パターン差:パターンに差異がある
※DBインスタンスクラスタイプの接頭辞db.は省略
| エンジン | 東京 vs 大阪 | 東京 vs バージニア北部 |
|---|---|---|
| aurora-mysql | 一致 | 判定不可 |
| aurora-postgresql | 東京のみ: r6gd, r6id |
バージニアのみ: x2g |
| custom-sqlserver-ee/se/web(byol/li) | N/A(大阪に非提供) | 一致 |
| db2-ae/se(byol/mpl) | 東京のみ: m6idn, m6in, r6idn, r6in |
一致 |
| mariadb | 東京のみ: m6gd, m6id, m6idn, m6in, m7i, m8g, r5b, r6gd, r6id, r6idn, r6in, r7i |
バージニアのみ: x2g, x2iedn |
| mysql | 東京のみ: m6gd, m6id, m6idn, m6in, m7i, m8g, r5b, r6gd, r6id, r6idn, r6in |
バージニアのみ: x2g, x2iedn |
| oracle-ee(byol) | 東京のみ: m6id, m6in, m8i, r5b, r6id, r6in, r8i, x2idn, x2iezn, z1d |
一致 |
| oracle-se2(byol) | 東京のみ: m6id, m6in, m8i, r5b, r6id, r6in, r8i, z1d |
一致 |
| oracle-se2(li) | 東京のみ: m8i, r6i, r8i |
バージニアのみ: x2iedn |
| postgresql | 東京のみ: m6gd, m6id, m6idn, m6in, m7i, m8g, r5b, r6gd, r6id, r6idn, r6in |
バージニアのみ: x2g |
| sqlserver-ee(li) | 判定不可 | 判定不可 |
| sqlserver-ex(li) | 一致 | 一致 |
| sqlserver-se(li) | 東京のみ: r5b, x1, x2iedn, z1d / パターン差: m6i |
一致 |
| sqlserver-web(li) | 判定不可 | 判定不可 |
リージョン間で一致しているDBエンジンの方が少ないことが分かります。とはいえ、その差異のほとんどは一方のリージョンにのみ存在するDBインスタンスクラスタイプによるものです。{東京/バージニア}のみと記載している箇所でも、両リージョンで共通して存在するDBインスタンスクラスタイプでは差異は見受けられませんでした。
一点のみ、sqlserver-se(li)ではm6iで東京リージョンと大阪リージョンでパターンに差異がありました。
○:購入可能×:購入不可
| リージョン | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| 東京 | ○ | ○ | ○ | × |
× |
× |
| 大阪 | ○ | ○ | ○ | × |
○ | ○ |
大阪リージョンでは、東京リージョンでは不可な3年一部前払い/全前払いに対応しています。これまた珍しいパターンですね。
今回は3リージョンだけピックアップして比較しましたが、リージョン間での差異はそれなりにありそうなので、実際に購入を検討しているリージョンの情報を取得するのがよさそうです。
バージニア北部リージョンでのRDS RI購入対応表(簡易版)
東京リージョンに比べるとバージニア北部リージョンの方が対応しているDBインスタンスクラスタイプが多いので、主要なDBエンジンのRDS RI購入方式対応表(簡易版)を載せておきます。傾向の確認にどうぞ。
○:購入可能×:購入不可
先に結果から書くと、東京リージョンのMySQLで見た際の「m7i/m8g/r7i/r8gは3年間を指定した購入が不可、m7g/r7gは可能」はバージニア北部でも概ね同様の傾向でした。
aurora-mysql
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.r5(24xlarge以外) | ○ | ○ | ○ | × |
○ | ○ |
| db.r5(24xlarge) | × |
○ | × |
× |
○ | × |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2g | ○ | ○ | ○ | × |
○ | ○ |
aurora-postgresql
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r6id | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2g | ○ | ○ | ○ | × |
○ | ○ |
mariadb
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
○ | ○ |
| db.m5d | ○ | ○ | ○ | × |
○ | ○ |
| db.m6g | ○ | ○ | ○ | × |
○ | ○ |
| db.m6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.m6i | ○ | ○ | ○ | × |
○ | ○ |
| db.m6id | ○ | ○ | ○ | × |
○ | ○ |
| db.m6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.m6in | ○ | ○ | ○ | × |
○ | ○ |
| db.m7g | ○ | ○ | ○ | × |
○ | ○ |
| db.m7i | ○ | ○ | ○ | × |
× |
× |
| db.m8g | ○ | ○ | ○ | × |
× |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r5b | ○ | ○ | ○ | × |
○ | ○ |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r6id | ○ | ○ | ○ | × |
○ | ○ |
| db.r6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.r6in | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2iedn | ○ | ○ | ○ | × |
○ | ○ |
mysql
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
○ | ○ |
| db.m5d | ○ | ○ | ○ | × |
○ | ○ |
| db.m6g | ○ | ○ | ○ | × |
○ | ○ |
| db.m6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.m6i | ○ | ○ | ○ | × |
○ | ○ |
| db.m6id | ○ | ○ | ○ | × |
○ | ○ |
| db.m6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.m6in | ○ | ○ | ○ | × |
○ | ○ |
| db.m7g | ○ | ○ | ○ | × |
○ | ○ |
| db.m7i | ○ | ○ | ○ | × |
× |
× |
| db.m8g | ○ | ○ | ○ | × |
× |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r5b | ○ | ○ | ○ | × |
○ | ○ |
| db.r5d | ○ | ○ | ○ | × |
○ | ○ |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r6id | ○ | ○ | ○ | × |
○ | ○ |
| db.r6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.r6in | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2iedn | ○ | ○ | ○ | × |
○ | ○ |
oracle-se2(li)
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
○ | ○ |
| db.m8i | ○ | ○ | ○ | ○ | × |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r8i | ○ | ○ | ○ | ○ | × |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.x2iedn | ○ | ○ | ○ | × |
○ | ○ |
まさかのdb.m8i/db.r8iで3年前払いなしの購入が可能です。代わりに3年一部前払い/全前払いに対応していません。
postgresql
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
○ | ○ |
| db.m5d | ○ | ○ | ○ | × |
○ | ○ |
| db.m6g | ○ | ○ | ○ | × |
○ | ○ |
| db.m6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.m6i | ○ | ○ | ○ | × |
○ | ○ |
| db.m6id | ○ | ○ | ○ | × |
○ | ○ |
| db.m6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.m6in | ○ | ○ | ○ | × |
○ | ○ |
| db.m7g | ○ | ○ | ○ | × |
○ | ○ |
| db.m7i | ○ | ○ | ○ | × |
× |
× |
| db.m8g | ○ | ○ | ○ | × |
× |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r5b | ○ | ○ | ○ | × |
○ | ○ |
| db.r5d | ○ | ○ | ○ | × |
○ | ○ |
| db.r6g | ○ | ○ | ○ | × |
○ | ○ |
| db.r6gd | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.r6id | ○ | ○ | ○ | × |
○ | ○ |
| db.r6idn | ○ | ○ | ○ | × |
○ | ○ |
| db.r6in | ○ | ○ | ○ | × |
○ | ○ |
| db.r7g | ○ | ○ | ○ | × |
○ | ○ |
| db.r7i | ○ | ○ | ○ | × |
× |
× |
| db.r8g | ○ | ○ | ○ | × |
× |
× |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.t4g | ○ | ○ | ○ | × |
○ | ○ |
| db.x2g | ○ | ○ | ○ | × |
○ | ○ |
sqlserver-se(li)
| ClassType | 1yrNo | 1yrPart | 1yrAll | 3yrNo | 3yrPart | 3yrAll |
|---|---|---|---|---|---|---|
| db.m5 | ○ | ○ | ○ | × |
× |
× |
| db.m5d | ○ | ○ | ○ | × |
× |
× |
| db.m6i | ○ | ○ | ○ | × |
× |
× |
| db.r5 | ○ | ○ | ○ | × |
○ | ○ |
| db.r5b | ○ | ○ | ○ | × |
○ | ○ |
| db.r5d | ○ | ○ | ○ | × |
○ | ○ |
| db.r6i | ○ | ○ | ○ | × |
○ | ○ |
| db.t3 | ○ | ○ | ○ | × |
○ | ○ |
| db.x1 | ○ | ○ | ○ | × |
○ | ○ |
| db.x2iedn | ○ | ○ | ○ | × |
○ | ○ |
| db.z1d | ○ | ○ | ○ | × |
○ | ○ |
M系のDBインスタンスクラスで3年購入ができないのが少し珍しいです。
まとめ(再掲)
- DB SPで可能な購入方式は「1年前払いなし」のみ
- RDS RIでは「3年前払いなし」での購入はほとんど不可(ごく一部で可能)
- 同一リージョン、同一DBエンジン内で下記観点による購入可能方式の差異は概ね無い(一部ではある)
- Multi-AZかどうかによる違い
- 同一DBインスタンスクラス内でのサイズによる違い
- 2026年8月現在、第7世代、第8世代のDBインスタンスクラスでは下記の傾向が多い(全てではない)
db.m7i/db.m8g/db.r7i/db.r8g:3年間を指定した購入が不可db.m7g/db.r7g:3年一部前払い/全前払いを指定した購入が可能
終わりに
Amazon RDSリザーブドインスタンスの購入方式についていろんなパターンを確認してみました。
全て共通した買い方ができるわけではないこと、DBエンジンやリージョンごとに対応したDBインスタンスクラスタイプが異なることを学びました。
RDS RIの購入を検討している方の参考になれば幸いです。
以上、チバユキ (@batchicchi)がお送りしました。







