結論
OCI(Oracle Cloud Infrastructure)のAutonomous Database(ADB)をVCN内プライベートエンドポイント構成に切り替える際、以下3つのエラーに遭遇しました。
| # | エラー | 原因 | 対処 |
|---|---|---|---|
| 1 | 403 Forbidden: This feature is not supported in an Always Free Autonomous AI Database. |
Always Free tierはVCN内プライベートエンドポイントに非対応 |
is_free_tier = falseにする |
| 2 | Operation UPDATE_TENANT_DATABASE_PRIVATE_ENDPOINT is disabled. |
ADBリソース単体を有償にしても、テナンシ自体がPay As You Go/Universal Credits契約にアップグレードされていないとプライベートエンドポイント関連操作がブロックされる | OCIコンソールでテナンシを課金アカウントへアップグレード(Terraformの外側の操作) |
| 3 | 400 InvalidParameter: Creating new Autonomous AI Databases using the OCPU compute model is not supported. Use the ECPU compute model and try. |
新規作成ではcpu_core_count(OCPUモデル)が使えない |
compute_model = "ECPU" + compute_countに変更 |
いずれも「ADBリソースの設定」と「テナンシ・APIの仕様」が絡み合っており、Terraformのエラーメッセージだけでは1と2の切り分けがつきにくかったため、原因調査の過程を含めて記録します。
動作環境
| 項目 | 値 |
|---|---|
| OCI Terraform Provider | 8.22.0(2026-07-08リリース) |
| Autonomous Database バージョン | 26ai |
| リージョン | ap-tokyo-1 |
| ワークロード | OLTP(ATP) |
| 検証日 | 2026-07-18〜2026-07-20 |
前提: やりたかったこと
OKE(Kubernetes)のWorker NodeからADBに接続するにあたり、プロジェクト内の他リソース(Load Balancer、DevOps Deploy Pipelineなど)と同じく、アクセス制御はNSG(Network Security Group)のみで行う方針にしていました。これを実現するには、ADBをVCN内のプライベートサブネットに配置する必要があります。
resource "oci_database_autonomous_database" "this" {
compartment_id = var.compartment_id
db_name = var.adb_db_name
display_name = var.adb_display_name
db_workload = "OLTP"
is_free_tier = true # 最初はコストを抑えるためAlways Freeにしていた
db_version = "26ai"
cpu_core_count = 1
data_storage_size_in_gb = 20
admin_password = random_password.adb_admin.result
subnet_id = oci_core_subnet.adb.id
nsg_ids = [oci_core_network_security_group.adb.id]
private_endpoint_label = "oketestadb"
}
エラー1: Always Free tierはプライベートエンドポイント非対応
上記の構成でapplyすると、以下のエラーとなりました。
│ Error: 403-Forbidden, This feature is not supported in an Always Free Autonomous AI Database. Upgrade this database to a paid database to use this feature.
│ Operation Name: CreateAutonomousDatabase
これはOracle公式ドキュメントに明記されている制約でした。
Always Free Autonomous AI Databases cannot be provisioned as a private endpoint and cannot reside within a Virtual Cloud Network (VCN).
— Always Free Autonomous AI Database
「Always Freeで使う」か「VCN内プライベートエンドポイントに置く」かは二者択一で、両立できません。今回はNSGによるアクセス制御を優先したいので、有償tierへの切り替えを選びました(is_free_tier = false)。
エラー2: リソースを有償にしても、テナンシが対応していないと拒否される
次は、is_free_tier = falseにしてapplyしましたが、再度エラーとなりました。今度はエラーメッセージが1とは異なります。
│ Error: 400-InternalError, ... entity: database, action: UPDATED.
│ Message: Operation UPDATE_TENANT_DATABASE_PRIVATE_ENDPOINT is disabled.
│ Suggestion: Please retry or contact support for help with service: Database Autonomous
UPDATE_TENANT_DATABASE_PRIVATE_ENDPOINTという操作名で、is_free_tierやsubnet_idといった見覚えのあるパラメータ名がエラーに出てこないため、最初は原因の見当がつきませんでした。
調査の結果、これはADBリソース単体の設定とは別次元の、テナンシ全体に対する制約だと分かりました。
OCI Private Endpoint requires a paid OCI account, either as a pay-as-you-go or Universal Credits contract.
— Private Endpoint Supported Services(Oracle公式ページ、脚注)
つまり、ADBリソース側でis_free_tier = falseにしても、テナンシ自体がAlways Free/Free Trialのままアップグレードされていない場合、プライベートエンドポイント関連の操作がテナンシレベルでブロックされるという仕組みです。これはTerraformの設定を直しても解決できず、OCIコンソールでテナンシを課金アカウントへアップグレードする(支払い方法を登録する)という、Terraformの外側でのアカウント操作が必要でした。
テナンシをアップグレードした後、あらためてapplyしています。
補足: 空のテスト用DBに対して、tier変更とネットワーク設定(subnet_id/nsg_ids)を同時にUpdateAutonomousDatabaseで反映しようとすると、同時更新の組み合わせによっては別のエラーになるケースもありました。作成直後でデータが入っていないDBであれば、無理にin-place更新を追わずterraform apply -replace="oci_database_autonomous_database.this"で作り直す方が確実です。
エラー3: 新規作成ではOCPUモデルが使えない
テナンシのアップグレード後、-replaceで作り直したところ、3つ目のエラーが出ました。
│ Error: 400-InvalidParameter, Operation failed. Creating new Autonomous AI Databases using the OCPU compute model is not supported. Use the ECPU compute model and try.
│ Operation Name: CreateAutonomousDatabase
cpu_core_count(OCPU方式のコンピュートモデル)を使った新規作成は現在サポートされておらず、compute_model/compute_count(ECPU方式)への切り替えが必須とのことです。Oracle公式ドキュメントでも、OCPUはレガシーな課金指標として明示的に廃止(retired)されたことが述べられています。
OCPU is a legacy billing metric and has been retired on Autonomous AI Database. ECPUs are the replacement billing metric for all new and existing Autonomous AI Database deployments.
— Compute Models in Autonomous AI Database
Terraformコードadb.tfを以下のように修正しました。
resource "oci_database_autonomous_database" "this" {
compartment_id = var.compartment_id
db_name = var.adb_db_name
display_name = var.adb_display_name
db_workload = "OLTP"
is_free_tier = false
license_model = "LICENSE_INCLUDED"
db_version = "26ai"
compute_model = "ECPU"
# ECPUはエラスティックリソースプール外では最小2
compute_count = 2
data_storage_size_in_gb = 20
admin_password = random_password.adb_admin.result
subnet_id = oci_core_subnet.adb.id
nsg_ids = [oci_core_network_security_group.adb.id]
private_endpoint_label = "oketestadb"
lifecycle {
ignore_changes = [admin_password]
}
}
これでapplyが成功し、VCN内プライベートエンドポイント経由でアクセスする構成のADBが作成できました。
まとめ
- OCIのADBをAlways Freeから有償+プライベートエンドポイントに切り替える際は、ADBリソース単体の設定変更だけでは足りず、テナンシ自体の課金契約アップグレードが別途必要になる場合がある
-
UPDATE_TENANT_DATABASE_PRIVATE_ENDPOINT is disabledのような、一見ADBリソースの属性と無関係に見えるエラーは、テナンシレベルの制約の可能性もある - 新規作成時は
cpu_core_count(OCPU)ではなくcompute_model = "ECPU"+compute_countを使う(既存DBのOCPU→ECPU移行はまた別の話で、本記事では扱っていません) - これから同じ構成(プライベートADB)を組む場合は、最初から「テナンシを課金アカウントにアップグレード済み」「
compute_model = "ECPU"」を前提にしておけば、上記3つのエラーは全て回避できる
同じ構成でハマっている方の参考になれば幸いです。