Corredor

ウェブ、プログラミングの勉強メモ。

OCI CLI・OKE・OCIR 利用時に異なるアカウントを切り替えるには

OCI (Oracle Cloud Infrastructure) 環境の参照・操作に使う OCI CLI (oci コマンド)。

なかなかいないかもしれないが、複数のテナンシーを管理していて、OCI CLI で複数の環境を操作したいという人向けに、設定ファイルの切り替え方を考えたのでご紹介。

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 コマンドで接続先環境を切り替えるしかない。コチラも以前エイリアスを紹介した。

neos21.hatenablog.com

OKE 操作時 : 環境変数 KUBECONFIG で参照する設定ファイルを切り替える

OKE (Kubernetes のマネージドサービス) を使っている場合は、環境変数 KUBECONFIG の値を変更し、参照する設定ファイルを切り替えることで複数環境に対応しよう。コチラも以前やり方を紹介した。

neos21.hatenablog.com

以上

OCI・OCIR・OKE を使う際は、ocidockerkubectl コマンドを多用すると思うので、複数のテナンシーを持っている人はこうした方法で環境切り替えを楽にしてみてはどうだろうか。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版