8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

便利なOCI CLIコマンド例

Last updated at Posted at 2023-09-25

本ブログは、オラクル・クラウドの個人ブログ一覧 【100件以上の記事を随時更新中】の1つです。

初めに

OCI CLIは、オラクル・クラウド(OCI)のコマンドラインツールであり、OCIコンソールで行える作業のほとんどをOCI CLIでも実行できます。開発者やCLIが好きな人にとって便利であり、バッチスクリプトと組み合わせて使用することで強力な機能を発揮できます。

個人的にOCI CLIが好きで、便利なコマンド例をまとめました。各コマンド例では、必須のパラメータのみを記載しています。コマンドの詳細については、マニュアルを参照してください。

※、2024年9月時点で、OCI CLIの最新バージョンは3.47.0です。

相当なサービス

クラウド・プロバイダー 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-cli

OCI CLI バージョンの確認

$ oci -v
3.33.1

構成ファイルの設定

コマンド:oci setup config

構成ファイルの場所(デフォルト):
Oracle Linux: /home/opc/.oci/config
Windows: C:\Users\<username>\.oci\config

構成ファイルの中身:

[DEFAULT]
user=ocid1.user.oc1..<unique_ID>
fingerprint=<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\<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\<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
      %USERPROFILE%/bin/oci-cli-scripts

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 iam region list
パラメータを指定しなくてもよい。

$ oci iam region list
{
  "data": [
<中略>
    {
      "key": "NRT",
      "name": "ap-tokyo-1"
    },
<中略>
    }
  ]
}

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>

ディレクトリの同期

コマンド:oci os object sync -bn <bucket_name> --src-dir <source_dir_name>

※、ローカルのディレクトリをバケット内のオブジェクトと同期します。サブディレクトリをトラバースして、新規および変更されたファイルまたはオブジェクトをソースから宛先にコピーし、必要に応じてソースに存在しないファイルやオブジェクトを削除します。

バケット単位の近似サイズ(使用量)の確認

コマンド:oci os bucket get -bn <Bucket_Name> --fields approximateSize

4. インスタンスの起動・停止

時はお金なり。土日祝など、長時間にわたりインスタンスを使用しない場合は、コストを節約するために停止することをお勧めします。

以下のツールと組み合わせて使えば、定時起動・停止用のスクリプトが作成できます。
Linux OSの場合:crontab
Windows OSの場合:タスクスケジューラ

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 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 <Analytics_Instance_OCID>

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

OCI DIワークスペースの起動・停止

ワークスペースの起動:oci data-integration workspace start --workspace-id <Workspace_OCID>
ワークスペースの停止:oci data-integration workspace stop --workspace-id <Workspace_OCID>

5. 拡張リソース問合わせ機能の活用

詳細は、この記事(OCIのサービス制限値をCLIで確認する方法)をご参照ください。次は抜粋したコマンド例です。

コンパートメント内のすべてのリソースを検出

コマンド例:oci search resource structured-search --query-text "query all resources where compartmentId = 'compartmentOcid'" | grep "resource-type"
image.png

DRG使用量の確認

コマンド例:
oci search resource structured-search --query-text "query drg resources" | grep "display-name"
image.png

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
  }
}

used: 0 (使用量)、available: 100 (使用可能値)

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 <Private_IP_OCID>

割り当てた予約済パブリックIPの解除
oci network public-ip update --public-ip-id <Reserved_Public_IP_OCID> --private-ip-id ""
※、プライベートIPを空白の文字列にすると、割り当てた予約済パブリックIPが解除されます。

8. Base DB の接続文字列の取得

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)))"

付録

警告メッセージの回避

エラー現象: OCI-CLIコマンドを実施する際、次の警告メッセージが出る。

WARNING: Permissions on <PEM_File>.pem are too open.

原因: PEM鍵ファイルの権限は、読込専用になっていない。

対策

  • 方法1:次のOCI-CLI コマンドを実行する
oci setup repair-file-permissions --file C:\Users\<username>\.oci\<PEM_File_Name>.pem
  • 方法2:環境変数を設定する

Windowsバッチを利用する場合:

SET OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True

PowerShellを利用する場合:

$Env:OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING="True"

OCI-CLIについてのFAQ

よくある質問の詳細は、「OCI-CLIについてのFAQ」をご参照ください。

以上です。


関連記事
OCIインスタンスの自動起動・停止
OCI-CLIオフライン・インストールの手順

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

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?