はじめに
OCIには容量予約という仕組みがあり、特定のComputeを事前に確保しておくことができます。
「必要なときに確実にインスタンスを起動できるよう、あらかじめリソース枠を押さえておく」ための仕組みです。
予約済みのComputeは他のユーザーに使用されることはないので、使いたいときに予約枠から確実に起動することができます。
常時起動しておくのに比べ、85%のコストで容量予約をすることができます。
環境セットアップ
OCIコンソールから容量予約をすることができますが、今回はCLIで実行します。
手元のWindows PCでのOCI CLIのセットアップ方法はこちらをご確認ください。
OCI Cloud Shellを使う場合は、コンソールの右上にある[Cloud Shell]をクリックしてください。

Cloud ShellはOCI CLIがセットアップ済みの環境のため、すぐに実行することができます。
環境ごとの固有値の取得
容量予約を作成するのに①②、容量予約を更新するのに③が必要です。
①コンパートメントIDの取得
OCIコンソールのアイデンティティとセキュリティ>アイデンティティ>コンパートメント>コンパートメントの詳細ページでOCIDをコピーしてください。
②可用性ドメイン情報の取得
OCIコンソールのコンピュート>インスタンス>インスタンスの作成画面で確認できます。xxxx:AP-TOKYO-1-AD-1のxxxx部分がテナンシごとの固有値なので控えておいてください。
③容量予約のIDの取得
既存の容量予約の内容を更新する際に使用します。容量予約を作成するときには不要です。
OCIコンソールのコンピュート>容量予約>容量予約の詳細ページでOCIDをコピーしてください。
容量予約の作成
まずはじめに、容量予約をしたいComputeのShapeを記載したJSONファイル(shape-reservation.json)を作成します。
vi shape-reservation.json
下記のように記載します。ここでは、各FDごとにVM.Standard.E4.Flex(4GB,1OCPU)を1台予約することを想定しています。
[
{
"faultDomain": "FAULT-DOMAIN-1",
"instanceShape": "VM.Standard.E4.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 1
},
{
"faultDomain": "FAULT-DOMAIN-2",
"instanceShape": "VM.Standard.E4.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 1
},
{
"faultDomain": "FAULT-DOMAIN-3",
"instanceShape": "VM.Standard.E4.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 1
}
]
容量予約を作成します。
--region ap-tokyo-1でリージョンを指定します。大阪の場合はap-osaka-1です。
--compartment-idでコンパートメントIDを指定します。
--availability-domain xxxx:AP-TOKYO-1-AD-1でADを指定します。xxxxはテナンシ固有の値です。
oci compute capacity-reservation create --region ap-tokyo-1 --compartment-id xxxxxx --availability-domain xxxx:AP-TOKYO-1-AD-1 --instance-reservation-configs file://shape-reservation.json
容量予約ができたか確認します。OCIコンソールのコンピュート>容量予約>容量構成のページで指定したコンピュートが予約できていることが確認できます。

容量予約の更新
先ほど作成した容量予約を更新します。
容量予約を更新したいComputeのShapeを記載したJSONファイル(shape-reservation-update.json)を作成します。
vi shape-reservation-update.json
下記のように記載します。ここでは、FD3のシェイプをVM.Standard.E3.Flex(4GB,1OCPU)に変更しています。変更を加えないFD1と2の情報はそのまま記載しておきます。
[
{
"faultDomain": "FAULT-DOMAIN-1",
"instanceShape": "VM.Standard.E4.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 1
},
{
"faultDomain": "FAULT-DOMAIN-2",
"instanceShape": "VM.Standard.E4.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 2
},
{
"faultDomain": "FAULT-DOMAIN-3",
"instanceShape": "VM.Standard.E3.Flex",
"instanceShapeConfig": {
"memoryInGBs": 4.0,
"ocpus": 1.0
},
"reservedCount": 1
}
]
容量予約の更新を行います。
--region ap-tokyo-1でリージョンを指定します。大阪の場合はap-osaka-1です。
--capacity-reservation-idで容量予約のIDを指定します。
oci compute capacity-reservation update --region ap-tokyo-1 --instance-reservation-configs file://shape-reservation-update.json --capacity-reservation-id xxxxxx
以下のように更新していいか聞かれるので、yと答えます。
WARNING: Updates to defined-tags and freeform-tags and instance-reservation-configs will replace any existing values. Are you sure you want to continue? [y/N]: y
容量予約が更新できたか確認します。OCIコンソールのコンピュート>容量予約>容量構成のページで指定したコンピュートが予約できていることが確認できます。

まとめ
今回は容量予約をOCIコンソールではなくCLIで実行してみました。OCIの容量予約は、必要なタイミングで確実にComputeリソースを確保したいときに非常に有効な仕組みです。
Cloud Shellやスクリプトと組み合わせることで、インフラ構成の自動化や構築精度の向上にもつながります。本番リリース前のリソース確保や、スケーラブルな構成を考える際には、容量予約の活用を検討してみてください。
参考
OCI CLI Command Reference (capacity-reservation create)
OOCI CLI Command Reference (capacity-reservation update)