OCI CLI・OKE・OCIR 利用時に異なるアカウントを切り替えるには
OCI (Oracle Cloud Infrastructure) 環境の参照・操作に使う OCI CLI (oci
コマンド)。
なかなかいないかもしれないが、複数のテナンシーを管理していて、OCI CLI で複数の環境を操作したいという人向けに、設定ファイルの切り替え方を考えたのでご紹介。
目次
- OCI CLI 設定ファイル
- 複数環境の定義を
config
ファイルに書く - OCIR 操作時 :
docker login
コマンドで切り替える - OKE 操作時 : 環境変数
KUBECONFIG
で参照する設定ファイルを切り替える - 以上
OCI CLI 設定ファイル
まず OCI CLI の設定ファイルと、oci
コマンドの仕様から確認。
このあたりを見ると、以下のような方法がある。
--config-file
オプションで設定ファイルを指定すると、その設定ファイルに基づいた環境にアクセスできる--profile
オプションを指定すると、参照している設定ファイル内の「プロファイル名」に基づいた環境にアクセスできる- 環境変数
OCI_CLI_PROFILE
でプロファイル名を指定すると、参照している設定ファイルからそのプロファイル名に基づいた環境を見つけてアクセスする
設定ファイルは、デフォルトでは ~/.oci/config
というパスに置かれる。--config-file
オプション未指定時はこのパスが参照されるワケだ。中身はデフォルトだとこんな感じ。↓
[DEFAULT]
user=ocid1.user.xxxxxx
fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
key_file=/Users/Neo/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.xxxxxx
region=us-ashburn-1
[DEFAULT]
というプロファイル名で定義されているので、--profile
オプションを指定しない場合にこの設定が使われることになる。
また、key_file
キーで確認できるが、秘密鍵ファイルのフルパスも指定されている。ココでは oci_api_key.pem
というファイル名だが、初期設定時に自動生成させると、oci_api_key_public.pem
という公開鍵ファイルも一緒に生成されていると思われる。
複数環境の定義を config
ファイルに書く
設定ファイルの仕様が分かったので、実際に複数の環境を切り替えられるようにしてみよう。
まず、環境別の秘密鍵・公開鍵ファイルを、それぞれリネームして ~/.oci/
ディレクトリ配下に配置する。
~/.oci/
├ dev-oci_api_key.pem
├ dev-oci_api_key_public.pem
├ prd-oci_api_key.pem
└ prd-oci_api_key_public.pem
ファイル名からお察しいただけるかと思うが、dev-
始まりの2つが開発環境のテイ、prd-
始まりの2つが本番環境のテイで配置した、秘密鍵と公開鍵ファイルだ。
そして ~/.oci/config
ファイルの内容は以下のように記述する。
[DEV]
user=ocid1.user.xxxxxx
fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
key_file=/Users/Neo/.oci/dev-oci_api_key.pem
tenancy=ocid1.tenancy.xxxxxx
region=us-ashburn-1
[PRD]
user=ocid1.user.yyyyyy
fingerprint=yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy
key_file=/Users/Neo/.oci/prd-oci_api_key.pem
tenancy=ocid1.tenancy.yyyyyy
region=us-ashburn-1
それぞれの環境向けの設定ファイルをマージし、[DEFAULT]
を使用せず、環境別のプロファイル名を付けた。key_file
キーの値の変更も忘れずに。
デフォルトのプロファイルがなくなったので、このままでは oci
コマンドを実行しても接続先が分からない。そこで、以下のようなエイリアスを用意する。
alias oci-dev='export OCI_CLI_PROFILE=DEV'
alias oci-prd='export OCI_CLI_PROFILE=PRD'
見れば分かるとおり、環境変数 OCI_CLI_PROFILE
を書き換えて、~/.oci/config
ファイルのどのプロファイルを見れば良いか知らせているだけ。
開発環境のテナンシーを触りたければ、$ oci-dev
を叩いてから $ oci network ...
などとコマンドを叩けば良い。
デフォルトで接続されるテナンシーを定義しなかったので、操作対象の環境を間違えるようなミスが減らせるかな、と思う。
OCIR 操作時 : docker login
コマンドで切り替える
OCIR (OCI におけるプライベート Docker レジストリ) を使っている場合は、docker login
コマンドで接続先環境を切り替えるしかない。コチラも以前エイリアスを紹介した。
OKE 操作時 : 環境変数 KUBECONFIG
で参照する設定ファイルを切り替える
OKE (Kubernetes のマネージドサービス) を使っている場合は、環境変数 KUBECONFIG
の値を変更し、参照する設定ファイルを切り替えることで複数環境に対応しよう。コチラも以前やり方を紹介した。
以上
OCI・OCIR・OKE を使う際は、oci
・docker
・kubectl
コマンドを多用すると思うので、複数のテナンシーを持っている人はこうした方法で環境切り替えを楽にしてみてはどうだろうか。