OpenAI 리소스 가져오기 및 조정
OpenAI 리소스 가져오기 및 조정 (Import and reconcile OpenAI resources)
출처: 문서
기존 OpenAI 리소스를 다시 만드는 대신 가져와요(import). 안전한 도입(adoption)은 원격 리소스와 일치하는 구성으로 시작해서, import를 미리 보고(preview) 적용하며, 의도한 업데이트 이전에 변경 사항이 없는(no-op) 계획을 만들어요.
Import 블록에는 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"
}
저장된 계획에서 import를 미리 봐요:
terraform plan -out=tfplan
terraform show tfplan
계획은 원격 리소스에 업데이트를 제안하지 않고 import를 보여줘야 해요. 업데이트를 제안한다면 계속하기 전에 구성이 현재 설정과 일치하도록 만들어요. 저장된 계획을 적용해 import를 수행한 다음, 다른 계획을 실행해요:
terraform apply tfplan
terraform plan
두 번째 계획은 변경 사항이 없음을 보고해야 해요. Terraform이 리소스를 어떻게 도입했는지에 대한 기록으로 import 블록을 구성에 유지할 수 있어요.
일반적인 import ID 형식은 다음과 같아요:
| 리소스 | Import ID 형식 |
|---|---|
| Project | <project_id> |
| Organization group | <group_id> |
| Project role | <project_id>/<role_id> |
| Project service account | <project_id>/<service_account_id> |
| Project group role | <project_id>/<group_id>/<role_id> |
| Project user role | <project_id>/<user_id>/<role_id> |
| Project rate limit | <project_id>/<rate_limit_id> |
모든 리소스의 정확한 형식은 프로바이더 참조를 확인해요.
리소스를 도입하지 않고 읽기
Terraform이 최신 정보가 필요하지만 다른 시스템이 리소스를 소유하고 있을 때는 데이터 소스(data source)를 사용해요. 프로바이더에는 프로젝트, 그룹, 역할, 사용자, 역할 할당, 비율 한도, 모델 권한, 호스팅 도구 권한, 지출 알림, 데이터 보존, 인증서에 대한 데이터 소스가 포함돼요.
예를 들어 기존 프로젝트와 현재 그룹을 읽어요:
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를 승인된 인벤토리에 보관해요. API 키 부트스트랩과 import 시퀀스는 Service accounts를 참고해요.
드리프트 감지 및 조정
일반 계획을 실행해 현재 OpenAI 설정을 읽고, Terraform 구성의 원하는 값과 비교해요:
terraform plan -detailed-exitcode
종료 코드 0은 변경 사항이 없음을, 2는 계획에 변경 사항이 있음을, 1은 Terraform이 오류를 만났음을 의미해요.
계획이 Terraform 외부에서 변경된 설정을 보여주면:
- 변경이 의도적인 것인지 판단해요.
- 원격 변경을 유지하려면 Terraform 구성을 그에 맞게 업데이트해요.
- 원격 변경을 되돌리려면 계획을 검토하고 적용해 구성된 값을 복원해요.
- 다른 계획을 실행하고 no-op 결과를 요구해요.
제거 동작 이해하기
리소스 블록을 제거하면 리소스가 Terraform 상태에서 제거되지만, 같은 종류의 원격 객체를 항상 삭제하거나 리셋하지는 않아요:
| 리소스 유형 | 제거 동작 |
|---|---|
openai_project |
프로젝트를 보관(archive)함. 보관된 프로젝트는 복원할 수 없음. |
openai_project_service_account |
서비스 계정을 삭제함. |
| 역할, 그룹, 멤버십, 할당 리소스 | 해당 관리 객체 또는 할당을 삭제함. |
openai_project_model_permissions |
프로젝트 모델 권한 구성 삭제함. |
| 프로젝트 비율 한도, 호스팅 도구 권한, 데이터 보존 리소스 | 원격 설정을 리셋하지 않고 Terraform 상태에서 리소스를 제거함. |