Cloud Service
OCI Resource Manager
Terraform をマネージドで実行し、OCI インフラをコードで宣言的にプロビジョニングする IaC サービス。状態管理やドリフト検出も内蔵し、AWS の CloudFormation に相当する。
- 1.Terraform をマネージド実行する OCI 標準の IaC サービス。
- 2.スタック単位で plan/apply/destroy し状態とドリフトを内蔵管理。
- 3.リソースプリンシパルで認証し鍵レスかつ最小権限で運用する。
解決する課題
クラウドのインフラを手作業のクリック操作で構築・変更する運用は、再現性がなく、構成のばらつきやヒューマンエラーを生みます。OCI Resource Manager は Terraform をマネージド環境で実行する IaC(Infrastructure as Code) により、これらの課題を解決します。
- インフラ構成をコードで宣言的に管理し、レビュー・バージョン管理・再利用したい
- 開発/検証/本番など同一構成の環境を何度でも再現したい
- 手作業の構築をなくし、変更前に影響範囲(plan)を確認してから適用したい
- Terraform の state(状態ファイル)やロックを自前で管理する手間をなくしたい
- 不要になった環境を**まとめて削除(destroy)**してコストを抑えたい
AWS で言えば CloudFormation に相当する位置づけですが、独自のテンプレート言語ではなく**標準の Terraform(HCL)**を使う点が大きく異なります。
主要概念と用語
- スタック(Stack): Terraform 構成(HCL ファイル一式)と変数、状態をまとめた Resource Manager の管理単位。CloudFormation の「スタック」に近い概念
- 構成(Configuration): スタックに含まれる Terraform コード本体。ZIP アップロード、Object Storage、Git リポジトリ(ソース管理)、テンプレートなどから取り込める
- ジョブ(Job): スタックに対して実行する操作の単位。plan(変更計画の算出)/apply(適用)/destroy(削除)/import(既存リソースの取り込み) などがある
- 状態(State): Terraform が管理する現実のリソースとコードの対応表。Resource Manager が自動で保管・ロックし、利用者は state ファイルを直接扱わなくてよい
- ドリフト検出(Drift Detection): state とクラウドの実体との乖離(手作業変更など)を検出する機能
- 変数(Variables): HCL の入力変数。コンソールや API で値を与える。機密値は Vault(Secrets) から参照させる
- プライベートエンドポイント(Private Endpoint): VCN 内の非公開リソース(プライベートな Git や Kubernetes など)へ Resource Manager から到達するための接続経路
- テンプレート(Template): よくある構成を雛形化したもの。Oracle 提供のものや自作のものをスタック作成の起点にできる
仕様・制限・クォータ
- 実行エンジンは標準の Terraform で、OCI Terraform プロバイダーを介してリソースを操作する。HCL の知識がそのまま使える
- state はサービス側でマネージドに保管・ロックされる。S3 + DynamoDB のようなバックエンドを自前で組む必要がない
- ジョブは plan / apply / destroy / import が基本。apply は通常直前の plan の結果に基づいて適用する(意図しない変更の抑止)
- 構成の取り込み元は ZIP・Object Storage・Git(ソース管理)・テンプレートなどに対応する
- 1 つの apply で扱えるリソース数やジョブの実行時間には実務上の上限があり、巨大な構成はスタックを分割するのが定石(Terraform 一般のベストプラクティスと同じ)
- スタック・ジョブはコンパートメントとリージョン単位で管理され、テナンシ/リージョンのサービス制限が掛かる。上限引き上げはサービスリクエストで申請する
- Resource Manager 上で動く Terraform のバージョンは選択肢から指定する形で、利用可能なバージョンは更新されていく(特定バージョンへの固定はコード側の
required_versionでも担保する)
Resource Manager で動くのは標準の Terraform です。ローカルの terraform CLI で書いた HCL をほぼそのまま持ち込めますし、逆に Resource Manager のスタックをローカルで検証することもできます。違いは主に実行環境と state 管理がマネージドになる点です。
内部の仕組み
スタックを作成すると、Terraform 構成・変数・state が Resource Manager に保持されます。ジョブを起動すると、サービスがマネージドな実行環境で Terraform を起動し、OCI プロバイダー経由で API を呼び出してリソースを作成・変更・削除します。
- plan ジョブは、現在の state と HCL の差分からこれから起きる変更(追加・変更・削除)を算出し、適用はせず計画だけを返す
- apply ジョブは計画に従って実際に API を呼び、完了後に state を自動更新する。実行中は state がロックされ、同時実行による破壊が防がれる
- destroy ジョブは state が管理するリソースをまとめて削除する。環境のクリーンアップに使う
- ドリフト検出は、state とクラウドの実体を突き合わせ、手作業で変更された差分を一覧化する。検出後はコードを直すか apply で収束させる
- 認証はリソースプリンシパルを使え、API 署名キーを構成に埋め込まずに OCI を操作できる
apply は state とコードの差分を実体に反映します。削除(destroy)や置換(replace)が混ざっていないか plan の出力を必ず確認してください。特に「変更不可属性の更新」は**リソースの再作成(=一時的な消失)**を招くことがあります。
設計パターン / ベストプラクティス
- 環境ごとにスタックを分割: dev / stg / prod を別スタックにし、変数で差分を吸収する。本番の state を取り違える事故を防ぐ
- Git ソース管理と連携: 構成を Git で管理し、Resource Manager のスタックを Git に紐づけてコードレビュー → plan → apply のフローを回す
- モジュール化と再利用: 共通構成を Terraform モジュールに切り出し、複数スタックで再利用する
- 機密値は Vault から: パスワードや API キーを HCL や変数に直書きせず、Vault(Secrets) から参照する
- 大きな構成は分割: ネットワーク基盤・共有サービス・アプリ層などレイヤごとにスタックを分け、爆発半径と実行時間を抑える
- 既存リソースは import で取り込む: 手作業で作った既存リソースを import で state に取り込み、以後コード管理に移行する
- destroy はガードを付ける: 本番スタックの destroy は権限分離・承認フローで保護し、誤実行を防ぐ
運用・監視
- ジョブの実行履歴(plan / apply / destroy のログと結果)はスタックから参照でき、失敗時はログでエラー箇所を特定する
- 「誰がいつスタックを操作したか」は OCI Audit で追跡する。IaC 操作の監査証跡として重要
- ドリフト検出を定期的に実行し、手作業変更を検知してコードへ反映(または是正)する運用を回す
- ジョブの開始・完了を Events(イベント)で受け、Notifications へ通知したり Functions で後処理を起動するとパイプライン化できる
- state ロック中の同時実行はサービスが防ぐが、人による並行 apply の運用ルール(承認・ブランチ戦略)はチームで定める
- 失敗ジョブはコード修正後に再実行する。部分適用後の失敗では state とコードの差分を plan で確認してから収束させる
コスト
Resource Manager サービス自体の利用料は基本的にかからず、課金されるのは実際にプロビジョニングした OCI リソース(Compute・Storage・Database など)です。コスト最適化の本質は「不要な環境を残さないこと」にあります。
| 費目 | 考え方 | 最適化のヒント |
|---|---|---|
| Resource Manager | スタック・ジョブの実行自体は基本的に追加料金なし | ツール費用を気にせず IaC を徹底できる |
| 作成したリソース | Compute や DB など実体の従量課金が発生 | 検証環境は使い終えたら destroy で確実に消す |
| state 管理 | マネージドで別途バックエンド費用が不要 | 自前の state 用ストレージ/ロックを持たなくてよい |
| 放置リソース | 削除し忘れた環境が課金され続ける | ドリフト検出と destroy で残骸を定期清掃する |
セキュリティ
- リソースプリンシパルで認証し、API 署名キーや認証情報を構成・変数に埋め込まない(鍵レス運用)。AWS の IAM ロール相当の考え方
- IAM ポリシー+コンパートメントで、スタックの管理権限と Terraform が操作できるリソース範囲を最小権限に絞る
- 機密の入力値は変数に直書きせず Vault(Secrets) から取得する。state にも秘密情報が残り得る点に注意する
- プライベートな Git やプライベート Kubernetes へ到達する場合はプライベートエンドポイントを使い、経路を VCN 内に閉じる
- 本番スタックの destroy や apply は権限分離・承認フローで保護し、誤操作・内部不正による一括削除を防ぐ
Terraform に与えるポリシーを「テナンシ全体を manage」のように広く付けすぎるのは危険です。スタックが必要とするコンパートメントとリソース種別だけに権限を限定し、機密値は変数や HCL ではなく Vault(Secrets) から渡してください。state に平文の秘密が残る構成も避けます。
Well-Architected の観点
- 運用上の優秀性(Operational Excellence): 手作業を排し、すべての構成変更をコードのレビュー → plan → apply という再現可能な手順に乗せる。変更履歴は Git と Audit で追跡できる
- 信頼性(Reliability): 同一構成を何度でも再現でき、災害復旧時の再構築や環境のスケールアウトが容易。state ロックとドリフト検出により構成の整合性を保つ
- セキュリティ(Security): リソースプリンシパルによる鍵レス認証と最小権限ポリシーで、認証情報の漏洩リスクと過剰権限を抑える
- コスト最適化(Cost Optimization): 検証環境を destroy で一括撤去でき、放置による無駄な課金を減らせる
試験で問われるポイント
- OCI Resource Manager は Terraform をマネージド実行する IaC サービスで、AWS の CloudFormation に相当する。ただし独自テンプレートではなく標準 Terraform(HCL) を使う点が要点
- スタック(Stack) が管理単位で、plan / apply / destroy のジョブを実行する。apply は通常 plan の結果に基づいて適用する
- state はサービス側でマネージドに保管・ロックされ、自前で state バックエンドやロック機構を用意しなくてよい
- ドリフト検出で手作業変更との乖離を検知できる
- 認証はリソースプリンシパルで行え、鍵を構成に埋め込まずに OCI を操作できる
- 構成は ZIP・Object Storage・Git・テンプレートから取り込め、機密値は Vault(Secrets) を使う
- Resource Manager 自体の利用は基本無料で、課金は作成したリソース側に発生する
関連サービス・比較
OCI Resource Manager と、相当する AWS のサービスである CloudFormation を比較します。最大の違いは、テンプレート言語が独自仕様か標準 Terraform かという点です。
| 観点 | OCI Resource Manager | AWS CloudFormation |
|---|---|---|
| 位置づけ | マネージド Terraform による IaC | 独自テンプレートによる IaC |
| 記述言語 | 標準 Terraform(HCL) | CloudFormation テンプレート(JSON/YAML) |
| 管理単位 | スタック | スタック |
| 変更確認 | plan ジョブで事前に差分を算出 | Change Set で事前差分を確認 |
| 状態管理 | state をマネージドに保管・ロック | サービスが状態を内部管理 |
| ドリフト検出 | あり | あり |
| 認証 | リソースプリンシパル(鍵レス) | IAM ロール |
| マルチクラウド | Terraform なので他クラウドも記述可 | 原則 AWS 専用 |
なお OCI 内では、構成変更の通知連携に Events / Notifications、機密値の保管に Vault(Secrets)、操作監査に Audit を組み合わせて使います。
ハンズオン / CLI例
oci resource-manager コマンドで、スタックの作成からジョブ実行までを行えます。次は Object Storage 上の構成 ZIP からスタックを作り、plan と apply を実行する例です。
# 1) Terraform 構成(ZIP)からスタックを作成する
# rm-stack 用の権限とリソースプリンシパルでの実行を前提にする
oci resource-manager stack create \
--compartment-id "$COMPARTMENT_OCID" \
--display-name "network-baseline" \
--description "VCN and subnets via Terraform" \
--config-source ./network-baseline.zip \
--variables '{"region":"ap-tokyo-1","vcn_cidr":"10.0.0.0/16"}'
# 2) 変更計画(plan)ジョブを実行し、これから起きる差分を確認する
oci resource-manager job create-plan-job \
--stack-id "$STACK_OCID"
# 3) plan の内容を確認してから apply ジョブを実行する
# apply-job-plan-resolution で「どの plan を適用するか」を指定できる
oci resource-manager job create-apply-job \
--stack-id "$STACK_OCID" \
--apply-job-plan-resolution '{"isUseLatestJobId": true}'
# 4) ジョブの実行ログを取得して結果を確認する
oci resource-manager job get-job-logs \
--job-id "$JOB_OCID" --output table
# 5) 検証環境を片付ける(destroy)。本番では権限分離・承認フローで保護する
oci resource-manager job create-destroy-job \
--stack-id "$STACK_OCID"
OCI Service
OCI Resource Managerを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
管理・ガバナンス
比較で見る軸
クラウド: OCI / カテゴリ: 管理・ガバナンス / 難易度: intermediate
導入後に効く点
スタック単位で plan/apply/destroy し状態とドリフトを内蔵管理。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- 管理・ガバナンス
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「管理・ガバナンス / operational」に近いか確認する。
- 強みである「Terraform をマネージド実行する OCI 標準の IaC サービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。