OpenAI Terraform 资源导入与状态协调
对于已有的 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 之外发生了变化:
- 确定该变化是否出于有意操作。
- 如需保留远程变化,修改 Terraform 配置,使其与当前远程设置一致。
- 如需撤销远程变化,检查并应用计划,恢复配置中指定的值。
- 再次生成计划,要求结果为无变更。
理解移除行为
从配置中移除资源块会使该资源从 Terraform 状态中移除,但不同类型的远程对象并不总是随之被删除或重置:
| 资源类型 | 移除行为 |
|---|---|
openai_project |
归档项目。已归档项目无法恢复。 |
openai_project_service_account |
删除服务账户。 |
| 角色、群组、成员关系和角色分配资源 | 删除对应的受管对象或分配关系。 |
openai_project_model_permissions |
删除项目的模型权限配置。 |
| 项目速率限制、托管工具权限和数据保留资源 | 从 Terraform 状态中移除资源,不重置远程设置。 |

TRAE-AI编程


更多建议: