OCI CLIのインストールと認証から、Resource Managerで構成を再現するまで
※当ページにはAmazonアソシエイト等の広告リンクを含みます。
公式ドキュメントで検証最終検証 2026-11-01編集部出典 19件
当ページの解説・制限値・構成図は、一般公開されている Oracle Cloud Infrastructure (OCI) 公式ドキュメント、Oracle Cloud Price List、および Oracle University 公開試験ガイドを一次根拠として検証し、独自のSVG視覚図解として作成しています。
- Quickstart (OCI CLI)
- Configuring the CLI
- Required Keys and OCIDs
- Token-based Authentication for the CLI
- Using the CLI
- CLI Environment Variables
- OCI CLI Command Reference: stack create
- OCI CLI Command Reference: create-from-compartment
- OCI CLI Command Reference: create-plan-job
- OCI CLI Command Reference: create-apply-job
- OCI CLI Command Reference: detect-drift
- Overview of Resource Manager
- Resource Manager and Terraform
- Terraform Configurations for Resource Manager
- Supported Terraform Versions
- Securing Resource Manager
- oci_database_autonomous_database (Terraform provider)
- Manage sensitive data (Terraform)
- Managing AWS resources as a single unit with CloudFormation stacks
OCI CLIをインストールする
使っているOSに合わせて、次のコマンドで入れます。いずれも公式の手順にあるものです(2026-11-01確認)。
# macOS(Homebrew)
brew update && brew install oci-cli
# Linux(インストーラ)
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
# Oracle Linux 9
sudo dnf -y install oraclelinux-developer-release-el9
sudo dnf install python39-oci-cli
Windows は、管理者として開いた PowerShell で実行します。
Set-ExecutionPolicy RemoteSigned
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1 -OutFile install.ps1
./install.ps1 -AcceptAllDefaults
入ったら、バージョンを確かめます。
oci --version
認証を設定する
CLIがOCIのAPIを呼ぶには、誰としての呼び出しかを示す必要があります。題材で使うのは次の3つです。
- APIキー:既定の方式です。公開鍵をユーザーに登録し、秘密鍵で署名します。
- セッショントークン:ブラウザでログインして一時的なトークンを受け取ります。各コマンドに
--auth security_tokenを付けます。 - インスタンスプリンシパル:Compute 自身の権限で呼びます。各コマンドに
--auth instance_principalを付けます。
APIキーを作る
いちばん基本の方式です。
oci setup configを実行する。対話形式で設定ファイルとキーのペアを作れます。- Console の Profile メニューから User settings を開き、Token and keys で Add API Key を選ぶ。
- Paste a public key で公開鍵を貼り付け、Add を選ぶ。
- 確認のコマンドを実行する。
oci setup config
oci os ns get
設定は ~/.oci/config に入ります。必要な項目は user、fingerprint、key_file、tenancy、region です。東京なら region=ap-tokyo-1 です。行の途中のコメントには対応していないので、コメントは別の行に書きます。
一時的なトークンを使う
手元に長く使う鍵を置きたくなければ、セッショントークンが使えます。
oci session authenticate
oci session validate --profile <profile_name> --auth security_token
oci os ns get --profile <profile_name> --auth security_token
ブラウザでログインするとトークンが保存されます。既定の有効期間は1時間で、oci session refresh --profile <profile_name> で更新できます。更新できるのは最長24時間までです。
Compute ではキーを置かない
Compute の中でCLIを使うときは、キーのファイルを置かず、インスタンスプリンシパルを使います。
oci os ns get --auth instance_principal
環境変数 OCI_CLI_AUTH=instance_principal でも指定できます。事前に、その Compute を含む動的グループとポリシーが必要です。考え方はコンパートメントとIAMの記事で確認できます。
よく使うコマンド
書き方は oci <サービス> <種類> <操作> <オプション> です。まずは読むだけのコマンドで慣れましょう。$C にはコンパートメントのOCIDを入れます。
# Object Storage の名前空間を見る(疎通確認にも使える)
oci os ns get
# リージョンの一覧を表で見る
oci iam region list --output table
# コンパートメントの一覧
oci iam compartment list --all --query "data[].[name, \"lifecycle-state\"]"
# VCNとサブネット
oci network vcn list --compartment-id $C
oci network subnet list --compartment-id $C --vcn-id $VCN_ID
# Compute の名前と状態を表で見る
oci compute instance list --compartment-id $C \
--query "data[].{Name:\"display-name\", State:\"lifecycle-state\"}" --output table
# アラームの一覧
oci monitoring alarm list --compartment-id $C
表1:覚えておくと便利なオプション
| オプション | 使いどころ |
|---|---|
–help | 使えるオプションを調べる |
–query | JMESPath で必要な項目だけ取り出す |
–output table | 表で表示する |
–all | 全ページの結果を取る |
–profile | 設定ファイルのプロファイルを切り替える |
–generate-full-command-json-input | 引数の雛形をJSONで出す。–from-json で実行する |
Resource Manager と Terraform の関係
Resource Manager は、OCIの中で Terraform を実行するサービスです。構成そのものは Terraform で書きます。自分のPCで Terraform を動かす場合との違いは、state の扱いです。
表2:手元の Terraform と Resource Manager の違い
| 項目 | 手元で実行 | Resource Manager |
|---|---|---|
| 構成 | Terraform(.tf) | 同じ。ファイルは zip や Git などで渡す |
| state | 保管先と共有を自分で決める | Resource Manager が生成、更新、保管する |
| 同時実行 | ロックを自分で用意する | 1つのスタックで動くジョブは1つ |
| 実行 | terraform plan、apply | Plan、Apply、Destroy の各ジョブ |
| 認証 | provider に設定する | 構成に認証情報を書かない |
用語は2つだけ覚えれば読めます。スタックは、1つの構成に対応するリソースのまとまりです。ジョブは、スタックに対する実行の1回分です。AWS の CloudFormation も、リソースをスタックというまとまりで扱います。ただし、OCI では CloudFormation のテンプレートではなく Terraform で書きます。
- 渡す:構成をスタックに登録します。ローカルの zip のほか、Git や Object Storage からも作れます。
- 計画:Plan ジョブが作る内容を示します。ログを読み、意図しない削除や置き換えがないかを見ます。
- 適用:確認した Plan を指定して Apply ジョブを実行します。
- 反映:リソースが作られ、state が更新されます。1つのスタックで同時に動くジョブは1つです。
CLIで同じ流れを実行すると、次のようになります。
# 1. スタックを作る
stack_id=$(oci resource-manager stack create \
--compartment-id $NETWORK_C \
--config-source network.zip \
--terraform-version 1.5.x \
--variables "{\"region\":\"ap-tokyo-1\",\"compartment_ocid\":\"$NETWORK_C\"}" \
--query data.id --raw-output)
# 2. Plan を実行し、ログを読む
plan_id=$(oci resource-manager job create-plan-job \
--stack-id $stack_id \
--wait-for-state SUCCEEDED \
--query data.id --raw-output)
oci resource-manager job get-job-logs-content --job-id $plan_id
# 3. 確認した Plan を適用する
oci resource-manager job create-apply-job \
--stack-id $stack_id \
--execution-plan-strategy FROM_PLAN_JOB_ID \
--execution-plan-job-id $plan_id
# あとで:画面の手作業で変わった部分がないか調べる
oci resource-manager stack detect-drift --stack-id $stack_id
題材の構成を再現する考え方
経費申請アプリの全部を1つのファイルに書くと、小さな変更でも全体の Plan を読むことになります。変更の頻度と、壊れたときの影響で分けます。次の分け方は編集部の例です。
表3:題材の構成をスタックに分ける例(上から順に作る)
| 順 | スタック | 主な Terraform リソース | 変更の頻度 |
|---|---|---|---|
| 1 | 基盤 | oci_identity_compartment、oci_identity_policy、oci_budget_budget | まれ |
| 2 | network | oci_core_vcn、oci_core_subnet、oci_core_internet_gateway、oci_core_nat_gateway、oci_core_service_gateway、oci_core_route_table、oci_core_network_security_group | まれ |
| 3 | security | oci_kms_vault、oci_bastion_bastion | まれ |
| 4 | app | oci_core_instance、oci_database_autonomous_database、oci_load_balancer_load_balancer、oci_waf_web_app_firewall、oci_objectstorage_bucket、oci_ons_notification_topic、oci_ons_subscription、oci_monitoring_alarm | 多い |
BastionのIPを使う受信ルールは、network ではなく Bastion と同じ security スタックに書きます。oci_core_network_security_group_security_rule でNSGへ足すと、作る順番が循環しません。
DBは変更の多い app スタックにあるので、設定の誤りや置き換えで失わないよう、データ用のスタックに分けるか、lifecycle { prevent_destroy = true } を付けることも検討します。Destroy を禁止するポリシーだけでは、Apply の置き換えは防げません。
前のスタックで作ったものの OCID は、次のスタックの変数として渡します。network の構成は、たとえば次のように書き始めます。Resource Manager では provider に必要なのは region だけです。
variable "region" {}
variable "compartment_ocid" {}
provider "oci" {
region = var.region
}
resource "oci_core_vcn" "main" {
compartment_id = var.compartment_ocid
cidr_blocks = ["10.0.0.0/16"]
display_name = "vcn-expense"
dns_label = "expense"
}
resource "oci_core_nat_gateway" "main" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.main.id
display_name = "nat-expense"
}
resource "oci_core_route_table" "private_app" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.main.id
display_name = "rt-private-app"
route_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
network_entity_id = oci_core_nat_gateway.main.id
}
}
resource "oci_core_subnet" "private_app" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.main.id
cidr_block = "10.0.1.0/24"
display_name = "private-app"
dns_label = "app"
route_table_id = oci_core_route_table.private_app.id
prohibit_public_ip_on_vnic = true
}
これは書き出しです。Service Gateway のルートやほかのサブネットは同じ形で足します。
コンソールでスタックを作ると、region と compartment_ocid は定義しておくだけで値が入ります。CLIの例では --variables で明示します。.tfstate や .terraform は構成に含めません。
秘密情報をコードと state に残さない
ここがいちばん注意するところです。state にはパスワードなどが入ることがあり、read orm-jobs の権限があれば読めます。ジョブの変数は監査ログに平文で残ることもあります。Terraform の sensitive も、画面の表示を隠すだけで、state には保存されます。
対策は次のとおりです。
- パスワードは Vault のシークレットに置き、Terraform にはシークレットのOCIDだけを渡す。シークレットの作成自体はコードの外で行うと、中身が state に入りません。
- Autonomous のリソースでは、
admin_passwordの代わりにsecret_idを使う。作成する人には対象シークレットのread secret-bundlesが要ります。パスワードは12〜30文字で、大文字、小文字、数字を各1文字以上含めます。 orm-jobsの読み取り権限を、必要な人に絞る。
Destroy を誰にでも許さない
スタックで作ったリソースは、Destroy ジョブでまとめて解放できます。検証には便利ですが、本番では事故のもとです。公式の例のように、Plan と Apply だけを許可できます。
Allow group <group_name> to use orm-stacks in tenancy
Allow group <group_name> to read orm-jobs in tenancy
Allow group <group_name> to manage orm-jobs in tenancy where any {target.job.operation = 'PLAN', target.job.operation = 'APPLY'}
次に読むページ
よくある質問(FAQ)
- OCI CLIのキーは、ComputeへのSSH鍵と同じものを使えますか?
- 使えません。APIキーはPEM形式で、SSH用の鍵とは別のものです。公開鍵をユーザーに登録し、秘密鍵は手元で管理します。
- Resource Managerを使うとTerraformは要らなくなりますか?
- 構成はTerraformで書きます。Resource Managerは、その構成の実行、stateの保管とロック、ジョブの履歴を引き受けるサービスです。手元にTerraformを入れなくても、スタックとジョブで実行できます。
- データベースのパスワードはTerraformの変数に入れてよいですか?
- 避けます。変数の値はstateや監査ログから読める場合があります。Vaultのシークレットに保管し、構成にはシークレットのOCIDだけを書きます。Autonomous のリソースでは secret_id を使えます。