Importa los recursos existentes de OpenAI en lugar de volver a crearlos. Para adoptarlos de forma segura, comienza con una configuración que coincida con el recurso remoto, previsualiza y aplica la importación, y genera un plan sin cambios antes de realizar cualquier actualización prevista.
Los bloques de importación requieren Terraform 1.5 o posterior.
Declarar e importar recursos
Declara cada recurso existente con sus ajustes actuales y luego agrega un bloque import con el formato de ID indicado en la referencia del proveedor:
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"
}
Previsualiza las importaciones en un plan guardado:
terraform plan -out=tfplan
terraform show tfplan
El plan debería mostrar las importaciones sin proponer actualizaciones de los recursos remotos. Si propone actualizaciones, haz que la configuración coincida con los ajustes actuales antes de continuar. Aplica el plan guardado para realizar las importaciones y luego ejecuta otro plan:
terraform apply tfplan
terraform plan
El segundo plan debería indicar que no hay cambios. Puedes conservar los bloques de importación en tu configuración como registro de cómo Terraform adoptó los recursos.
Estos son algunos formatos comunes de ID de importación:
| Recurso | Formato de ID de importación |
|---|---|
| Proyecto | <project_id> |
| Grupo de la organización | <group_id> |
| Rol del proyecto | <project_id>/<role_id> |
| Cuenta de servicio del proyecto | <project_id>/<service_account_id> |
| Rol de grupo del proyecto | <project_id>/<group_id>/<role_id> |
| Rol de usuario del proyecto | <project_id>/<user_id>/<role_id> |
| Límite de solicitudes del proyecto | <project_id>/<rate_limit_id> |
Consulta la referencia del proveedor para conocer el formato exacto de cada recurso.
Consultar recursos sin adoptarlos
Usa fuentes de datos cuando Terraform necesite información actual, pero otro sistema gestione el recurso. El proveedor incluye fuentes de datos para proyectos, grupos, roles, usuarios, asignaciones de roles, límites de solicitudes, permisos de modelos, permisos de herramientas alojadas, alertas de gasto, retención de datos y certificados.
Por ejemplo, consulta un proyecto existente y sus grupos actuales:
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
}
El proveedor puede importar una cuenta de servicio existente de un proyecto por su ID, pero actualmente no ofrece una fuente de datos para cuentas de servicio. Conserva los ID del proyecto y de la cuenta de servicio en tu inventario aprobado cuando necesites adoptar una cuenta de servicio existente. Consulta Cuentas de servicio para conocer la secuencia de configuración inicial de la clave de API e importación.
Detectar y reconciliar desviaciones
Ejecuta un plan normal para consultar los ajustes actuales de OpenAI y compararlos con los valores deseados en tu configuración de Terraform:
terraform plan -detailed-exitcode
El código de salida 0 significa que no hay cambios; 2, que el plan contiene cambios; y 1, que Terraform encontró un error.
Si el plan muestra un ajuste que cambió fuera de Terraform:
- Determina si el cambio fue intencional.
- Para conservar el cambio remoto, actualiza la configuración de Terraform para que coincida con él.
- Para deshacer el cambio remoto, revisa y aplica el plan para restaurar el valor configurado.
- Ejecuta otro plan y exige un resultado sin cambios.
Comprender qué ocurre al eliminar recursos
Al eliminar un bloque de recurso, el recurso se elimina del estado de Terraform, pero eso no siempre elimina o restablece el objeto remoto del mismo tipo:
| Tipo de recurso | Comportamiento al eliminar |
|---|---|
openai_project | Archiva el proyecto. No puedes restaurar un proyecto archivado. |
openai_project_service_account | Elimina la cuenta de servicio. |
| Recursos de roles, grupos, membresías y asignaciones | Elimina el objeto gestionado o la asignación correspondiente. |
openai_project_model_permissions | Elimina la configuración de permisos de modelos del proyecto. |
| Recursos de límites de solicitudes, permisos de herramientas alojadas y retención de datos del proyecto | Elimina el recurso del estado de Terraform sin restablecer el ajuste remoto. |