OpenAI Terraform 资源导入与状态协调

2026-11-09 15:53 更新

对于已有的 OpenAI 资源,应将其导入 Terraform,而不是重新创建。安全的接管流程是:先声明与远程资源一致的配置,预览并执行导入,在任何预期更新之前先得到一个无变更计划(no-op plan)。

import 块要求 Terraform 1.5 或更高版本。

声明并导入资源

按资源当前设置声明每个已有资源,再根据提供程序参考中的 ID 格式添加 import 块:

来源示例 1(terraform):

## [中文] 按已有项目、群组和服务账户的当前设置声明资源,并用import块指定实际ID;服务账户使用项目ID/账户ID复合格式,执行导入前先检查计划。
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"
}

将导入操作保存到计划文件并预览:

来源示例 2(bash):

## [中文] 生成并保存导入计划,再显示该计划;确认只有导入,没有意外远程更新。
terraform plan -out=tfplan
terraform show tfplan

计划应显示导入操作,而不应提出更新远程资源。如果出现更新,先调整配置,使其与资源当前设置一致,再继续。应用保存的计划来完成导入,然后重新生成计划:

来源示例 3(bash):

## [中文] 应用已检查的导入计划,将已有资源纳入状态,再检查计划是否无变更。
terraform apply tfplan
terraform plan

第二次计划应报告没有变更。你可以保留配置中的 import 块,记录 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>

每种资源的准确格式均应以提供程序参考为准。

只读取资源而不接管

如果 Terraform 需要资源的当前信息,但资源由其他系统管理,请使用数据源。提供程序包含项目、群组、角色、用户、角色分配、速率限制、模型权限、托管工具权限、支出告警、数据保留和证书的数据源。

例如,读取已有项目及其当前群组:

来源示例 4(terraform):

## [中文] 通过data读取已有项目及项目群组,输出群组信息;不接管远程对象生命周期。
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 导入已有项目服务账户,但目前不提供服务账户数据源。需要接管已有服务账户时,应在经过批准的资源清单中保存项目 ID 和服务账户 ID。API 密钥的初始配置和导入顺序见服务账户。

检测并协调漂移

运行常规计划,读取 OpenAI 的当前设置并与 Terraform 配置中的期望值比较:

来源示例 5(bash):

## [中文] 刷新并比较远程状态;退出码0表示无变更,2表示有变更,1表示错误,不自动应用。
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 状态中移除资源,不重置远程设置。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号