RDS Customを使ってみた（調査編）

# 1. はじめに

[RDS Custom](https://aws.amazon.com/jp/rds/custom/)は2021年10月にGAされたサービスで、従来のRDSでは許可されていなかったOSやDBMSのカスタマイズが実施できるようになりました。

AWSではこれまで、DBサーバでOSやDBMSのカスタマイズが必要な場合はEC2を使用するしかなく、マネージドサービスのメリットを享受することができませんでした。今後はRDS Customを使うことで、カスタマイズ要件に柔軟に対応しつつ、マネージドサービスの機能により運用負荷を減らせるかもしれません。

ただ、現状では構成や運用機能で制約が多く、要件に合わないケースもありそうです。本記事では、RDS Customの利用可否を検討する際の手助けになるよう、従来のRDSとRDS Customで構成する際の条件や制約の比較調査をしてみます。

[次の記事](https://qiita.com/kenichi_matsunaga/items/f7322b269e2e2c6812a6)では、実際にRDS Custom for SQL Serverを操作しながら構築や運用の観点でRDSとの比較を行いますので、こちらも参照いただければと思います。


# 2. 調査対象

RDS Customは、2022年3月上旬時点ではDBMSとしてOracleとSQL Serverを利用できます。
この2つのDBMSについて、主に環境面でRDSとRDS Customを比較し、RDS Customにどのような制約があるかをまとめます。

:::note warn
注意
本記事の内容は、2022年3月上旬時点の[RDSマニュアル](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/)に基づいています。他のAWSサービスと同様に、RDS Customでも頻繁に機能が追加・改善されると思いますので、使用を検討される場合は都度最新マニュアルを参照してください。
:::

# 3. RDS / RDS Customの比較結果

### (1) RDS for OracleとRDS Custom for Oracleの比較

| 比較項目 | RDS for Oracle | RDS Custom for Oracle |
|:-----|:-----|:--------|
| OS | ― （非公開・アクセス不可） | Oracle Linux 7 Update 6 |
| Oracle DB バージョン | 12c R1 / 12c R2 / 19c | 12c R1 / 19c <BR> * 2021年1月以降のアップデート |
| Oracle DB エディション | Standard Ed. 2 / Enterprise Ed. | Enterprise Ed. のみ |
| Oracle DB ライセンス | Enterprise Ed. : BYOL のみ <BR> Standard Ed. 2 : ライセンス込み / BYOL | BYOL のみ |
| Oracle DB メディア | AWS準備 | 利用者準備 <BR> * 利用者がOracleインストールメディア・パッチメディアをOracleサポートからダウンロードしてS3にアップロードし、AMIと組み合わせてCEV（Custom Engine Version）を作成 |
| インスタンスクラス | t3, m5, r5, r5b, x1, x1e, z1d <BR> * r5の高メモリインスタンスも利用可能 <BR> * CPUコア数・スレッド数を変更可能 <BR> * インスタンスクラスは変更可能 <BR> * SE2ではvCPU数上限あり  | m5, r5 <BR> * r5の高メモリインスタンスは利用不可 <BR> * CPUコア数・スレッド数は変更不可 <BR> * インスタンスクラスは変更不可 <BR>（スナップショット復元時に変更可能） |
| インスタンス費用 | [公式サイト](https://aws.amazon.com/jp/rds/oracle/pricing/) <BR> * リザーブドインスタンスを選択可能 | [公式サイト](https://aws.amazon.com/jp/rds/custom/pricing/)（同一インスタンスクラスのRDSの約1.2倍） <BR> * リザーブドインスタンスは選択不可 |
| ストレージ | gp2 / io1 / マグネティック、最大64TiB <BR> * オートスケール可能 <BR> * マグネティックは非推奨で最大3TiB | gp2 / io1、最大64TiB <BR> * オートスケール不可（手動での拡張は可能） |
| DB設定 | パラメータグループ・オプショングループをカスタマイズして適用可能 <BR> 文字セットも選択可能（DB作成後の変更は不可） | パラメータグループ・オプショングループは設定不可（DBの直接変更がサポートされる項目もある）<BR> 文字セットは「US7ASCII」固定で変更不可 |
| 高可用性構成 | スタンバイDB / Read ReplicaによるマルチAZ構成が可能 <BR> Read Replicaはクロスリージョン構成も可能 | スタンバイDBは構成不可 <BR> Read ReplicaによるマルチAZ構成が可能、クロスリージョン構成は不可 <BR> * Read Replicaは2つのRDS Customインスタンスの作成後、DBを直接操作してData Guardを構成（[AWS Whitepaper](https://d1.awsstatic.com/whitepapers/enabling-high-availability-with-data-guard-on-amazon-rds-custom-for-oracle.pdf)を参照） |
| その他 | ― | インスタンス作成前に下記リソースの準備が必要 <BR> ・KMSカスタマ管理型対称キー（AWSマネージド型キーは不可）<BR> ・RDS Custom用IAMロール・インスタンスプロファイル <BR> ・CloudWatch, S3などへのVPCエンドポイント（NAT Gatewayで代替可能） <BR> ・CEV |


### (2) RDS for SQL ServerとRDS Custom for SQL Serverの比較

| 比較項目 | RDS for SQL Server | RDS Custom for SQL Server |
|:-----|:-----|:--------|
| OS | ― （非公開・アクセス不可） | Windows Server 2019 |
| SQL Server バージョン | 2014 / 2016 / 2017 / 2019 | 2019 のみ |
| SQL Server エディション | Express Ed. / Web Ed. / Standard Ed. / Enterprise Ed. | Web Ed. / Standard Ed. / Enterprise Ed. |
| SQL Server ライセンス | ライセンス込み のみ | ライセンス込み のみ |
| SQL Server メディア | AWS準備 | AWS準備 |
| インスタンスクラス | t3, m5, m5d, r5, r5b, r5d, x1, x1e, z1d <BR> * CPUコア数・スレッド数は変更不可 <BR> * インスタンスクラスは変更可能 <BR> * Express Ed., Web Ed.ではvCPU数上限、インスタンスファミリ制約あり | m5, r5 <BR> * CPUコア数・スレッド数は変更不可 <BR> * インスタンスクラスは変更可能 <BR> * Web Ed.ではvCPU数上限あり |
| インスタンス費用 | [公式サイト](https://aws.amazon.com/jp/rds/oracle/pricing/) <BR> * リザーブドインスタンスを選択可能 | [公式サイト](https://aws.amazon.com/jp/rds/custom/pricing/)（同一インスタンスクラスのRDSの約1.15倍） <BR> * リザーブドインスタンスは選択不可 |
| ストレージ | gp2 / io1 / マグネティック、最大16TiB <BR> * オートスケール可能 <BR> * マグネティックは非推奨で最大1TiB | gp2 / io1、最大16TiB <BR> * オートスケール不可（手動での拡張も不可） |
| DB設定 | パラメータグループ・オプショングループをカスタマイズして適用可能 <BR> 照合順序も選択可能 | パラメータグループ・オプショングループ・照合順序は設定不可（DBの直接変更がサポートされる項目もある） |
| 高可用性構成 | スタンバイDB / Read ReplicaによるマルチAZ構成が可能 <BR> Read Replicaのクロスリージョン構成は不可 | スタンバイDB / Read ReplicaによるマルチAZ構成は不可 <BR> SQL ServerのAlways On Availability Groups (AAG)機能による高可用性構成が可能 <BR> * AAGは2つのRDS CustomインスタンスとWitnessノード(EC2)の作成後、DBを直接操作して構成（[AWS Blog](https://aws.amazon.com/jp/blogs/database/configure-high-availability-with-always-on-availability-groups-on-amazon-rds-custom-for-sql-server/)を参照） |
| その他 | ― | インスタンス作成前に下記リソースの準備が必要 <BR> ・KMSカスタマ管理型対称キー（AWSマネージド型キーは不可）<BR> ・RDS Custom用IAMロール・インスタンスプロファイル <BR> ・CloudWatch, S3などへのVPCエンドポイント（NAT Gatewayで代替可能） |


# 4. おわりに

RDS CustomとRDSについて、主に環境面での比較を行いました。現状(2022年3月上旬時点)ではまだRDS Customには制約が多いなという印象です。
個人的には以下の制約がなくなるとうれしいかなと思いました。

 - RDS Custom for OracleでStandard Ed. 2をライセンス込みで利用できない制約 <BR> ⇒ これが使えると気軽に動作検証できるんですが。
 - RDS Custom for SQL Serverで初期構築後にストレージを拡張できない制約 <BR> ⇒ はじめから最大容量を見積もって領域を確保しておくのはもったいないし、万一容量不足になったらDB移行しないといけない(？)のは大変ですよね。

「OSとDBMSをカスタマイズ可能」な「マネージドサービス」という半ば相反する要件を実現するためにどうすることもできない制約もあると思いますが、今後の機能追加・改善に期待したいです。

***

 - AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
 - その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。