スマートスタイル TECH BLOG

データベース&クラウド技術情報

OCI CLI の Tips

OCI CLIを利用してコマンドラインからOCIを操作するTips を紹介

CLI(コマンドライン・インタフェース)は、コマンドラインでOracle Cloud Infrastructureのオブジェクトとサービスを操作するためのツールです。

はじめに

Oracle Cloud Infrastructure(OCI)を使用したことがある方であれば、利用された経験がある方が多いかと思います。
今回は OCI CLI(コマンドライン・インタフェース)について、知っておくと便利かと思われる内容をまとめてみました。
インストール方法や基本的な使用方法については割愛させて頂きますので、初めて利用される方は以下のリファレンスをご確認ください。

1.デバッグオプション

コマンド実行しても、中々レスポンスが返ってこないぞってケースでは、コマンドを一旦中断して、–debugオプションを付与して確認してみましょう。
大体は、以下のようにエンドポイントに接続できずにリトライしている様子が出力されるはずです。

この出力を見れば、どこへリクエストを投げているかが分かるので、エンドポイントと正常に疎通ができるように対応すればよいことが分かります。
デフォルトだと、エンドポイントへ接続できない場合は、コマンドが返ってくるまでに時間を要する為、接続できるか、できないかだけを確認したい場合は、–connection-timeoutでデフォルトの10秒から更に短い値で指定し、–no-retryオプションを指定して、リトライしないようにしておくと、コマンドのレスポンスを待つのに長時間待つ必要がなくなります。

2.プロファイルの切替

OCI CLIをインストールすると、資格証明情報を定義したプロファイルが作成されます。
プロファイルはデフォルトでは、 ~/.oci/config に作成されます。

例えば、複数のテナンシーに対して、CLIを実行したいとなった場合、どのようにすればよいでしょうか?
CLIを実行するOSユーザを分ければ、ユーザをスイッチするだけで、異なるデフォルトプロファイルを参照することができますが、同一のOSユーザを使用する場合は、2通りの方法が挙げられます。

既存のプロファイルとは別にプロファイルを作成

1つ目は、プロファイルを既存のファイルパスとは別に作成し、コマンド実行時に --config-file オプションで、そのファイルを指定するようにします。
(プロファイルのファイルパスは、oci setup config 実行時の対話形式の入力の中で、設定可能です。)

また、環境変数 OCI_CLI_CONFIG_FILE でプロファイルのファイルパスを指定することも可能です。

既存のプロファイルに、別のセクションで定義する

2つ目は、既存のプロファイルに別のセクションで定義する方法です。

以下は、デフォルトで東京リージョンを参照する設定の下に、リージョンを大阪に変更しただけのセクション Osaka を追加しました。

この状態で、コマンドオプションに --profile でセクション名を指定すれば、指定したセクションの情報を使用してコマンド実行します。

こちらも、環境変数 OCI_CLI_PROFILE で読み込むセクションを定義しておくことが可能です。

3.oci_cli_rcファイルの使用

OCI CLI には、資格証明情報を定義したプロファイルとは別に、追加設定を行えるファイルがあります。
このファイルでは、デフォルトのオプションパラメータや、コマンドやパラメータのエイリアスを定義することができ、設定ファイルの作成には、 oci setup oci-cli-rc コマンドを実行することで、 ~/.oci/oci_cli_rc にファイルが作成されます。

デフォルトオプションパラメータの定義

デフォルトオプションパラメータが便利に働くケースとしては、頻繁に実行する対象のコンパートメントがあれば、そのコンパートメントID(–compartment-id/-c)があれば、それを定義しておきましょう。

コマンド実行時にコンパートメントIDをパラメータで指定しなかった場合は、ここで定義されたコンパートメントIDが適用されますが、コマンド実行時にパラメータを指定した場合は、そちらが優先されるので、よく実行するコンパートメントIDがあるなら定義しておくとよいでしょう。

コマンドエイリアス

oci setup oci-cli-rc コマンドを実行してCLI構成ファイルを作成した場合は、以下のように2つのコマンドエイリアスが [OCI_CLI_COMMAND_ALIASES] セクションで定義されています。

1つ目の定義で、CLIコマンドにおける list は全て ls に置き換えることができます。

2つ目の定義で、オブジェクトストレージからオブジェクトを削除する際の oci os object deleteoci os object rm に置き換えることができます。

エラーとなっていますが、バケット名とオブジェクト名を指定する必要がある点から正常にエイリアスが認識されているようです。
また、定義内容から、 oci rm で削除できるのかと推測される方もおられるかもしれませんが、そうゆう訳ではありませんので、ご注意下さい。

パラメータエイリアス

oci setup oci-cli-rc コマンドを実行してCLI構成ファイルを作成した場合は、以下のように4つのパラメータエイリアスが [OCI_CLI_PARAM_ALIASES] セクションで定義されています。

こちらは見ての通り、--availability-domain--display-name--egress-rules--ingress-rules に対するエイリアスが用意されおりますので、コマンドエイリアスと合わせてお好みを定義しておくとよいでしょう。

名前付き問い合わせ

oci setup oci-cli-rc コマンドを実行してCLI構成ファイルを作成した場合は、以下のように [OCI_CLI_CANNED_QUERIES] セクションで名前付き問い合わせが定義されています。
名前付き問い合わせは、 --queryパラメータを使用して出力をフィルタリングまたは操作する際の定義を、名前をキーにして問い合わせ内容を定義します。

例えば、一番上で定義されている get_id_and_display_name_from_list では、リストを取得した際の iddisplay-name だけを表示するものとして定義されており、以下のように指定することで適用することが可能です。

こちらも、よく使用される問い合わせ方法があれば、登録しておくとよいと思います。

4.非同期処理の終了を待つ

各サービスのインスタンスの作成や、起動、停止等をCLIで行った際には、リクエスト発行後、処理の完了を待たずにレスポンスが返されます。
複数のリソースに対して処理を行う際に、処理したリソースの状態を確認した上で次の処理を行いたい場合、例えば Compute インスタンスを起動して、起動完了を待ってから次の処理を行いたい場合等では、Terraformを使用するのが最善の手段かと思いますが、CLIでも実現することは可能です。
そのようなコマンドには、 --wait-for-state が活用できます。

例えば、以下のように Compute インスタンスを起動させ、起動状態になるまでコマンドが返ってこなくなるようにするには、以下のようにします。

–wait-for-state に指定できる値はコマンドごとに異なる可能性があるので、各コマンドのリファレンスをご参照下さい。
上記例の compute instance action については、こちら になります。
–wait-interval-seconds については、状態を確認しにいく間隔となります。
これも、コマンドによって異なる可能性がありますが、デフォルトの 30秒 を 10秒 に変更しています。
また、--wait-for-state を指定した場合、その状態になるまでの最大待機時間は 20分(1,200秒)となりますので、それ以上に時間を要する処理の待機が見込まれる場合、–max-wait-secondsで最大待機時間を増やしておくことをお勧めします。

5.対話型モード

OCI CLI には対話型モードというものが存在します。
対話型モードを使用するには、OCI CLIのバージョン3.9.1以上である必要がありますが、入力内容に沿って補完候補が表示され、パラメータの情報も表示される為、一度実行したことのあるコマンドであれば、ある程度リファレンスを見なくても実行できるという利点があります。

対話型モードを使用するには、 oci -i を実行します。
実行すると、以下のように表示されます。

例えば、oci compute コマンドの実行をしたい場合は、最初に c を入力するとcから始まるコマンドがリストされます。

キーボードの↑↓で実行したいコマンドを選択し、Enterキーを押下します。

その後、スペースを入力すると、次の補完候補が表示されます。

そのまま、補完していき、パラメータ入力部分で補完候補を表示すると、以下のように必須パラメータは赤色で(*) 表示されます。

対話型モードを使用すれば、リファレンスを見なくても、コマンド実行できる機会が増えるのではないでしょうか。

まとめ

コンソール画面での操作が手間だと感じる事もあり、よく使用するインスタンスの起動、停止等の簡単な操作には、OCI CLI を用いられている方も多いのではないでしょうか。
今後も便利な新機能等があれば、本ブログで発信していきたいと思います。

Return Top