OCI の Compute のサービスリミット、キャパシティにまつわる確認

本記事はOracle Cloud Infrastructure Advent Calendar 2023 シリーズ2の21日目の記事です。

地味ネタですが、地味に便利なので共有したいと思います。

# 1. はじめに
本記事では以下のリソースに関する確認ができるという Tips です。
- サービス制限の動的制限において数値制限値(数値)を確認したい
- Compute Shapeのキャパシティを確認したい

# 2. 動的制限リソースの数値を確認する

## 2-1. 前提知識
- [サービス制限](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/servicelimits.htm#top)
- [動的制限](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/servicelimits.htm#Limits__dynamic_limits)

## 2-2. 前提条件
- OCI の Administrator 権限があること
- OCI CLI がセットアップされていること(最新verを推奨、またはOCIコンソールのCloudShell)

## 2-3. Web コンソールから Standard.E5 インスタンスの動的制限を見てみる
事前に Web コンソールの Limit のメニューから Standard.E5 インスタンスの作成に必要な
- standard-e5-core-count	
- standard-e5-memory-count	

の Service Limit の値をを見てみましょう。

以下の様に Dynamic となっており、どのくらい作成できるか、具体的な数値はここからは見えません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108605/ea441e91-2afc-2003-5afa-e1a168a3698f.png)

## 2-4. 数値を確認する
Web コンソールでは Dynamic と表示されていましたが、OCI CLI で問い合わせると数値を取得することができます。

このとき `--compartment-id` には Root Compartment ID(≒Tenancy ID) を指定してください。それ以外のコンパートメントIDではエラーとなります。

``` test:standard-e5-core-count を確認
$ oci limits value list --compartment-id ocid1.tenancy.oc1..hogehoge --service-name compute --name standard-e5-core-count
{
  "data": [
    {
      "availability-domain": "hogehoge:AP-TOKYO-1-AD-1",
      "name": "standard-e5-core-count",
      "scope-type": "AD",
      "value": 694
    }
  ]
}
```


``` text:standard-e5-memory-count を確認
kazuito@cloudshell:~ (ap-tokyo-1)$ oci limits value list --compartment-id ocid1.tenancy.oc1..hogehoge --service-name compute --name standard-e5-memory-count
{
  "data": [
    {
      "availability-domain": "hogehoge:AP-TOKYO-1-AD-1",
      "name": "standard-e5-memory-count",
      "scope-type": "AD",
      "value": 10416
    }
  ]
}
```
それぞれ、value に利用できる制限値が入っています。
以上のように、ここで確認したテナントでは現状 Standard.E5 シェイプは694コア、 10416GBメモリまでリソースを利用できるということが分かりました。

# 3. Compute Shapeのキャパシティを確認したい
ここでいう「キャパシティがあるか？」≒「インスタンスを作成できるリソースが該当のAD内にあるのか？」ということになります。
こちらも現状 API のみで提供されています。今回は上記に引き続き OCI CLI で確認をしていきます。

## 3-1. VM の場合
VM.Standard.E5.Flex の最大構成である 94 OCPU、 1049 GBメモリ のキャパシティがあるか確認してみます。

まず問い合わせるコマンドに必要な availability-domain name を確認します。
```
$ oci iam availability-domain list --all | jq -r '.data[].name'
hogehoge:AP-TOKYO-1-AD-1
```

実際に問い合わせてみましょう。
```
$ oci --region ap-tokyo-1  compute compute-capacity-report create --availability-domain hogehoge:AP-TOKYO-1-AD-1 --compartment-id ocid1.compartment.oc1..hogehoge --shape-availabilities '[{"instanceShape": "VM.Standard.E5.Flex","instanceShapeConfig": {"memoryInGBs": 1049.0,"ocpus": 94.0}}]'
{
  "data": {
    "availability-domain": "hogehoge:AP-TOKYO-1-AD-1",
    "compartment-id": "ocid1.compartment.oc1..hogehoge",
    "shape-availabilities": [
      {
        "availability-status": "AVAILABLE",
        "available-count": null,
        "fault-domain": null,
        "instance-shape": "VM.Standard.E5.Flex",
        "instance-shape-config": {
          "memory-in-gbs": 1049.0,
          "nvmes": null,
          "ocpus": 94.0
        }
      }
    ],
    "time-created": "2023-12-19T06:55:32.873000+00:00"
  }
}
```

## 3-2. BM の場合

A100 GPU を8個搭載している BM.GPU4.8 を見てみましょう。

```
$ oci --region ap-singapore-1 compute compute-capacity-report create --availability-domain hogehoge:AP-SINGAPORE-1-AD-1 --compartment-id ocid1.compartment.oc1..hogehoge --shape-availabilities '[{"instanceShape": "BM.GPU4.8"}]'
{
  "data": {
    "availability-domain": "hogehoge:AP-SINGAPORE-1-AD-1",
    "compartment-id": "ocid1.compartment.oc1..hogehoge",
    "shape-availabilities": [
      {
        "availability-status": "AVAILABLE",
        "available-count": null,
        "fault-domain": null,
        "instance-shape": "BM.GPU4.8",
        "instance-shape-config": null
      }
    ],
    "time-created": "2023-12-19T07:09:58.988000+00:00"
  }
}
```

## 3-3. 表示の意味
確認をするところは `availability-status` の値になります。
キャパシティがあるり利用できるのであれば`AVAILABLE`、ない場合は`OUT_OF_HOST_CAPACITY`となります。
なおここでの`AVAILABLE`は少なくとも該当のインスタンスが少なくとも一つは作れるキャパシティがある、という風に理解いただくのが良いと思います。

## 3-4. 補足
Youtube の Oracle Learning チャネルでも公開されていましたので、動画で確認をしたい場合はこちらをご参照ください。
https://www.youtube.com/watch?v=QECKtwlONL8

# 4. 最後に
個人的には Web コンソールでは確認できないことが、API や CLI だと確認できると改めて実感しました。
今回ご紹介した内容は実際に利用をされる方にとっては知っていただくことでより安心に OCI をご利用いただけるかと思います。