OCIのサービス制限値をCLIで確認する方法

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
OCIコンソールから、サービス制限値を確認するのは一般的ですが、<strong>API</strong>での確認も可能です。今回は、<strong>OCI-CLI</strong>を例にし、確認方法を紹介したいと思います。

__利用場面__
バッチ・スクリプトで、対象サービスの使用可能値をチェックし、しきい値に近づいてきたら、OCIの通知機能(Notification)と連携し、自動的に管理者に通知を出します。

__索引__
- [1. 事前準備](#1-事前準備)
  - [1-1. OCI-CLIのインストールと設定](#1-1-oci-cliのインストールと設定)
  - [1-2. IAMポリシー](#1-2-iamポリシー)
- [2. 明確なサービス制限値](#2-明確なサービス制限値)
- [3. 動的なサービス制限値](#3-動的なサービス制限値)
- [4. 制限事項](#4-制限事項)

# 1. 事前準備
## 1-1. OCI-CLIのインストールと設定
OCI-CLIのインストールと構成ファイルの作成について、[クイックスタート](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm)をご参照ください。Cloud Shellを利用する時、既にインストールと設定済なので、そのまま使えます。

## 1-2. IAMポリシー
Administratorsグループに属している場合は、制限および使用状況を表示する権限があります。そうでない場合は、次のようにIAMポリシーを作成しておいてください。

グループ名：`LimitsAndUsageViewers`

<strong>ポリシー・ステートメント</strong>
テナント・レベル：
`Allow group LimitsAndUsageViewers to read resource-availability in tenancy`
コンパートメント・レベル：
`Allow group LimitsAndUsageViewers to read resource-availability in compartment A`

# 2. 明確なサービス制限値
この例では、<strong>VCN</strong>の使用量と使用可能値を確認します。

__OCIコンソールでの確認結果__
OCIメニュー → ガバナンスと管理 → テナンシ管理 → 制限、割当ておよび使用状況

サービス：`Virtual Cloud Network`
スコープ：`ap-tokyo-1`
リソース：`Virtual Cloud Network Count`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6fa062d9-807c-1829-b050-6049550fe8d8.png)
上記の表示通り、現在の使用量は`4`で、使用可能値は`46`となっています。

__サポート対象のサービス名を確認__
OCIコンソールに表示されるサービス名は、`Virtual Cloud Network`ですが、CLIの場合は、異なりますので、まず次のコマンドでサービス名を確認します。

コマンド：`oci limits service list -c <Tenancy_OCID>`

- この例では、ルート・コンパートメントを指定しているので、Tenancy_OCIDを使う。
- 次のようにアルファベットの昇順で全サービスがリストされる。CLIの場合、サービス名は<strong>略称</strong>(`name`項目)となる。

```powershell
$ oci limits service list -c <Tenancy_OCID>
{
  "data": [
    {
      "description": "Application Dependency Management",
      "name": "adm"
    },
<中略>
    {
      "description": "Virtual Cloud Network",
      "name": "vcn"
    },
<中略>
    {
      "description": "Web Application Firewall",
      "name": "waf"
    }
  ]
}
```
ご覧の通り、`Virtual Cloud Network`に対するサービス名は、<font color=blue>vcn</font>です。

__OCI CLIでVCNの使用可能値を確認する__
コマンド例：oci limits resource-availability get -c \<Tenancy_OCID> --service-name <font color=blue>vcn</font> --limit-name <font color=blue>vcn-count</font>

```powershell
$ oci limits resource-availability get -c <Tenancy_OCID> --service-name vcn --limit-name vcn-count
{
  "data": {
    "available": 46,
    "effective-quota-value": null,
    "fractional-availability": 46.0,
    "fractional-usage": 4.0,
    "used": 4
  }
}
```
<strong>used</strong>: 4 (使用量)、 <strong>available</strong>: 46 (使用可能値)
両者の合計は、サービス制限値の`50`となります。

# 3. 動的なサービス制限値
一部のサービスのサービス制限値は、明確な数値ではなく、<strong>動的</strong>と表示されます。例えば、Standard.E4.FlexのOCPUは、その一例です。

__OCIコンソールでの確認結果__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ccef3df5-26c0-0367-4ce1-079f13cafff6.png)

__ドキュメントの解釈__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/99dcfc42-4d72-e564-991e-fdf0f2d0ca5d.png)

__OCI CLIでOCPUの使用可能値を確認__
コマンド例：
oci limits resource-availability get -c \<Tenancy_OCID> --service-name <font color=blue>compute</font> --limit-name <font color=blue>standard-e4-core-count</font> --availability-domain <font color=blue>xxxx:AP-TOKYO-1-AD-1</font>

ADの冒頭の<font color=blue>xxxx</font>は、ADに自動に付与された4桁の英字です（上記のOCIコンソールに確認できる）。

```powershell
$ oci limits resource-availability get -c <Tenancy_OCID> --service-name compute --limit-name standard-e4-core-count --availability-domain xxxx:AP-TOKYO-1-AD-1
{
  "data": {
    "available": 100,
    "effective-quota-value": null,
    "fractional-availability": 100.0,
    "fractional-usage": 0.0,
    "used": 0
  }
}
```
<strong>used</strong>: 0 (使用量)、<strong>available</strong>: 100 (使用可能値)

# 4. 制限事項
- 全てのサービス制限値をコンソール或いはOCI-CLIで確認できるわけではない（例えば、<strong>DRG</strong>）。OCI-CLIでサービス制限が取れない場合、<strong>404</strong>の応答を返す。

以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[便利なOCI CLIコマンド例](https://qiita.com/letian/items/ed30da7a4d37a56ba8bc)
[OCI-CLIについてのFAQ (よくある質問)](https://qiita.com/letian/items/890e3f285c0dff93509f)

__OCIドキュメント__
[サービス制限](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/servicelimits.htm)
[OCI CLI (limits » service » list)](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.29.1/oci_cli_docs/cmdref/limits/service/list.html)
[OCI CLI (limits » resource-availability » get)](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.27.0/oci_cli_docs/cmdref/limits/resource-availability/get.html)