Oracle Cloud のCLI(Command Line Interface)をオンプレミス環境で使えるようにしてみる

f:id:ts0818:20200921223753j:plain

この城は軍事拠点としての「要塞」としてではなく、また政治や外交の拠点としての「宮殿」として建設されたものでもなく、後述のようにルートヴィヒ2世ロマンティック趣味のためだけに建設されたもので、ドイツの城館に本来は必ずあるべき小聖堂や墓地がこの城にはなく、玉座を後回しにしてもヴィーナスの洞窟と名付けられた人工の洞窟が建設されるなど、実際の住居としての居住性はほとんど考慮されておらず、施設としての実用性は無視された設計になっており、居住にも政務にも(もちろん軍事施設としても)不向きな城である。

ノイシュヴァンシュタイン城 - Wikipedia

⇧ う~ん、超弩級のロマンティックですかな...

雲に覆われてミステリアス~、雲と言えば、そうだね、クラウドだね!

というわけで、クラウドにレッツトライ~。
 

Oracle Cloud の CLI(Command Line Interface)の仕組みは?

AWSAmazon Web Service)でもCLIがあったけど、

github.com

This is the command line interface for Oracle Cloud Infrastructure.

The project is open source and maintained by Oracle Corp. The home page for the project is here.

https://github.com/oracle/oci-cli#oracle-cloud-infrastructure-cli

⇧ 当然、Oracle Cloud にもありますと。

で、このCLI(Command Line Interface) の仕組みってどうなってるのか?

Oracle Cloud の CLI(Command Line Interface)は、

docs.cloud.oracle.com

CLIは、MacWindowsまたはLinuxで実行するPython (バージョン3.5以上)上に構築されています。PythonコードがOracle Cloud Infrastructure APIをコールして、様々なサービスのために実装された機能を提供します。これらは、HTTPSリクエストおよびレスポンスを使用するREST APIです。詳細は、APIについてを参照してください。

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm

⇧ ってあるように、実態はPythonらしいですと。

警告

Python 2サポートは2019年12月31日に終了しました。2020年1月より後にリリースされたOCI CLIのバージョンは、Python 2と互換性がなくなります。このときの中断を回避するには、互換性のあるPython 3環境にOCI CLIをインストールしてください。

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm

Python 2 系ではOracle Cloud のCLI(Command Line Interface)は使えなくなりましたと。

なので、どのOS(Operation System)でOracle Cloud のCLI(Command Line Interface)を利用するにしろ、Python 3 以上をインストールしておく必要があるみたい。

その他にも、Oracle Cloud のCLI(Command Line Interface)を利用するには、3つほど要件があって、

  1. Oracle Cloud Infrastructureアカウント
  2. Oracle Cloud Infrastructureアカウント で作成され、必要な権限を付与するポリシーがあるグループに含まれるユーザー。APIをコールする、自分自身、別の人物またはシステムを、このアカウント・ユーザーにすることができます。
  3. APIリクエストの署名に使用されるキー・ペア(公開キーがOracleにアップロードされている)。秘密キーはAPIをコールするユーザーのみが所有する必要があります。CLIの構成を参照してください。

 ノート

キー・ペアなしでCLIを使用する場合は、トークンベースの認証を使用できます。詳細は、CLI用のトークンベースの認証を参照してください。

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm

⇧ ってな具合ですと。

なので、Oracle Cloud のCLI(Command Line Interface)を使って、Oracle Cloud で提供されてるAPI群を利用するには、SSH公開鍵認証が必要なんだと。(トークンベース認証ってのを使えばSSHキーのペアは不要らしい)

 

ちなみに、

docs.cloud.oracle.com

Oracleクライアントを使用しているか(ソフトウェア開発キットとコマンドライン・インタフェースを参照)、または自ら構築したクライアントを使用しているかにかかわらず、次の手順を実行する必要があります:

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm#Other

Oracle Cloud 側で用意されてるCLI を使う場合でも、SSHキー・ペア(秘密鍵と公開鍵のペア)は作る必要があるらしいですと。

 

実際にOracle Cloud のCLI(Command Line Interface)をオンプレミス環境に導入するには

今回は、Windows 10 Home で使えるようにしてみます。

ホストOSのほうでは、以下を実施、

  • Python 3 系をインストール
  • Oracle Cloud のCLI(Command Line Interface)をインストール
  • SSHキーペア(秘密鍵と公開鍵)の作成

Oracle Cloud 側では以下を実施、

  • IAMにユーザーを作成
  • テナンシのOCIDおよびユーザーのOCIDを取得
  • 公開鍵を配置

ってことみたい。 

 

Oracle Cloud が提供するサービスの全量はどうなってる?

その前に、Oracle Cloud の全体像をまとめておられる方がおりましたので、

qiita.com

⇧ 一応、他のクラウドのように「IaaS」「PaaS」「SaaS」の3つは揃ってるみたい。「IaaS」に力を入れてる感じなのかな?

で、Oracle Cloud のアカウント登録時に、「リージョン」の登録をしてますが、おそらく、どの「リージョン」を選択したとしても、だいたいは、

⇧ 上記のようなサービスが利用できるのではないかと。

これも推測になってしまいますが、Oracle Cloud のCLI(Command Line Interface)は、上記の図で言うところのAccess の部分に属するツールなんではないかと。

CLI(Command Line Interface)経由で、Oracle Cloud で提供されてるAPI群にrequestを送り、responseを取得することで、Oracle Cloud で提供されてるサービスを利用するってことですかね。

で、今回は、そのCLI(Command Line Interface)の部分をオンプレミス環境にインストールするってことですかね。

 

脱線しますが、「Oracle Cloud Platform」の一部らしい「Oracle’s API Platform Cloud Service (API PCS) 」っていうものもあるらしく、

www.nikkei.com

ラクルのPaaSとIaaSを統合したクラウドサービス「Oracle Cloud Platform」の一部である「Oracle API Platform Cloud Service」は、セキュアにAPIを管理することができるため、既存資産を適切な権限で安全に公開することが可能です。

日本オラクル、「Oracle Cloud」の新API管理ソリューションを提供開始 :日本経済新聞

blogs.oracle.com

⇧ ってな感じですと。月額制みたいね。

そんでもって、

www.atmarkit.co.jp

Oracleさんの説明用の図だと、「Oracle Cloud Platform」に「SaaS」も入ってるように見えるんだけど、説明だと「IaaSとPaaSのサービス群」って言ってるし、どう解釈すれば良いのかね...

なので、Oracle Cloud の提供するサービスの全量がいまいちよく分からん...

このあたりは、Oracleさんに頑張ってもらって各サービス群のリストっぽいものを作って欲しいところなんですがね...

 

ちなみに、一般的な「IaaS」「PaaS」「SaaS」の担当範囲は、

www.vm-oracle.com

⇧ 上記の図のようになりますと。「Vendor Manages」ってのが、各クラウドが担当する部分になる感じですかね。

なので、基本的には、Oracle Cloud も、「IaaS」「PaaS」「SaaS」は揃っていて、「DaaS」「FaaS」とかもあるんでしょうけど、提供してるサービスの全量が見えにくいよね...

 

CLI(Command Line Interface)を使えるようにしてみる

結局、いまいち、Oracle Cloud で提供してるサービスの全量が分からんのだけど、CLI(Command Line Interface)でOracle Cloud で提供してるAPIにアクセスすれば、CUI(Character User Interface)でOracle Cloud で提供してるサービスを構築できるってことで、オンプレミス環境でCLI(Command Line Interface)を使えるようにしてみますか。


今回は、OSがWindowsの場合でインストールします。

docs.cloud.oracle.com

⇧ 上記を参考。

PowerShell を管理者権限で起動。 以下のコマンドを実施。

Set-ExecutionPolicy RemoteSigned    

f:id:ts0818:20200922155528p:plain

そしたら、Oracle Cloud のCLI(Command Line Interface)のインストーラーを実行するコマンドを実施。Pythonがインストールされてない場合はインストールしてくれるらしい。

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))"

f:id:ts0818:20200922155916p:plain

CLI(Command Line Interface)のインストール場所とか聞かれるけど、デフォルトで指定された場所で良ければ、何も入力せずEnterで。

f:id:ts0818:20200922162611p:plain

⇧ PATHの設定をする場合は「y」で。って言うかパスの設定に失敗してるけど...

ちなみに、CLI(Command Line Interface)のインストールに失敗した場合は、

docs.cloud.oracle.com

⇧ アンインストール方法も載せてくれてる、Oracleさんらしからぬ親切さ。

デフォルトの設定でインストールすると、Windows環境の場合は、

  • %USERPROFILE%/lib
  • %USERPROFILE%/bin

CLI(Command Line Interface)に関する諸々がインストールされるらしい。 

f:id:ts0818:20200922162916p:plain

 

で、案の定、Oracle Cloud のCLI(Command Line Interface)のパスの設定に失敗してたので、環境変数に追加しました。

そして、普通はPowerShellの設定も元に戻しておいたほうが良いみたいなんですが、Oracle Cloud のCLI(Command Line Interface)のインストールの際のドキュメントには記載が無いというね...

solomon-review.net

⇧ 上記サイト様を参考に対処。

Set-ExecutionPolicy Restricted -Scope [対象のスコープ] -Force

f:id:ts0818:20200922165638p:plain

元に戻したけど、PowerShellの起動でエラーが出るようになったんだが...

f:id:ts0818:20200922171341p:plain

まぁ、Oracle Cloud のCLI(Command Line Interface)のバージョンは表示されるようになったので、インストールはできた模様。

 

Oracle Cloudへの接続設定

Oracle Cloud のCLI(Command Line Interface)で、Oracle Cloud に接続するための設定を行います。

事前に、Oracle Cloud の管理画面にログインして、以下の情報を確認しておきます。 

  • 使用してるリージョン
  • Oracle CloudユーザーのOCID
  • Oracle CloudのテナントのOCID

まずは、リージョンはの確認。

管理画面の上部に表示されてます。と言うか、ブラウザのアドレスバーに表示されるかな。

f:id:ts0818:20200922173240p:plain

続いて、ユーザーのOCIDの確認。

アイデンティティ」>「ユーザー」を選択。

f:id:ts0818:20200922173146p:plain

「ユーザーのOCID」を確認。

本当は別にユーザーを追加したほうが良いと思われますが、今回は、Oracle Cloud のアカウント登録で作成されたユーザーを選択。

f:id:ts0818:20200922174244j:plain

「OCID」の「コピー」を選択して、適当なテキストエディタなんかにコピペしときます。

f:id:ts0818:20200922174100j:plain

続いて「テナンシのOCID」の確認。

f:id:ts0818:20200922174232p:plain

「OCID」の「コピー」を選択して、適当なテキストエディタなんかにコピペしときます。 

f:id:ts0818:20200922174539j:plain

情報が確認できたら、Oracle Cloud のCLI(Command Line Interface)の設定を行います。もしかしたら事前にGitが必要かも。と言うのも、

docs.cloud.oracle.com

次のOpenSSLコマンドを使用して、必須のPEMフォーマットでキー・ペアを生成できます。Windowsを使用している場合は、Git Bash for Windowsをインストールし、このツールでコマンドを実行する必要があります。

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm#Other

API署名キーの生成を行ってるみたいなんだけど、Oracle CloudのCLI(Command Line Interface) のセットアップでもAPI署名キーを生成できるっぽいんだけど、セットアップの際に暗黙裡でGit使ってるかが分からん...

自分の環境は既にGitがインストールされてしまっているので、Gitが必要か不要かの確認が取れておりません。

Gitが必要かどうかは分かりませんが、Gitがインストールされてる状態で、以下のコマンドを実行しました。

oci setup config

f:id:ts0818:20200922180232j:plain

コマンドが無事実行されると、Oracle Cloud へ接続するための「秘密鍵」「公開鍵」が作成されてい会に配置されます。

f:id:ts0818:20200922181113p:plain

 

そしたら、Oracle Cloud 側に「公開鍵」を配置する必要があるので、

アイデンティティ」>「ユーザー」で、ユーザーのOCIDを確認したユーザーを選択し、「APIキー」の「公開キーの追加」を選択。

f:id:ts0818:20200922181544j:plain

「公開キー・ファイルの選択」にチェックし、「1つを選択」のリンクをクリック。

f:id:ts0818:20200922181625p:plain

「oci setup config」で作成された「公開鍵」を選択。

f:id:ts0818:20200922181818p:plain

「追加」をクリック。

f:id:ts0818:20200922181848p:plain

Oracle Cloud 側に「公開鍵」が設定されました。

f:id:ts0818:20200922182008j:plain

 

一応、設定できたっぽい。

f:id:ts0818:20200922182511j:plain

なんか、WARNINGが出るのは致し方ない?らしい。

qiita.com

WSLのホームディレクトリの設定場所(デフォルトから変更した場合など)によっては、冒頭に WARNING: が2つ出る場合がある。ファイルのパーミッションが緩いことに起因(両方共777だった)するが、WARNING内に指定のコマンドを実行しても変わらなかったのでこのままにしている。

Oracle Cloud にあるデータベースをコマンドライン(CLI)から起動・停止してみた - Qiita

⇧ 少なくとも、WSL環境(WindowsLinux環境を実現してくれるやつ、ただし完全なLinux環境ではない)では駄目みたいね。

まぁ、これで、Oracle Cloud のサービスをコマンドで制御できるようになったらしい。

とりあえず、WindowsでのOracle Cloud のCLI(Command Line Interface)の使い方を探さねばですが、探してるうちに無料トライアルの期間が終了しそうな気が...

今回はこのへんで。