皆さんこんにちは。1年のうち90日くらい機嫌が悪いid:k-furusawa--gです。
今回はOCI APIをBashから打つ方法をまとめた記事を書こうと思います。実は本ブログのメンバーが過去にチラッとご紹介したことがあったのですが、単独記事があったほうが後から確認しやすいということで、単独記事を書くことに相成りました!
本記事の目次
前提
本記事は、最低限OCI CLIの操作ができることを前提に書かせていただきます。
CLI導入に関しては本ブログでまとめていますので、そちらをご参照ください。
主に2番目の記事に書かれている設定を利用します。
Bash用のサンプルコードを取得する
OCI APIはClassic系のREST APIと違って、IDとパスワードによる認証トークンのやり取りで呼び出すわけではありません。OCI側に設定したAPIキーと呼び出し側の秘密鍵を利用して認証を行いつつAPIを実行します。なのでそれを行うコードが必要なわけですが、公式がサンプルを用意してくれています。
以下のサイトからサンプルをコピーできるので、ささっとコピペしましょう。
コピペが終わったら次は接続設定を編集しましょう。
接続設定を編集する
コピペしたBashコード内の以下の部分を書き換えます。すべてCLI導入の際に設定ファイルに書いたものですね。
-
tenancyId
テナントのOCID。
-
authUserId
認証を行う(APIキーを登録した)ユーザーのOCID
-
keyFingerprint
認証を行う(APIキーを登録した)ユーザーのフィンガープリント。
-
privateKeyPath
登録したAPIキーに対応した秘密鍵のパス。
CLI導入していてもわかりにくい場合は以下の記事でも設定値の確認方法をまとめています。
【2019/09/10 Update】Oracle Cloud Infrastructureの複雑なIDとそのほか設定値を確認する方法【決定版を目指す】
コード内のfunctionをコマンドで使えるようにする
接続設定が終了したらファイルを保存しましょう。ここでは名前を仮に oci-bash
として保存したとします。コードに記載されている function oci-curl
をコマンドとして呼び出せるように、以下のコマンドを実行します。
source oci-bash
実行後、oci-curl
とコマンドを打つと invalid method
と出れば成功です。
実行するAPIを確認する
以下のドキュメントを参照し、利用したいAPIを確認しましょう。
主に確認するべきなのは以下の4点です。
- ホスト
- メソッド
- リクエストターゲット
- 必須リクエストパラメータ
例えば、Coreサービスのインスタンス一覧取得の場合はドキュメントから以下のことが分かります。
-
ホスト
エンドポイントが
us-ashburn
リージョンの場合はhttps://iaas.us-ashburn-1.oraclecloud.com
なので、ホストはiaas.us-ashburn-1.oraclecloud.com
とわかる。 -
メソッド
GETやPOSTのことです。
ListInstances
API の場合はGETです。 -
リクエストターゲット
ListInstances
API の場合は/20160918/instances/
がメソッドであることがわかる。ちなみに20160918
の部分はAPIバージョン。ほぼすべてのAPIにこれがつくが、つかない場合もある。 -
必須リクエストパラメータ
必須リクエストパラメータはない場合もあるが、
ListInstances
API の場合はcompartmentId
が必須であることがわかる。
実行コマンドを組み立てる
APIの確認ができたら、コマンドを組み立てましょう。公式ドキュメントには以下のような記載があります。
oci-curl <host> <method> [file-to-send-as-body] <request-target> [extra-curl-args]
<host>
は前項で確認したホストです。
<method>
は前項で確認したメソッドです。
[file-to-send-as-body]
は確認しませんでしたが、POSTやPUT系を行う際に設定するBody項目です。JSONで記載すればいいようです。.jsonファイルにまとめて記載してしまってもいいようです。
<request-target>
は前項で確認したリクエストターゲットです。
[extra-curl-args]
は引数です。前項で確認した必須リクエストパラメータなどです。必要ない場合もあります。
以上のことから、前項の例で挙げた ListInstances
API の場合は以下のようなコマンドになります。
oci-curl iaas.us-ashburn-1.oraclecloud.com get "/20160918/instances?compartmentId=<CompartmentId>"
<CompartmentId>
は自分の環境に合わせてください。
これでインスタンス一覧が取得できました! やりましたね。
そもそもコンパートメントのIDが分かりません! という方は、以下を実行するとテナント配下のコンパートメントの一覧が取得できます。
oci-curl identity.us-ashburn-1.oraclecloud.com get "/20160918/compartments?compartmentId=<TenancyId>&compartmentIdInSubtree=true"
<TenancyId>
が分かりません! という方はそもそも設定自体できていないので、本記事の最初に戻ってください。
おしまいに
面倒くさいですね。CLIでいいのではないでしょうか。
とは言えない場面も多々ありますので、打ち方を一度覚えておくといいかもしれません。特に深い設定などを行う際はサポートなどでもAPIを直接呼び出すように推奨されることがあるとの報告を受けています。
サンプルコードを改修してCLI用の設定ファイルを読み込むようにするというのも手かもしれませんね!