Oracle Cloud : コマンド・ライン・インタフェース(CLI) をインストールしてみた

コマンド・ライン・インタフェース(CLI)は、Oracle Cloud Infrastructureオブジェクトおよびサービスを操作できるツールです。
OCI CLIは、Webコンソールとほとんど同じ機能を提供し、追加の高度なコマンドが含まれています。
ということで、OCI CLIをインストールしてみてみます

# ■ 要件
[コマンドライン・インタフェース(CLI): 要件](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm#Requirements)を参考に事前設定します。

## ⚫︎ Pythonインストールとアップデート
CLIでは、MacOS、WindowsまたはサポートされているLinuxおよびUNIX系のオペレーティング・システムで実行されるPythonバージョン3.6以上をサポートしています。
新しいバージョンのPythonは、すぐにサポートされない場合があります。CLIは、記載されていないオペレーティング・システムで動作する可能性がありますが、互換性のテストは行っていません。
[サポートされるPythonバージョンおよびオペレーティング・システム](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm#Requirements__SupportedPythonVersionsandOperatingSystems)を参考に設定します。

## ● Pythonインストール確認
Pythonがインストールされているか確認
以下のようにVersion確認して3.6以降が表示されればOK

```shell-session
[opc@macbook~]$ python -V
	Python 3.6.8
```

## ● Python Versionを変更する場合
### 1) 恒久的に Version変更したい場合
次を参考

https://qiita.com/shirok/items/5f9e85eb6cee2bb7902c

### 2) CLIインストール時のみ Version変更したい場合
他に影響でないように aliasコマンドで、セッションのみ適用

```
[opc@macbook~]$ alias python='/usr/bin/python3'
[opc@macbook~]$ python -V
	Python 3.6.8
```

# ■ OCI CLIのインストール
## ● 方法1. すばやくインストールする手順
OCIコマンドライン・インタフェース(CLI)をすばやくインストールして構成する方法が、[OCIドキュメント: CLIのインストール](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux8)に各オペレーティング・システム毎に手順があります。
ここでは、Oracle Linux 8 へインストールしてみてみます。

**Oracle Linux 9 手順**
Oracle Linux 8 以上を使用している場合は、dnfを使用してCLIをインストールできます。 

```: コマンド
sudo dnf -y install oraclelinux-developer-release-el9
sudo dnf install python39-oci-cli
```

```: コマンド実行例
[opc@vm-ol9 ~]$ sudo dnf -y install oraclelinux-developer-release-el9
Last metadata expiration check: 3:50:55 ago on Wed 11 Jun 2025 10:04:06 AM GMT.
Package oraclelinux-developer-release-el9-1.0-2.el9.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!


[opc@vm-ol9 ~]$ sudo dnf install python39-oci-cli
Last metadata expiration check: 3:51:07 ago on Wed 11 Jun 2025 10:04:06 AM GMT.
Dependencies resolved.
=========================================================================================================================================
 Package                                   Architecture          Version                           Repository                       Size
=========================================================================================================================================
Installing:
 python39-oci-cli                          noarch                3.58.0-1.el9                      ol9_oci_included                 44 M
Upgrading:
 python39-oci-sdk                          x86_64                2.154.0-1.el9                     ol9_oci_included                 86 M
Installing dependencies:
 python3-arrow                             noarch                1.1.0-2.el9                       ol9_oci_included                153 k
 python3-importlib-metadata                noarch                4.12.0-2.el9                      ol9_oci_included                 75 k
 python3-jmespath                          noarch                0.10.0-4.el9                      ol9_oci_included                 78 k
 python3-prompt-toolkit                    noarch                3.0.38-4.el9                      ol9_oci_included                1.0 M
 python3-terminaltables                    noarch                3.1.10-8.0.1.el9                  ol9_oci_included                 60 k
 python3-wcwidth                           noarch                0.2.5-8.el9                       ol9_appstream                    65 k
 python3-zipp                              noarch                0.5.1-1.el9                       ol9_oci_included                 24 k

Transaction Summary
=========================================================================================================================================
Install  8 Packages
Upgrade  1 Package

Total download size: 131 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): python3-jmespath-0.10.0-4.el9.noarch.rpm                                                          2.1 MB/s |  78 kB     00:00
(2/9): python3-arrow-1.1.0-2.el9.noarch.rpm                                                              3.6 MB/s | 153 kB     00:00
(3/9): python3-prompt-toolkit-3.0.38-4.el9.noarch.rpm                                                     44 MB/s | 1.0 MB     00:00
(4/9): python3-terminaltables-3.1.10-8.0.1.el9.noarch.rpm                                                2.8 MB/s |  60 kB     00:00
(5/9): python3-zipp-0.5.1-1.el9.noarch.rpm                                                               3.6 MB/s |  24 kB     00:00
(6/9): python3-wcwidth-0.2.5-8.el9.noarch.rpm                                                            9.7 MB/s |  65 kB     00:00
(7/9): python39-oci-cli-3.58.0-1.el9.noarch.rpm                                                           82 MB/s |  44 MB     00:00
(8/9): python3-importlib-metadata-4.12.0-2.el9.noarch.rpm                                                125 kB/s |  75 kB     00:00
(9/9): python39-oci-sdk-2.154.0-1.el9.x86_64.rpm                                                          63 MB/s |  86 MB     00:01
-----------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                     91 MB/s | 131 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                 1/1
  Upgrading        : python39-oci-sdk-2.154.0-1.el9.x86_64                                                                          1/10
  Installing       : python3-wcwidth-0.2.5-8.el9.noarch                                                                             2/10
  Installing       : python3-prompt-toolkit-3.0.38-4.el9.noarch                                                                     3/10
  Installing       : python3-zipp-0.5.1-1.el9.noarch                                                                                4/10
  Installing       : python3-importlib-metadata-4.12.0-2.el9.noarch                                                                 5/10
  Installing       : python3-terminaltables-3.1.10-8.0.1.el9.noarch                                                                 6/10
  Installing       : python3-jmespath-0.10.0-4.el9.noarch                                                                           7/10
  Installing       : python3-arrow-1.1.0-2.el9.noarch                                                                               8/10
  Installing       : python39-oci-cli-3.58.0-1.el9.noarch                                                                           9/10
  Cleanup          : python39-oci-sdk-2.150.3-1.el9.x86_64                                                                         10/10
  Running scriptlet: python39-oci-sdk-2.150.3-1.el9.x86_64                                                                         10/10
  Verifying        : python3-arrow-1.1.0-2.el9.noarch                                                                               1/10
  Verifying        : python3-importlib-metadata-4.12.0-2.el9.noarch                                                                 2/10
  Verifying        : python3-jmespath-0.10.0-4.el9.noarch                                                                           3/10
  Verifying        : python3-prompt-toolkit-3.0.38-4.el9.noarch                                                                     4/10
  Verifying        : python3-terminaltables-3.1.10-8.0.1.el9.noarch                                                                 5/10
  Verifying        : python3-zipp-0.5.1-1.el9.noarch                                                                                6/10
  Verifying        : python39-oci-cli-3.58.0-1.el9.noarch                                                                           7/10
  Verifying        : python3-wcwidth-0.2.5-8.el9.noarch                                                                             8/10
  Verifying        : python39-oci-sdk-2.154.0-1.el9.x86_64                                                                          9/10
  Verifying        : python39-oci-sdk-2.150.3-1.el9.x86_64                                                                         10/10

Upgraded:
  python39-oci-sdk-2.154.0-1.el9.x86_64
Installed:
  python3-arrow-1.1.0-2.el9.noarch              python3-importlib-metadata-4.12.0-2.el9.noarch    python3-jmespath-0.10.0-4.el9.noarch
  python3-prompt-toolkit-3.0.38-4.el9.noarch    python3-terminaltables-3.1.10-8.0.1.el9.noarch    python3-wcwidth-0.2.5-8.el9.noarch
  python3-zipp-0.5.1-1.el9.noarch               python39-oci-cli-3.58.0-1.el9.noarch

Complete!
```

**・ インストール確認**
```
[opc@vm-ol9 ~]$ oci -v
3.58.0
```

## ● 方法2. CLIインストール(Python 仮想環境)
[venv Pythonモジュール](https://docs.python.org/3/library/venv.html)は、分離したPython環境を作成できる仮想環境ビルダーです。CLIを仮想環境にインストールすることをお薦めします。

### 1) 仮想環境の作成および構成
```
[opc@macbook~]$ python3 -m venv oracle-cli
[opc@macbook~]$ source oracle-cli/bin/activate
(oracle-cli) [opc@macbook~]$
```

### 2) コマンドライン・インタフェースのインストール
PIP を使用してインストール
```
(oracle-cli) [opc@macbook~]$ pip install oci-cli
	Collecting oci-cli
	  Downloading oci_cli-3.24.0-py3-none-any.whl (36.7 MB)
	     |████████████████████████████████| 36.7 MB 434 kB/s
	Collecting pytz>=2016.10
	  Using cached pytz-2022.7.1-py2.py3-none-any.whl (499 kB)
	Collecting python-dateutil<3.0.0,>=2.5.3
	  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
	Collecting terminaltables==3.1.0
	  Downloading terminaltables-3.1.0.tar.gz (12 kB)
	Collecting jmespath==0.10.0
	  Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB)
	Collecting six>=1.15.0
	  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
	Collecting cryptography<40.0.0,>=3.2.1
	  Downloading cryptography-39.0.2-cp36-abi3-macosx_10_12_universal2.whl (5.4 MB)
	     |████████████████████████████████| 5.4 MB 33.7 MB/s
	Collecting pyOpenSSL<24.0.0,>=17.5.0
	  Downloading pyOpenSSL-23.0.0-py3-none-any.whl (57 kB)
	     |████████████████████████████████| 57 kB 22.5 MB/s
	Collecting prompt-toolkit==3.0.29
	  Downloading prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)
	     |████████████████████████████████| 381 kB 41.9 MB/s
	Collecting click==8.0.4
	  Downloading click-8.0.4-py3-none-any.whl (97 kB)
	     |████████████████████████████████| 97 kB 21.4 MB/s
	Collecting certifi
	  Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
	     |████████████████████████████████| 155 kB 23.5 MB/s
	Collecting arrow>=1.0.0
	  Downloading arrow-1.2.3-py3-none-any.whl (66 kB)
	     |████████████████████████████████| 66 kB 25.4 MB/s
	Collecting PyYAML<6,>=5.4
	  Downloading PyYAML-5.4.1.tar.gz (175 kB)
	     |████████████████████████████████| 175 kB 30.7 MB/s
	  Installing build dependencies ... done
	  Getting requirements to build wheel ... done
	    Preparing wheel metadata ... done
	Collecting oci==2.96.0
	  Downloading oci-2.96.0-py3-none-any.whl (20.0 MB)
	     |████████████████████████████████| 20.0 MB 5.1 MB/s
	Collecting circuitbreaker<2.0.0,>=1.3.1
	  Downloading circuitbreaker-1.4.0.tar.gz (9.7 kB)
	Collecting wcwidth
	  Downloading wcwidth-0.2.6-py2.py3-none-any.whl (29 kB)
	Collecting cffi>=1.12
	  Downloading cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl (174 kB)
	     |████████████████████████████████| 174 kB 27.5 MB/s
	Collecting pycparser
	  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
	     |████████████████████████████████| 118 kB 56.1 MB/s
	Using legacy 'setup.py install' for terminaltables, since package 'wheel' is not installed.
	Using legacy 'setup.py install' for circuitbreaker, since package 'wheel' is not installed.
	Building wheels for collected packages: PyYAML
	  Building wheel for PyYAML (PEP 517) ... done
	  Created wheel for PyYAML: filename=PyYAML-5.4.1-cp39-cp39-macosx_10_9_universal2.whl size=45664 sha256=af9cfae14dc3aab7d69da366dd78320458a61eaa026c5e31b3c2c9980bd67dfc
	  Stored in directory: /Users/opc/Library/Caches/pip/wheels/b7/a5/c4/504d913c2a55bb09c607541578ec5f844d1ff33467abe93ba5
	Successfully built PyYAML
	Installing collected packages: pycparser, cffi, six, cryptography, wcwidth, pytz, python-dateutil, pyOpenSSL, circuitbreaker, certifi, terminaltables, PyYAML, prompt-toolkit, oci, jmespath, click, arrow, oci-cli
	    Running setup.py install for circuitbreaker ... done
	    Running setup.py install for terminaltables ... done
	Successfully installed PyYAML-5.4.1 arrow-1.2.3 certifi-2022.12.7 cffi-1.15.1 circuitbreaker-1.4.0 click-8.0.4 cryptography-39.0.2 jmespath-0.10.0 oci-2.96.0 oci-cli-3.24.0 prompt-toolkit-3.0.29 pyOpenSSL-23.0.0 pycparser-2.21 python-dateutil-2.8.2 pytz-2022.7.1 six-1.16.0 terminaltables-3.1.0 wcwidth-0.2.6
	WARNING: You are using pip version 21.2.4; however, version 23.0.1 is available.
	You should consider upgrading via the '/Users/opc/oracle-cli/bin/python3 -m pip install --upgrade pip' command.
```

### 3) CLIインストール確認
```
[opc@macbook ~]$ source oracle-cli/bin/activate
(oracle-cli) [opc@macbook ~]$ oci -v
3.24.0
```


## ● 方法3. CLIインストール (GitHubから Download)
### 1) CLIインストーラ実行
Bashを使用して任意のComputerにCLIをインストール
ここではOCI Compute Instanceにインストールするのでopcユーザーでインストール
Macも同じ手順です。

```shell-session
[opc@macbook ~]$ bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
		  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
		                                 Dload  Upload   Total   Spent    Left  Speed
		100  6225  100  6225    0     0  40805      0 --:--:-- --:--:-- --:--:-- 40953
		Downloading Oracle Cloud Infrastructure CLI install script from https://raw.githubusercontent.com/oracle/oci-cli/5657b833bfcf16298d43fb6f0204cd66173c5ac0/scripts/install/install.py to /tmp/oci_cli_install_tmp_WAle.
		######################################################################## 100.0%
		Python3 not found on system PATH
		Running install script.
		-- Verifying Python version.
		-- Python version 2.7.5 okay.
・・・
		--
		-- ** Run `exec -l $SHELL` to restart your shell. **
		--
		-- Installation successful.
		-- Run the CLI with /home/opc/bin/oci --help
```

### 2) SHELL再読み込み
インストール直後は変数が反映されていないため再読み込み

```shell-session
[opc@macbook ~]$ exec -l $SHELL
```

### 3) CLIインストール確認

```shell-session
[opc@macbook ~]$ oci -v
　　3.1.2
```




# ■ CLI 構成ファイルの設定
CLIを使用する前に、Oracle Cloud Infrastructureの操作に必要な資格証明を含む構成ファイルを作成する必要があります。このファイルは、設定ダイアログを使用して作成することも、テキスト・エディタを使用して手動で作成することもできます。

## ● 設定情報確認
CLIを稼働させる OCIのAPIユーザー、Tenancy、Compartments情報を取得しておきます
```:例)
		・OCI APIユーザー情報
			USer名：test
			User OCID：ocid1.user.oc1..aaaaareeqodirtky5rkowworkv80ldx7ecysatmdgty67ekzpotest

		・Tenancy 情報
			Tenancy名：test00014419
			Tenancy OCID： ocid1.tenancy.oc1..aaaaaaaa56d4ubxlkxatwvzxzjsdieknkesktx4h2epjtsbtmspamjykcljfq

		・Compartments情報
			Compartment名：test_compartment
			Compartment OCID： ocid1.compartment.oc1..aaaaaa4ax6ieicvoyfoxo632fsbw4zsieiffrdgto2bg4dciubirdfslmybkpelt
```

## ● 設定実行
**1) oci setup config 実行**
このコマンドを使用すると、構成ファイルの作成に必要な情報とAPI公開キーおよび秘密キーの入力が求められます。設定ダイアログでは、この情報を使用してAPIキー・ペアが生成され、構成ファイルが作成されます。APIキーが作成されたら、コンソールを使用して公開キーをアップロードします。

```shell-session
[opc@macbook ~]$ oci setup config
		    This command provides a walkthrough of creating a valid CLI config file.

		    The following links explain where to find the information required by this
		    script:

		    User OCID and Tenancy OCID:

		        https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/apisigningkey.htm#Other

		    Region:

		        https://docs.us-phoenix-1.oraclecloud.com/Content/General/Concepts/regions.htm

		    General config documentation:

		        https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/sdkconfig.htm


		Enter a location for your config [/home/opc/.oci/config]:
		Enter a user OCID: ★OCI APIユーザーを記入
		Enter a tenancy OCID: ★tenancyを記入
		Enter a region (e.g. eu-frankfurt-1, uk-london-1, us-ashburn-1, us-phoenix-1): ★CLIを実行するRigionを記入
		Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: ★Yを記入
		Enter a directory for your keys to be created [/home/opc/.oci]:★デフォルトでOK
		Enter a name for your key [oci_api_key]:★デフォルトでOK
		Public key written to: /home/opc/.oci/oci_api_key_public.pem
		Enter a passphrase for your private key (empty for no passphrase):★必要に応じてパスワードを記入
		Private key written to: /home/opc/.oci/oci_api_key.pem
		Fingerprint: 50:d4:3f:ba:31:91:4c:a3:a7:7c:4b:4d:e5:7c:a5:80
		Config written to /home/opc/.oci/config


		    If you haven't already uploaded your public key through the console,
		    follow the instructions on the page linked below in the section 'How to
		    upload the public key':

```

**2) 作成ファイル確認**
```
[opc@macbook ~]$ ls -l ~/.oci
    total 16
    -rw-------. 1 opc opc  298 Apr 21 23:47 config
    -rw-------. 1 opc opc 1704 Apr 21 23:45 oci_api_key.pem
    -rw-------. 1 opc opc  451 Apr 21 23:45 oci_api_key_public.pem
```

**3) oci_api_key.pem ファイル設定**
APIキーのセキュリティを強化するために、秘密キーの最後にOCI_API_KEYを含む行を追加することをお薦めします。自分または組織内のユーザーが誤って公開GitHubリポジトリに秘密キーをコミットした場合、OCIによって修正アクションの実行が通知されます。ラベル付きの PEM形式の非公開鍵は次のようになります。
```
[opc@macbook ~]$ cat ~/.oci/oci_api_key.pem
-----BEGIN PRIVATE KEY-----
MIIBIjANBgkqhkiG9w0BAQE...
...
-----END PRIVATE KEY-----
OCI_API_KEY
```

この設定をしない場合、OCI CLI実行時に次のようなメッセージが出力されます。
```
[opc@macbook ~]$ oci os object list -bn bucket
Warning: To increase security of your API key located at /home/opc/.oci/oci_api_key.pem, append an extra line with 'OCI_API_KEY' at the end. For more information, refer to https://docs.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm. To suppress the warning, set the env variable SUPPRESS_LABEL_WARNING=True
・・・
```


# ■ CLI鍵をOCIユーザーに登録
CLIは鍵認証でアクセスされるので作成されたPublic Kye をOCI ユーザーに登録してCLIアクセスできるようにします


### 1) Public鍵(oci_api_key_public.pem)確認
※OCI CLI の Versionにより、ファイル名が異なる場合があります

```shell-session
[opc@macbook ~]$ cat ~/.oci/*_public.pem
		-----BEGIN PUBLIC KEY-----
		TESTIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+dleSpqDm0VOUmPHLi1c
		zc7LQ9BAztnAZtTHvIponI14/HIHo9AlFJHu7hkKkgvGRtVVJwh8p/8fKc4eC0L
		7ozZhsfN+O7/vqd62MboDlBuYcQ0KFyzaho2j7D5jUw9EBDBDcNF2mrVEFAEjXJZ
		hwNw5kVHdGDZjipt879JUTF/ItYGB7cAko6heYM19odQ2clP4CIGt3a6ypUloYOt
		vSPqZZjeSZgX1y2xQ+pE/nE5NUGOoq+BS5eUL+hdGXUSKNqP74qULn82Sk5cwujB
		prkphOrxG6EyFgnvABAKbfGqzBGjEbdxfyIqxyQtTGffGUWxuCFAnm5JftxiiEv+
		xQIDTEST
		-----END PUBLIC KEY-----
```

### 2) Public鍵をOCIユーザーに登録
上記oci_api_key_public.pemの内容をOCIユーザーの API Keyに登録

・登録するユーザー画面へ遷移
WEBコンソール右上の人型アイコンからログインしているユーザー画面に遷移することができます
<img width="889" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f44db372-12b1-c8cc-13c7-d6201c468127.png">

・左ペインにある[APIキーの追加]をクリックしPublic鍵(oci_api_key_public.pem)を登録
<img width="886" alt="02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/8ec6d68f-6659-3d59-c7de-bfaeb76d5dc6.png">

・登録されたことを確認
<img width="892" alt="03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/09f2b43a-1a0b-9b62-fb0e-805c43be6be8.png">


# ■ Profileの確認と設定
oci setup configコマンドでProfile情報が設定された~/.oci/config ファイルが作成されます。
初期値は、[DEFAULT]プロファイルになるので、追加で別のリージョンも追加したい場合次のように[TOKYO]項を追記します
ociコマンドに --profile=TOKYO を追加することで、TOKYOプロファイルが使用されます

```shell-session

[opc@macbook ~]$ cat ~/.oci/config 
    [DEFAULT]
    user=ocid1.user.oc1..aaaaareeqodirtky5rkowworkv80ldx7ecysatmdgty67ekzpotest
    fingerprint=12:89:ab:8f:f4:25:f6:99:dd
    key_file=/Users/opc/.oci/oci_api_key.pem
    tenancy=ocid1.tenancy.oc1..aaaaaaaa56d4ubxlkxatwvzxzjsdieknkesktx4h2epjtsbtmspamjykcljfq
    region=us-phoenix-1

    [TOKYO]
    user=ocid1.user.oc1..aaaaaaaafybxlpzvkhsknfuw5qhvqxzqgpn3xnljxwahgjfdpvizgtcj4cra
    fingerprint=12:89:ab:8f:f4:25:f6:99:dd
    key_file=/Users/opc/.oci/oci_api_key.pem
    tenancy=ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca
    region=ap-tokyo-1
```

# ■ CLIデフォルト値の設定
oci-cli-rcを作成して設定しておくことで、コマンド・ラインに入力する必要を無くすことができます。

## ● oci-cli-rc作成

```shell-session
[opc@macbook ~]$  oci setup oci-cli-rc
    Predefined queries written under section OCI_CLI_CANNED_QUERIES
    Command aliases written under section OCI_CLI_COMMAND_ALIASES
    Parameter aliases written under section OCI_CLI_PARAM_ALIASES

[opc@macbook ~]$ ls ~/.oci
    config			oci_api_key.pem		oci_api_key_public.pem	oci_cli_rc
```

## ● oci_cli_rcファイルへデフォルト値追加
ここでは、上記作成した[DEFAULT]と[TOKYO]プロファイルのデフォルトコンパートメント値(test_compartmentのOCID)を最下部に設定します。
使用したプロファイルに応じて設定した値が使用されます

```shell-session
[opc@macbook ~]$ cat ~/.oci/oci_cli_rc
    [OCI_CLI_CANNED_QUERIES]
    # For list results, this gets the ID and display-name of each item in the list. Note that when the names of attirbutes have
    # dashes in them they need to be surrounded with double quotes. This query knows to look for a list because of the
    # [*] syntax
    get_id_and_display_name_from_list=data[*].{id: id, "display-name": "display-name"}
    ・・・

    [DEFAULT]
    compartment-id = ocid1.compartment.oc1..aaaaaaaahszzd8asdjoregbssrhdh

    [TOKYO]
    compartment-id = ocid1.compartment.oc1..aaaaaaaahszzd8asdjoregbssrhdh
```


# ■ CLI実行テスト
デフォルトでは、コマンドに対するすべてのレスポンスはJSON形式で返されます。 
たとえば、リージョンのリストを取得するコマンドを発行すると、次のレスポンスが戻されます。 

```shell-session
[opc@macbook ~]$ oci iam region list
  {
    "data": [
      {
        "key": "BOM",
        "name": "ap-mumbai-1"
      },
      {
        "key": "FRA",
        "name": "eu-frankfurt-1"
      },
      {
        "key": "GRU",
        "name": "sa-saopaulo-1"
      },
      {
        "key": "IAD",
        "name": "us-ashburn-1"
      },
      {
        "key": "ICN",
        "name": "ap-seoul-1"
      },
      {
        "key": "LHR",
        "name": "uk-london-1"
      },
      {
        "key": "NRT",
        "name": "ap-tokyo-1"
      },
      {
        "key": "PHX",
        "name": "us-phoenix-1"
      },
      {
        "key": "SYD",
        "name": "ap-sydney-1"
      },
      {
        "key": "YYZ",
        "name": "ca-toronto-1"
      },
      {
        "key": "ZRH",
        "name": "eu-zurich-1"
      }
    ]
  }
```

場合によっては、可読性が問題になることがあります。
これは、レスポンスを表としてフォーマットすることで簡単に解決できます。 
表形式のコマンドにレスポンスするには、次のコマンドを実行します。
次のリージョンのリストは、2つの列の表として戻されます。

```shell-session
[opc@macbook ~]$ oci iam region list --output table
    +-----+----------------+
    | key | name           |
    +-----+----------------+
    | BOM | ap-mumbai-1    |
    | FRA | eu-frankfurt-1 |
    | GRU | sa-saopaulo-1  |
    | IAD | us-ashburn-1   |
    | ICN | ap-seoul-1     |
    | LHR | uk-london-1    |
    | NRT | ap-tokyo-1     |
    | PHX | us-phoenix-1   |
    | SYD | ap-sydney-1    |
    | YYZ | ca-toronto-1   |
    | ZRH | eu-zurich-1    |
    +-----+----------------+
```

# ■ CLIでVCNを作成/削除してみる
## ● CLIでVCN作成

```shell-session
[opc@macbook ~]$ oci network vcn create --cidr-block 10.0.0.0/16 --display-name test-vcn --dns-label TEST
		{
		  "data": {
		    "cidr-block": "10.0.0.0/16",
		    "compartment-id": "ocid1.compartment.oc1..aaaaaa",
		    "default-dhcp-options-id": "ocid1.dhcpoptions.oc1.eu-frankfurt-1.aaaaaaaarjqrkqceq",
		    "default-route-table-id": "ocid1.routetable.oc1.eu-frankfurt-1.aaaaaaaam6yjams",
		    "default-security-list-id": "ocid1.securitylist.oc1.eu-frankfurt-1.aaaaaaaa4j3nq",
		    "defined-tags": {},
		    "display-name": "test-vcn",
		    "dns-label": "test",
		    "freeform-tags": {},
		    "id": "ocid1.vcn.oc1.eu-frankfurt-1.aaaaaaaabkjob",
		    "lifecycle-state": "AVAILABLE",
		    "time-created": "2018-07-25T04:19:54.429000+00:00",
		    "vcn-domain-name": "test.oraclevcn.com"
		  },
		  "etag": "dc5eacac"
		}
```

## ● CLIでVCN削除

```shell-session
[opc@macbook ~]$ oci network vcn delete --vcn-id ocid1.vcn.oc1.uk-london-1.aaaaaaaabkjob
		Are you sure you want to delete this resource? [y/N]: y
```

## ● エラーが出力された場合
OCIユーザーに権限がないと以下エラーが出力されます
Administrators等のAPIアクセスできるGroupを追加しましょう

```shell-session
[opc@macbook ~]$ oci network vcn create --cidr-block 11.0.0.0/16 --display-name test-vcn --dns-label TEST
	ServiceError:
	{
	    "code": "NotAuthorizedOrNotFound",
	    "message": "Authorization failed or requested resource not found.",
	    "opc-request-id": "IDFD66B3D9B3CA403F8C8D5DE4E0519DFD/83A5F33821FF6C82FA0A1C47AB5AE160ID",
	    "status": 404
	}
```

# ■ CLIでルート表を追加/更新してみる
## ● ルート表作成

```shell
oci network route-table create  --display-name "RT-Public-Subnet01" --compartment-id "<コンパートメントOCID>" --route-rules '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"<Internet GatewayのOCID>"}]' --vcn-id "<VCNのOCID>"
```

## ● ルート・ルール更新
ルート・ルールを追加できないので、全部上書き更新するようにupdate文を実行

```shell
oci network route-table update --rt-id "<ルート表のOCID>" --route-rules '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"<Internet GatewayのOCID>"},{"cidrBlock":"192.168.0.0/6","networkEntityId":"<DRGのOCID>"},{"cidrBlock":"10.0.0.0/16","networkEntityId":"<DRGのOCID>"}]'
```
# ■ CLIでセキュリティ・リストを追加・更新してみる
・[Security-list Reference](https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.12.0/oci_cli_docs/cmdref/network/security-list.html)
・[IngressSecurityRule Reference](https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/IngressSecurityRule)
・[EgressSecurityRule Reference](https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/EgressSecurityRule)
・[IcmpOptions Reference](https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/IcmpOptions)
## ● セキュリティ・リスト作成
```
oci network security-list create --display-name "<表示名>" --compartment-id "<コンパートメント OCID>"  --vcn-id "<VCN OCID>"
```
## ● セキュリティ・ルール更新追加
プロトコル番号は、ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58")
### ・Ingress Roure

```
oci network security-list update --security-list-id "<セキュリティ・リストOCID>" --ingress-security-rules '[
{"source": "0.0.0.0/0", "protocol": "6", "isStateless": false, "tcpOptions": {"sourcePortRange":null, "destinationPortRange": {"max": 22, "min": 22}}},
{"source": "0.0.0.0/0", "protocol": "1", "isStateless": false, "icmpOptions": {"type":3,"code":4}},
{"source": "10.0.0.0/16", "protocol": "1", "isStateless": false, "icmpOptions": {"type":3,"code":null}},
{"source": "10.0.0.0/16", "protocol": "6", "isStateless": false, "tcpOptions": {"sourcePortRange":null, "destinationPortRange":null}}
]' 
```

### ・Egress Roure
```
oci network security-list update --security-list-id "<セキュリティ・リストOCID>" --ingress-security-rules '[
{"destination": "0.0.0.0/0", "protocol": "6", "isStateless": false, "tcpOptions": {"destinationPortRange": null, "sourcePortRange": null}}
]'
```


# ■ CLIでCompute Instanceを起動/停止してみる
Compute InstanceをCLIで起動停止するにはocidが必要になりますが、
ocidは判別しにくいため、作成したインスタンス名（name）指定でできるようにしてみます。
方法は、cliの--queryオプションを使用して作成したインスタンス名（name）からocidを出力してshell変数に入れてやります

## ● インスタンス名(name)からocidを取得するcli
### 1) ociコマンドでインスタンス(test-inst01)のocid出力コマンド作成

```shell-session
[opc@macbook ~]$ oci compute instance list --query 'data[?"display-name"==`test-inst01`]."id"|[0]' --raw-output --region us-phoenix-1
	==> ocid1.instance.oc1.phx.abcyhqjciwurbr6vbeignbpmyn7t3uwokhpep67fetest
```

### 2) インスタンス名(test-inst01)を指定した起動停止スクリプト作成
　　1) のコマンドをshell変数に入れて、CLIでInstanceをStart/Stop

**・変数設定確認**

```shell-session
[opc@macbook ~]$ id=$(oci compute instance list --query 'data[?"display-name"==`test-inst01`]."id"|[0]' --raw-output --region us-phoenix-1)
[opc@macbook ~]$ echo $id
	==> ocid1.instance.oc1.phx.abcyhqjciwurbr6vbeignbpmyn7t3uwokhpep67fetest
```

**・CLIでInstanceをStopさせてStatus確認**

```shell-session
[opc@macbook ~]$ oci compute instance action --instance-id $id --action start
[opc@macbook ~]$ oci compute instance get --instance-id $id --query 'data."lifecycle-state"' --raw-output --region us-phoenix-1
STOPPED
```

**・CLIでInstanceをStartさせてStatus確認**

```shell-session
[opc@macbook ~]$ oci compute instance action --instance-id $id --action start
[opc@macbook ~]$ oci compute instance get --instance-id $id --query 'data."lifecycle-state"' --raw-output --region us-phoenix-1
RUNNING
```

# ■ OCI CLI コマンドリファレンス
・[Oracle Cloud Infrastructure CLI Command Reference](https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.12.0/oci_cli_docs/)


# ■ 参考
　・ [コマンドライン・インタフェース(CLI)](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm)
　・ [CLIのインストール](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux8)
　・ [OCI CLI 手動およびオフライン・インストール](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/climanualinst.htm)
　・ [必要なキーとOCID](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm)