For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

OpenAI リソースのインポートと構成ドリフトの解消

既存のリソースを Terraform の管理下に置き、構成ドリフトを検出します。

既存の OpenAI リソースは、作り直さずにインポートします。安全に Terraform の管理下に置くには、まずリモートリソースの設定に合わせて構成を記述します。インポートの内容をプランで確認してから適用し、予定している更新に進む前に、次のプランで変更がないことを確認します。

インポートブロックを使用するには、Terraform 1.5 以降が必要です。

リソースの宣言とインポート

既存の各リソースを現在の設定に合わせて宣言し、プロバイダーのリファレンスに記載されている ID 形式で import ブロックを追加します。

resource "openai_project" "existing" {
  name = "existing-project"
}

resource "openai_group" "existing" {
  name = "existing-group"
}

resource "openai_project_service_account" "existing" {
  project_id = openai_project.existing.project_id
  name       = "existing-service-account"
}

import {
  to = openai_project.existing
  id = "proj_123"
}

import {
  to = openai_group.existing
  id = "group_123"
}

import {
  to = openai_project_service_account.existing
  id = "proj_123/svc_acct_123"
}

プランを保存し、インポートの内容を確認します。

terraform plan -out=tfplan
terraform show tfplan

プランにインポートが表示され、リモートリソースの更新が含まれていないことを確認します。更新が含まれている場合は、先に構成を現在の設定に合わせます。保存したプランを適用してインポートを実行し、もう一度プランを作成します。

terraform apply tfplan
terraform plan

2 回目のプランで変更がないことを確認します。リソースをどのように Terraform の管理下に置いたかを記録するために、インポートブロックを構成に残しておくことができます。

代表的なインポート ID の形式は次のとおりです。

リソース インポート ID の形式
プロジェクト <project_id>
組織のグループ <group_id>
プロジェクトのロール <project_id>/<role_id>
プロジェクトのサービスアカウント <project_id>/<service_account_id>
プロジェクトのグループに割り当てたロール <project_id>/<group_id>/<role_id>
プロジェクトのユーザーに割り当てたロール <project_id>/<user_id>/<role_id>
プロジェクトのレート制限 <project_id>/<rate_limit_id>

各リソースの正確な ID 形式は、プロバイダーのリファレンスで確認してください。

他のシステムが管理するリソースの参照

別のシステムが管理するリソースの最新情報を Terraform で参照するには、データソースを使用します。プロバイダーには、プロジェクト、グループ、ロール、ユーザー、ロールの割り当て、レート制限、モデルの権限、ホスト型ツールの権限、支出アラート、データ保持設定、証明書のデータソースが用意されています。

次の例では、既存のプロジェクトと、そのプロジェクトに現在属しているグループを参照します。

data "openai_project" "existing" {
  project_id = var.project_id
}

data "openai_project_groups" "existing" {
  project_id = data.openai_project.existing.project_id
}

output "project_groups" {
  value = data.openai_project_groups.existing.groups
}

プロバイダーでは、ID を指定して既存のプロジェクトサービスアカウントをインポートできますが、現時点ではサービスアカウントのデータソースは用意されていません。既存のサービスアカウントを Terraform の管理下に置く必要がある場合は、プロジェクト ID とサービスアカウント ID を承認済みの管理台帳に記録しておいてください。API キーの初期設定からインポートまでの手順は、サービスアカウントを参照してください。

構成ドリフトの検出と解消

通常のプランを作成すると、Terraform は OpenAI の現在の設定を読み取り、Terraform の構成で指定した値と比較します。

terraform plan -detailed-exitcode

終了コード 0 は変更がないこと、2 はプランに変更が含まれていること、1 は Terraform でエラーが発生したことを示します。

Terraform の外部で変更された設定がプランに表示された場合は、次の手順で対応します。

  1. 変更が意図したものかどうかを確認します。
  2. リモート側の変更を維持する場合は、その変更に合わせて Terraform の構成を更新します。
  3. リモート側の変更を取り消す場合は、プランを確認して適用し、設定を構成で指定した値に戻します。
  4. もう一度プランを作成し、変更がないことを必ず確認します。

リソースブロック削除時の動作

リソースブロックを削除すると、リソースは Terraform の状態から削除されます。リモート側のオブジェクトや設定がどう扱われるかは、リソースの種類によって異なります。

リソースの種類 削除時の動作
openai_project プロジェクトをアーカイブします。アーカイブしたプロジェクトは復元できません。
openai_project_service_account サービスアカウントを削除します。
ロール、グループ、メンバーシップ、割り当ての各リソース 対応する管理対象のオブジェクトまたは割り当てを削除します。
openai_project_model_permissions プロジェクトのモデル権限の設定を削除します。
プロジェクトのレート制限、ホスト型ツールの権限、データ保持設定の各リソース Terraform の状態からリソースを削除します。リモート側の設定はリセットされません。