导入现有 OpenAI 资源,无需重新创建。要安全地接管资源,请先使配置与远程资源一致,然后预览并应用导入操作,并在执行任何预期更新之前确认生成的计划不包含变更。
导入块需要 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
第二次计划应报告没有变更。您可以在配置中保留导入块,作为 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 需要当前信息,但资源由其他系统管理,请使用数据源。提供程序包含项目、组、角色、用户、角色分配、速率限制、模型权限、托管工具权限、支出告警、数据保留和证书的数据源。
例如,读取现有项目及其当前的组:
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 配置中的期望值进行比较:
terraform plan -detailed-exitcode
退出码 0 表示没有变更,2 表示计划包含变更,1 表示 Terraform 遇到错误。
如果计划显示某项设置在 Terraform 之外发生了变更:
- 确定该变更是否为有意操作。
- 要保留远程变更,请更新 Terraform 配置,使其与远程设置一致。
- 要撤销远程变更,请审查并应用计划,以恢复配置中指定的值。
- 再次运行计划,并确保结果不包含变更。
了解移除行为
移除资源块会将资源从 Terraform 状态中移除,但不一定会删除或重置同类型的远程对象:
| 资源类型 | 移除行为 |
|---|---|
openai_project | 归档项目。已归档的项目无法恢复。 |
openai_project_service_account | 删除服务账户。 |
| 角色、组、成员关系和分配资源 | 删除对应的受管对象或分配。 |
openai_project_model_permissions | 删除项目模型权限配置。 |
| 项目速率限制、托管工具权限和数据保留资源 | 将资源从 Terraform 状态中移除,但不重置远程设置。 |