OCI CLIの実務で使えるコマンド例

Developer


初めに

OCI CLIは、オラクル・クラウド(OCI)のリソースをコマンドラインから操作するための強力なツールです。OCIコンソールで行えるほとんどの操作をCLIで実行できるため、開発者や自動化を好むユーザーにとって非常に便利です。特に、バッチスクリプトと組み合わせることで、繰り返し作業の効率化や複雑なタスクの自動化が可能になります。

この記事では、私が実際の作業でよく使うOCI CLIのコマンド例を厳選して紹介します。現場によく聞かれる質問を焦点に当てているため、すぐに実践で活用できます。詳細なオプションや設定方法については、レファレンスを参照してください。

本記事は、OCI CLIの基本的な使い方から実践的な活用例まで、少しでも多くの方のお役に立てれば幸いです

※、OCI CLIの最新バージョンは です。

サポートされているOS

  • Microsoft Windows
  • Linux (Oracle Linux, CentOS, Ubuntu)
  • Mac OS

相当なサービス

クラウド・プロバイダーOCIAWSAzureGCP
サービス名OCI CLIAWS CLIAzure CLIGoogle 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-cli

OCI 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-1

PEMファイルの権限を変更する
Oracle Linuxの場合:

oci setup repair-file-permissions --file /home/opc/.oci/oci_api_key.pem

Windowsの場合:

oci setup repair-file-permissions --file C:\Users\your_username\.oci\PEM_File_Name.pem

CLIのアップグレード

最新バージョンを使用することをお勧めします。

インストールスクリプトを使用してCLIをインストールした場合は、次の手順でCLIをアップグレードします。

  • インストール・スクリプトを実行し、同じインストール・ディレクトリを指定します。
  • 表示されたプロンプトに対して、既存のディレクトリを削除するかどうかを尋ねられたら、"Y"と回答します。
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

CLIを手動でインストールした場合は、次のコマンドを実行します。

pip install oci-cli --upgrade

pipの格納場所:
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-cli

CLIのアンインストール

  • Oracle Linuxの場合:
    • OL9: sudo dnf remove python39-oci-cli
    • OL8: sudo dnf remove python36-oci-cli
    • OL7: sudo yum remove python36-oci-cli
  • 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]
"os object put|get|delete"を利用する時、1個のファイルしか指定できません。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 コマンド
ComputeRUNNINGSTOPPEDリンク
Oracle Base DBAVAILABLESTOPPEDリンク
Autonomous AI DBAVAILABLESTOPPEDリンク
MySQL DB ServiceACTIVEINACTIVEリンク
Oracle Analytics Cloud (OAC)ACTIVEINACTIVEリンク
OCI Data Integration (OCI DI)ACTIVESTOPPEDリンク

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]
'--action' 引数は、"SOFT"なしで"STOP"と"RESET"を指定できますが、"SOFTSTOP" と "SOFTRESET" の使用をお勧めします。

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]
起動・停止対象は、DB systemではなく、DBノードです。

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]
OAC一時停止中、課金が完全に止まるのではなく、通常の15%の課金が引き続き発生します。再開すると、通常の課金に戻ります。完全に課金を止めたい場合、OACインスタンスの削除が必要です。

データ統合ワークスペースの起動・停止

  • ワークスペースの起動: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"
oci search resource (All)

DRG使用量の確認

コマンド例:
oci search resource structured-search --query-text "query drg resources" | grep "display-name"
oci search resource (DRG)

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、プライベートIPのOCIDが直接にOCIコンソールより確認できないが、OCI CLIで簡単に取得できます。

指定したプライベート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 の接続文字列の取得

DBが停止中でも、OCI CLIを使用して接続文字列を取得できます。
以下は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コマンドに適用できます。

query引数の書き方は、実行環境の種類により違いがあります。

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構成ファイル・エントリで指定された構成を適用します:

  1. コマンド・オプションで指定された値。
    例: コマンドに --region ap-tokyo-1を指定
  2. 環境変数に指定された値。
    例: 環境変数 OCI_CLI_REGION を事前に設定
  3. 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=True

PowerShellを利用する場合:

$Env:OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING="True"

以上

ドキュメント
コマンドライン・インタフェース(CLI) 英語 日本語
CLI環境変数 英語 日本語
OCI CLI Command Reference: 英語
Docs » setup » repair-file-permissions: 英語

タイトルとURLをコピーしました