OCI-CLIに関するFAQ  (よくある質問)

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

# 初めに
このブログでは、OCI-CLI に関するよくある質問（FAQ）をまとめています。OCI-CLI の基本的な使い方から、インストール方法、ネットワーク設定、便利なコマンド例の紹介まで、実用的な情報を網羅しています。OCI 環境での運用にお役に立てれば幸いです。

# FAQ 
__質問-1__: OCI-CLIは料金がかかりますか？
__回答__：OCI-CLI自体は<strong>無料</strong>です。ただし、利用しているOCIリソースには別途料金がかかります。

__質問-2__: インターネットにアクセスできない環境でOCI-CLIをインストールすることは可能ですか？
__回答__：可能です。OCI-CLIは<strong>オフライン</strong>インストールにも対応しています。詳細については、次の手順をご参照ください。
[OCI-CLIオフライン・インストールの手順](https://qiita.com/letian/items/d99506bc3c9869e26d29)

__質問-3__: OCI-CLIを利用するのに<strong>Python</strong>は必須ですか？
__回答__：必須です。オンラインインストールの場合、Pythonは自動的にインストールされます。オフラインインストールの場合、先にPythonをインストールする必要があります。

__質問-4__: OCI-CLIがサポートしているPythonバージョンについて教えてください。
__回答__：次の表に、各OSに対してCLIがサポートするPythonのバージョンを示しています:
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5444c056-4891-4c64-878f-c83cfac4a9ca.png", width="450">

[ドキュメントリンク](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm#Requirements__SupportedPythonVersionsandOperatingSystems)

:::note warn
【ご注意】Python <strong>3.13</strong>がインストール済みのWindows ServerにCLIをインストールすると、以下のエラーが発生します。
`ModuleNotFoundError: No module named 'distutils'`
:::

__質問-5__: OCI上のインスタンスからOCI-CLIを使用してオブジェクト・ストレージにファイルを転送する際、OCI内部の通信を経由させることは可能ですか？
__回答__: 可能です。サービス・ゲートウェイ(SGW)を経由すれば、OCI内部の通信でオブジェクト・ストレージにアクセスできます。

__質問-6__: 質問-4のケースを例にして、これを実現するためのNSGのセキュリティルールはどのように設定すればよいですか？
__回答__: NSGの<strong>エグレス・ルール</strong>を次のように設定してください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7bb545da-cff2-cf4d-a133-f41ed4fe4d5c.png", width="650">

__質問-7__: 主な利用ケースは、インスタンスの起動停止とオブジェクト・ストレージ関連ですが、何かコマンド・サンプルがありますか？  
__回答__：次の記事に便利なコマンド例を記載しています。ご参考にしてください。  
[便利なOCI CLIコマンド例](https://qiita.com/letian/items/ed30da7a4d37a56ba8bc)

__質問-8__: Oracle <strong>Base DB</strong>のインスタンスにもOCI-CLIを利用することができますか？
__回答__：できます。以前に作成されたDBインスタンスにはOCI-CLIがインストールされていないことがありますが、その場合は手動でインストールする必要があります。DB19c SEを例に挙げると、バージョン<strong>19.15</strong>（2022年）以降に新規作成されたDBインスタンスにはOCI-CLIが既に実装されています。ただし、構成ファイルの作成が必要です。

__質問-9__: OCI Cloud ShellでOCI-CLIを利用することができますか？
__回答__：もちろんできます。Cloud ShellにはOCI-CLIが<strong>実装済み</strong>で、インストールや構成ファイルの設定は不要で、直接利用可能です。

__質問-10__: OCI-CLIの出力結果はJSON形式のため、結果の件数が多いと見づらいことがあります。これを改善する方法はありますか？
__回答__: 引数に"<strong>--output table</strong>"を付けると、表形式で結果が表示されます。項目が多い場合は、"<strong>--query</strong>"を使用して表示内容を絞り込むことも可能です。これらの引数はグローバル引数で、すべてのCLIコマンドに適用できます。以下に、インスタンス名と状態を取得する例を示します。
```powershell
PS C:\Users\opc> oci compute instance list -c ocid1.compartment.oc1..<中略> --query 'data[].{"Name":\"display-name\", "State":\"lifecycle-state\"}' --output table
+----------------+---------+
| Name           | State   |
+----------------+---------+
| Oracle_Linux_8 | RUNNING |
| Windows2019    | STOPPED |
+----------------+---------+
PS C:\Users\opc>
```
※、"display-name" や "lifecycle-state" のようにハイフンが含まれる項目には、<strong>ダブルクォーテーション</strong>を付ける必要があります。Windowsの場合、ダブルクォーテーションを付ける際に '`\`'(円マーク) を忘れずに。

__質問-11__: 特定のユーザーにOCI-CLIを使用させたくない場合、それは可能ですか？
__回答__：可能です。管理者が「ユーザー機能の編集」を利用して、そのユーザーの<strong>APIキー</strong>の作成を<strong>無効</strong>にすることで、OCI-CLIの利用を制限できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/be088de8-a7cf-6991-6a6d-f820c5e0c10d.png", width="300">
詳細については、「[OCI IAM --「ユーザー機能の編集」を活用](https://qiita.com/letian/items/b3521b326bf0efd0cfc9)」をご参照ください。

:::note
この方法では、Cloud ShellからのOCI-CLIの利用を制限することはできませんのでご注意ください。Cloud Shell自体の使用を制限することは可能ですが、それは別の話となりますので、ここでは割愛させていただきます。要するに、OCI-CLIの利用を完全に制限したい場合は、APIキーの無効化に加えて、Cloud Shellの使用も制限する必要があります。
:::

以上