初めに
OCI CLIは、オラクル・クラウド(OCI)のリソースをコマンドラインから操作するための強力なツールです。OCIコンソールで行えるほとんどの操作をCLIで実行できるため、開発者や自動化を好むユーザーにとって非常に便利です。特に、バッチスクリプトと組み合わせることで、繰り返し作業の効率化や複雑なタスクの自動化が可能になります。
この記事では、私が実際の作業でよく使うOCI CLIのコマンド例を厳選して紹介します。現場によく聞かれる質問を焦点に当てているため、すぐに実践で活用できます。詳細なオプションや設定方法については、レファレンスを参照してください。
本記事は、OCI CLIの基本的な使い方から実践的な活用例まで、少しでも多くの方のお役に立てれば幸いです
※、OCI CLIの最新バージョンは です。
サポートされているOS
- Microsoft Windows
- Linux (Oracle Linux, CentOS, Ubuntu)
- Mac OS
相当なサービス
| クラウド・プロバイダー | OCI | AWS | Azure | GCP |
|---|---|---|---|---|
| サービス名 | OCI CLI | AWS CLI | Azure CLI | Google Cloud CLI |
1. CLIのインストールとセットアップ
OCI CLIのインストールと構成ファイルの作成については、クイックスタートをご参照ください。
以下は抜粋した内容です。Cloud Shellを使用する場合は、既にインストールと設定が完了しているため、そのままご利用いただけます。
CLIのインストール
- Oracle Linux 9の場合:
sudo dnf -y install oraclelinux-developer-release-el9
sudo dnf install python39-oci-cli- Oracle Linux 8の場合:
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli- Oracle Linux 7の場合:
sudo yum install python36-oci-cli- Windowsの場合(管理者として実行):
Set-ExecutionPolicy RemoteSigned
Invoke-WebRequest https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1 -OutFile install.ps1
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))※、Windows 2012およびWindows 2016の場合は、PowerShellでTLS 1.2が使用されるよう強制します。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12- Macの場合:
brew update && brew install oci-cliOCI CLI バージョンの確認:oci -v
構成ファイルの設定
コマンド:oci setup config
構成ファイルの場所(デフォルト):
Oracle Linux: home/opc/.oci/config
Windows: C:\Users\your_username\.oci\config
構成ファイルの中身:
[DEFAULT]
user=ocid1.user.oc1..unique_ID
fingerprint=replace_with_your_fingerprint
key_file=/home/opc/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..unique_ID
region=ap-tokyo-1PEMファイルの権限を変更する
Oracle Linuxの場合:
oci setup repair-file-permissions --file /home/opc/.oci/oci_api_key.pemWindowsの場合:
oci setup repair-file-permissions --file C:\Users\your_username\.oci\PEM_File_Name.pemCLIのアップグレード
最新バージョンを使用することをお勧めします。
インストールスクリプトを使用してCLIをインストールした場合は、次の手順でCLIをアップグレードします。
- インストール・スクリプトを実行し、同じインストール・ディレクトリを指定します。
- 表示されたプロンプトに対して、既存のディレクトリを削除するかどうかを尋ねられたら、"Y"と回答します。
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"CLIを手動でインストールした場合は、次のコマンドを実行します。
pip install oci-cli --upgradepipの格納場所:
Windows: C:\Users\your_username\lib\oracle-cli\Scripts\
Linux: /home/opc/lib/oracle-cli/bin/pip
Homebrewを使用してMac OS XでCLIインストールをアップグレードするには:
brew update && brew upgrade oci-cliCLIのアンインストール
- Oracle Linuxの場合:
- OL9:
sudo dnf remove python39-oci-cli - OL8:
sudo dnf remove python36-oci-cli - OL7:
sudo yum remove python36-oci-cli
- OL9:
- Windowsの場合:
- pipを使用してCLIを手動でインストールした場合: pip uninstall oci-cli
- インストール・スクリプトとデフォルトのインストール場所を使用した場合、次のものを削除する必要がある。
%USERPROFILE%/lib/oracle-cli(ディレクトリ)%USERPROFILE%/bin/oci-cli-scripts(ディレクトリ)%USERPROFILE%/bin/oci.exe
CLIのオフライン・インストール
インターネットにアクセスできない環境に OCI CLI をインストールすることも可能です。OCI CLIをインストールする前に、Pythonをインストールする必要があります。
詳細について、OCI CLIオフライン・インストールの手順をご参照ください。
2. テナンシ情報の取得
オブジェクト・ストレージ・ネームスペースの取得
私がよく使うコマンドです。OCIDは不要で、非常に使いやすいです。構成ファイルを設定した後、疎通確認として使用するのが便利です。
$ oci os ns get
{
"data": "<Your_Object_Storage_Namespace>"
}テナンシ名の取得
コマンド:oci iam tenancy get --tenancy-id [Tenancy_OCID]
$ oci iam tenancy get --tenancy-id ocid1.tenancy.oc1..unique_ID
{
"data": {
"defined-tags": {},
"description": "<Your_Tenancy_Name>",
"freeform-tags": {},
"home-region-key": "NRT",
"id": "ocid1.tenancy.oc1..unique_ID",
"name": "<Your_Tenancy_Name>",
"upi-idcs-compatibility-layer-endpoint": null
}
}※、テナントIDでテナント名の取得ができますが、テナント名でテナントIDの取得ができません。
ドメイン情報の取得
コマンド:oci iam availability-domain list
パラメータを指定しなくてもよい。
$ oci iam availability-domain list
{
"data": [
{
"compartment-id": "ocid1.tenancy.oc1..unique_ID",
"id": "ocid1.availabilitydomain.oc1..unique_ID",
"name": "xxxx:AP-TOKYO-1-AD-1"
}
]
}リージョン一覧の取得
OCIのすべてのリージョンを取得
コマンド:oci iam region list (パラメータ '--all' を指定しなくてもよい)
$ oci iam region list
{
"data": [
<中略>
{
"key": "NRT",
"name": "ap-tokyo-1"
},
<中略>
{
"key": "KIX",
"name": "ap-osaka-1"
},
<中略>
]
}※、このコマンドを使用することで、すべてのリージョン・キー(region-key)とリージョン識別子(region-name)を素早く確認できます。リージョン・キーと識別子の詳細について、ドキュメントを参照してください。
サブスクリプション済のリージョン一覧を取得
コマンド:oci iam region-subscription list
$ oci iam region-subscription list
{
"data": [
{
"is-home-region": false,
"region-key": "KIX",
"region-name": "ap-osaka-1",
"status": "READY"
},
{
"is-home-region": true,
"region-key": "NRT",
"region-name": "ap-tokyo-1",
"status": "READY"
}
]
}
※、is-home-region をチェックすることで、ホーム・リージョンを取得できます。
3. オブジェクト・ストレージにアクセス
バケット一覧の取得
コマンド: oci os bucket list -c [Compartment_OCID]
バケット単位の近似サイズ(使用量)の確認
コマンド:oci os bucket get -bn [Bucket_Name] --fields approximateSize
指定したバケットにオブジェクト一覧の取得
コマンド:oci os object list -bn [Bucket_Name]
例:oci os object list -bn MyBucket | grep name
ファイルごとのアップロード・ダウンロード・削除
- アップロード
oci os object put -bn [bucket_name] --file [local_file_name] - ダウンロード
oci os object get -bn [bucket_name] --file [local_file_name] --name [object_name] - 削除
oci os object delete -bn [bucket_name] --name [object_name]
put --file file1 file2、あるいは put --file file* のような書き方が正しくないです。一括アップロード・ダウンロード・削除
- アップロード (サブディレクトリを含む)
oci os object bulk-upload -bn [bucket_name] --src-dir [source_dir_name] - ダウンロード (サブディレクトリを含む)
oci os object bulk-download -bn [bucket_name] --dest-dir [dest_dir_name]
※、ローカルに、このディレクトリが存在しない場合は自動に作成されます。 - 一括削除
oci os object bulk-delete -bn [bucket_name]
オプション引数:--force一括削除実行前に確認を求めない。
※、アップロード/ダウンロードの共通オプション引数:--overwrite
(同名のオブジェクトが存在する場合、上書きする)
ディレクトリの同期
- アップロード同期
コマンド:oci os object sync -bn [bucket_name] --src-dir [source_dir_name]
用途:ローカルのディレクトリをバケット内のオブジェクトへの同期です。ローカルのサブディレクトリをトラバースして、新規および変更されたファイルをバケットにコピーします。
- ダウンロード同期
コマンド:oci os object sync -bn [bucket_name] --dest-dir [destination_dir_name]
用途:バケット内のオブジェクトをローカルのディレクトリへの同期です。バケット内のサブフォルダをトラバースして、新規および変更されたオブジェクトをローカルにコピーします。
※、--src-dir または --dest-dir オプションは、一度にどちらか一方のみ指定できます。
※、--deleteを付けると、宛先(同期先)に存在するが、ソース(同期元)には存在しないファイルやオブジェクトを削除します(デフォルトでは、削除されません)。
4. インスタンスの起動・停止
以下のツールと組み合わせて使えば、定時起動・停止用のスクリプトが作成できます。
- Linux OSの場合:crontabを利用
実施例: 毎日18時(OSのタイムゾーン)、自動停止用スクリプトを呼び出す。
[opc@linux8 ~]$ crontab -l
00 18 * * * /home/opc/shell/compute_auto_stop.sh- Windows OSの場合:タスクスケジューラを利用
OCIインスタンスのライフサイクル状態を取得
| OCI サービス | 稼働中の状態 | 停止中の状態 | OCI CLI コマンド |
|---|---|---|---|
| Compute | RUNNING | STOPPED | リンク |
| Oracle Base DB | AVAILABLE | STOPPED | リンク |
| Autonomous AI DB | AVAILABLE | STOPPED | リンク |
| MySQL DB Service | ACTIVE | INACTIVE | リンク |
| Oracle Analytics Cloud (OAC) | ACTIVE | INACTIVE | リンク |
| OCI Data Integration (OCI DI) | ACTIVE | STOPPED | リンク |
OCIインスタンスを自動開始または停止する前に、ライフサイクル状態を確認することをお薦めします。詳しくは以下の記事をご覧ください。
OCI CLIを使用してOCIインスタンスのライフサイクル状態を取得する方法
Computeインスタンスの起動・停止・終了
- インスタンス一覧の取得: oci compute instance list -c [Compartment_OCID]
- インスタンスの起動:oci compute instance action --action "START" --instance-id [Instance_OCID]
- インスタンスの停止:oci compute instance action --action "SOFTSTOP" --instance-id [Instance_OCID]
- インスタンスの再起動:oci compute instance action --action "SOFTRESET" --instance-id [Instance_OCID]
- インスタンスの終了:oci compute instance terminate --instance-id [Instance_OCID]
Oracle Base DBの起動・停止
- DBノードの情報取得:oci db node list -c [Compartment_OCID] --db-system-id [DB_System_OCID] (引数
--db-system-idが必要) - DBノードの起動:oci db node start --db-node-id [DB_Node_OCID]
- DBノードの停止:oci db node stop --db-node-id [DB_Node_OCID]
- DBノードの再起動:oci db node soft-reset --db-node-id [DB_Node_OCID]
Autonomous AI DBの起動・停止
- ADB一覧の取得:oci db autonomous-database list -c [Compartment_OCID]
- ADBの起動:oci db autonomous-database start --autonomous-database-id [ADB_OCID]
- ADBの停止:oci db autonomous-database stop --autonomous-database-id [ADB_OCID]
- ADBの再起動:oci db autonomous-database restart --autonomous-database-id [ADB_OCID]
MySQL DB Serviceの起動・停止
- DB Systemの起動:oci mysql db-system start --db-system-id [DB_System_OCID]
- DB Systemの停止:oci mysql db-system stop --shutdown-type FAST|IMMEDIATE|SLOW --db-system-id [DB_System_OCID]
OACインスタンスの一時停止・再開
- OACの一時停止:oci analytics analytics-instance stop --analytics-instance-id [Analytics_Instance_OCID]
- OACの再開:oci analytics analytics-instance start --analytics-instance-id [nalytics_Instance_OCID]
データ統合ワークスペースの起動・停止
- ワークスペースの起動:oci data-integration workspace start --workspace-id [Workspace_OCID]
- ワークスペースの停止:oci data-integration workspace stop --workspace-id [Workspace_OCID]
5. 拡張リソース問合わせ機能の活用
詳細は、この記事(OCIの「拡張リソース問合わせ機能」を活用)をご参照ください。次は抜粋したコマンド例です。
コンパートメント内の全てのリソースを検出
コマンド例:oci search resource structured-search --query-text "query all resources where compartmentId = 'compartmentOcid'" | grep "resource-type"
DRG使用量の確認
コマンド例:
oci search resource structured-search --query-text "query drg resources" | grep "display-name"
6. サービス制限値の確認
詳細は、この記事(OCIのサービス制限値をCLIで確認する方法)をご参照ください。次はコマンド例の抜粋です。
サポート対象のサービス名を確認
コマンド:oci limits service list -c [Tenancy_OCID]
次のようにアルファベットの昇順で全サービスがリストされます。次のステップでサービス制限値を取る時、サービス名の略称(name項目)を指定する必要があります。
$ 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に対するサービス名は、vcnです。
VCNの使用可能値を確認
コマンド例:oci limits resource-availability get -c [Tenancy_OCID] --service-name vcn --limit-name vcn-count
$ 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
}
}used: 4 (使用量)、 available: 46 (使用可能値)
両者の合計は、サービス制限値の50となります。
OCPUの使用可能値を確認
コマンド例:
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
ADの冒頭のxxxxは、ADに自動に付与された4桁の英字で、oci iam availability-domain list で取得できます。
$ 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
}
}7. IPアドレス関連
IPアドレスの情報取得
| 分類 | OCIコンソールでOCIDを取得 | OCI CLIでOCIDを取得 |
|---|---|---|
| エフェメラル・パブリックIP | × | 〇 |
| 予約済パブリックIP | 〇 | 〇 |
| プライベートIP | × | 〇 |
指定したプライベートIPのOCIDを取得
コマンド例:oci network private-ip list --ip-address [Private_IP] --subnet-id [Subnet_OCID]
$ oci network private-ip list --ip-address 10.0.0.03 --subnet-id ocid1.subnet.oc1.ap-tokyo-1.<中略> | grep '"id":' | cut -f4 -d'"'
ocid1.privateip.oc1.ap-tokyo-1.<中略>指定したCompartmentの下にすべてのパブリックIPを取得
コマンド例:oci network public-ip list -c [Compartment_OCID] --scope REGION --all
上記コマンドの出力には、エフェメラル・パブリックIPと予約済エフェメラルIPの両方を含めます。片方のみを取得したい場合、--lifetime をつけてください。
エフェメラル・パブリックIPの場合:--lifetime EPHEMERAL
予約済パブリックIPの場合:--lifetime RESERVED
予約済パブリックIPの割り当てと解除
自動に割り当てられたエフェメラル・パブリックIPを解除
oci network public-ip delete --public-ip-id <Ephemeral_Public_IP_OCID>
予約済パブリックIPの割り当て
oci network public-ip update --public-ip-id <Reserved_Public_IP_OCID> --private-ip-id
割り当てた予約済パブリックIPの解除
oci network public-ip update --public-ip-id <Reserved_Public_IP_OCID> --private-ip-id ""
※、プライベートIPを空白の文字列にすると、割り当てた予約済パブリックIPが解除されます。
8. Base DB の接続文字列の取得
以下はCloud Shellから実行した例です。Windowsの場合、ダブルクォーテーションを付ける際に \(バックスラッシュ) を追加する必要があります。
CDBの接続文字列
※、事前にデータベースのOCIDを用意してください。
接続文字列(簡易接続)を取得する
コマンド例:oci db database get --database-id [Database_OCID] --query 'data."connection-strings"."all-connection-strings".cdbDefault'
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbDefault'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_xxx_nrt.publicsubnet1.vcn1.oraclevcn.com"※、ポート番号1521の後ろの部分がサービス名になります。
接続文字列(長)を取得する
コマンド例:oci db database get --database-id [Database_OCID] --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.xx.xx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_xxx_nrt.publicsubnet1.vcn1.oraclevcn.com)))"※、"SERVICE_NAME"で明確に示されています。
PDBの接続文字列
※、事前にPDBのOCIDを用意してください。
接続文字列(簡易接続)を取得する
コマンド例:oci db pluggable-database get --pluggable-database-id [Pluggable_Database_OCID] --query 'data."connection-strings"."pdb-default"'
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-default"'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com"接続文字列(長)を取得する
コマンド例:oci db pluggable-database get --pluggable-database-id [Pluggable_Database_OCID] --query 'data."connection-strings"."pdb-ip-default"'
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-ip-default"'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.xx.xx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com)))"付録
1. OCI CLIに関するFAQ
以下のようなよくある質問に対する回答をまとめました。詳細については、「OCI CLIに関するFAQ」をご参照ください。
- OCI CLIを利用するのにPythonは必須ですか?
- Oracle Base DBのインスタンスにもOCI CLIを利用することができますか?
- 特定のユーザーにOCI CLIを使用させたくない場合、それは可能ですか?
2. query引数の書き方
OCI CLIの出力結果はJSON形式のため、結果の件数が多いと見づらいことがあります。引数に --output table を付けると、表形式で結果が表示されます。項目が多い場合は、--query を使用して表示内容を絞り込むことも可能です。これらの引数はグローバル引数で、すべてのCLIコマンドに適用できます。
Computeインスタンスのライフサイクル状態を取得する例:
| 実行環境 | 書き方 |
|---|---|
| Linux (or Cloud Shell) | --query 'data."lifecycle-state"' |
| Windows BAT | --query "data.\"lifecycle-state\"" |
| Windows PowerShell | --query 'data.\"lifecycle-state\"' |
- "display-name" や "lifecycle-state" のようにハイフンが含まれる項目には、ダブルクォーテーションを付ける必要があります。Windowsの場合、ダブルクォーテーションを付ける際に '\' (バックスラッシュ) を忘れずに。
- 階層項目にダブルクォーテーションを付ける場合、各階層レベルごとにダブルクォーテーションを付ける必要があります。
✅:"defined-tags"."Oracle-Tags".CreatedBy
❌:"defined-tags.Oracle-Tags".CreatedBy
3. 優先順位
CLIは、次の優先順位に従って、オプション、環境変数またはOCI構成ファイル・エントリで指定された構成を適用します:
- コマンド・オプションで指定された値。
例: コマンドに --regionap-tokyo-1を指定 - 環境変数に指定された値。
例: 環境変数 OCI_CLI_REGION を事前に設定 - OCI構成ファイルで指定された値。
例: ~/.oci/config からregion変数を読み込む
4. 警告メッセージの回避
エラー現象: OCI CLIコマンドを実施する際、次の警告メッセージが出る。
WARNING: Permissions on your_PEM_file.pem are too open.原因: PEM鍵ファイルの権限は、読込専用になっていない。
対策
- 方法1:次のOCI CLI コマンドを実行する
oci setup repair-file-permissions --file C:\Users\your_username\.oci\your_PEM_file.pem- 方法2:環境変数を設定する
Windowsバッチを利用する場合:
SET OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=TruePowerShellを利用する場合:
$Env:OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING="True"以上
ドキュメント
コマンドライン・インタフェース(CLI) 英語 日本語
CLI環境変数 英語 日本語
OCI CLI Command Reference:
英語
Docs » setup » repair-file-permissions: 英語