이 가이드에서는 기존 프로젝트 요청 한도를 관리하고 월간 지출 알림을 만듭니다. 요청 한도는 일정 시간 동안 프로젝트의 모델 사용량을 제한합니다. 지출 알림은 월간 사용 금액이 임계값에 도달하면 팀에 알리지만, API 요청을 중단하거나 지출 상한을 강제하지는 않습니다.
기본 워크플로우를 완료하면 다음 작업에 반복해서 사용할 수 있는 구성이 만들어집니다.
- 기존 프로젝트에서 사용할 수 있는 요청 한도 레코드를 조회합니다.
- 모델 하나의 요청 수와 토큰 수 한도를 관리합니다.
- 프로젝트의 월간 지출이 임계값에 도달하면 이메일 알림을 보냅니다.
시작하기 전에
Terraform 프로바이더 설정을 완료하고 관리자 API 키를 OPENAI_ADMIN_KEY 환경 변수로 내보내세요. 다음 항목도 필요합니다.
- 기존 프로젝트의 ID
- 지출 알림을 받을 이메일 주소 한 개 이상
워크플로우를 시험할 때는 테스트 프로젝트를 사용하세요. 다음 섹션에서는 텍스트 모델의 요청 한도 레코드를 찾습니다. 프로젝트에서 사용할 수 있는 요청 한도 레코드는 OpenAI가 생성합니다. Terraform은 새 레코드를 만들지 않고 기존 레코드를 업데이트합니다.
프로젝트 요청 한도 조회하기
다음과 같이 프로젝트에서 사용할 수 있는 요청 한도 레코드를 조회하세요.
data "openai_project_rate_limits" "current" {
project_id = "proj_123"
}
output "project_rate_limits" {
value = data.openai_project_rate_limits.current.rate_limits
}
이 데이터 소스는 읽기 전용 요청을 보냅니다.
project_id는 조회할 프로젝트를 지정합니다.rate_limits에는 사용 가능한 모델별 요청 한도마다 객체가 하나씩 들어 있습니다. 각 객체에는id,model, 해당 레코드에 적용되는 한도 값이 포함됩니다.- 출력값을 정의하면
terraform plan또는terraform apply실행 후 레코드를 확인할 수 있습니다.
model 값이 관리하려는 모델과 일치하는 레코드를 선택하세요. 해당 레코드의 id를 복사하세요. 다음 리소스에서 이 값을 rate_limit_id로 사용합니다. 프로바이더나 API가 변경되어도 다른 레코드가 선택되지 않도록 ID를 입력값으로 명시하세요.
기존 요청 한도 관리하기
선택한 텍스트 모델 레코드의 요청 수와 토큰 수 한도를 다음과 같이 설정하세요.
resource "openai_project_rate_limit" "application" {
project_id = "proj_123"
rate_limit_id = "rl-gpt-3.5-turbo"
max_requests_per_1_minute = 500
max_tokens_per_1_minute = 200000
}
각 인수의 역할은 다음과 같습니다.
project_id는 요청 한도를 변경할 프로젝트를 지정합니다.rate_limit_id는 모델의 기존 요청 한도 레코드를 식별합니다. 모델 ID와는 다릅니다.max_requests_per_1_minute는 프로젝트가 해당 모델에 분당 보낼 수 있는 요청 수를 제한합니다.max_tokens_per_1_minute는 프로젝트가 해당 모델로 분당 처리할 수 있는 토큰 수를 제한합니다.
선택한 레코드에 적용되는 필드만 설정하세요. 다른 유형의 레코드에서는 분당 이미지 수, 분당 오디오 용량(메가바이트), 일일 요청 수 또는 일일 Batch 입력 토큰 수를 제한할 수 있습니다. 설정값은 조직과 프로젝트에 허용된 한도를 초과할 수 없습니다.
첫 Terraform 실행 계획에서는 이 리소스가 추가 항목으로 표시되지만, 실제로 프로바이더는 기존 요청 한도 레코드를 업데이트한 다음 Terraform 상태에 저장합니다. 구성에 지정한 한도를 변경하면 프로바이더가 업데이트 요청을 다시 보냅니다.
구성에서 openai_project_rate_limit 리소스를 제거하면 Terraform 상태에서 레코드가 제거되지만 원격 요청 한도는 초기화되거나 삭제되지 않습니다.
다른 워크플로우에서 레코드를 관리할 예정이라면 리소스를 제거하기 전에 원격 요청 한도를 원하는 값으로 설정하세요.
프로젝트 지출 알림 설정하기
다음과 같이 프로젝트의 월간 지출 알림을 만드세요.
resource "openai_project_spend_alert" "monthly" {
project_id = "proj_123"
threshold_amount = 20000
currency = "USD"
interval = "month"
notification_channel_type = "email"
notification_channel_recipients = ["platform-alerts@example.com"]
notification_channel_subject_prefix = "OpenAI project spend"
}
알림을 정의할 때는 지출 조건과 알림 채널을 함께 지정합니다.
project_id는 알림 대상을 해당 프로젝트의 지출로 한정합니다.threshold_amount는 센트 단위의 월간 지출 임계값입니다.20000은 미화 200달러입니다.currency값은USD여야 합니다.interval값은month여야 합니다.notification_channel_type값은email이어야 합니다.notification_channel_recipients에는 수신자가 한 명 이상 있어야 합니다.notification_channel_subject_prefix는 알림 이메일 제목 앞에 붙일 문구로, 선택 사항입니다.
Terraform은 알림을 만들고 생성된 alert_id를 저장합니다. 임계값이나 알림 필드를 변경하면 알림이 업데이트됩니다. 리소스를 제거하면 원격 알림도 삭제됩니다.
지출 알림은 임계값에 도달했음을 알릴 뿐 지출을 제한하지 않습니다. 각 임계값에 도달했을 때 따를 사고 대응 절차나 취할 관리 조치를 정하고, 요청량은 요청 한도를 사용해 별도로 제한하세요.
조직 지출 알림 설정하기
조직 전체의 지출에 임계값을 적용하려면 조직 알림을 사용하세요.
resource "openai_organization_spend_alert" "monthly" {
threshold_amount = 100000
currency = "USD"
interval = "month"
notification_channel_type = "email"
notification_channel_recipients = ["platform-alerts@example.com"]
}
이 리소스는 프로젝트 알림과 동일한 임계값 단위, 주기, 통화 및 알림 필드를 사용합니다. 조직 전체의 지출을 집계하므로 project_id를 받지 않습니다. 이 예시에서는 조직의 월간 지출이 미화 1,000달러에 도달하면 이메일을 보냅니다.
프로젝트 알림과 조직 알림을 함께 관리할 수 있습니다. 프로젝트와 조직의 대응 담당 팀이 다르면 각각 별도의 임계값과 수신자를 지정하세요.
전체 예제 실행하기
앞의 예시에서는 각 리소스의 동작을 설명하기 위해 구체적인 값을 사용했습니다. 전체 예제에서는 환경에 따라 달라지는 값을 변수로 바꿉니다. 이 구성 하나로 프로젝트의 요청 한도를 조회하고, 요청 한도 한 건을 관리하며, 프로젝트 지출 알림 한 건을 만듭니다.
다음 구성을 main.tf로 저장하세요.
terraform {
required_version = ">= 1.0"
required_providers {
openai = {
source = "openai/openai"
version = ">= 1.0.0"
}
}
}
provider "openai" {}
variable "project_id" {
type = string
}
variable "rate_limit_id" {
type = string
description = "Existing rate-limit record for the text model to manage."
}
variable "max_requests_per_minute" {
type = number
}
variable "max_tokens_per_minute" {
type = number
}
variable "project_spend_threshold_cents" {
type = number
description = "Monthly project spend threshold in cents."
validation {
condition = var.project_spend_threshold_cents > 0
error_message = "The project spend threshold must be greater than zero."
}
}
variable "alert_recipients" {
type = list(string)
validation {
condition = length(var.alert_recipients) > 0
error_message = "Provide at least one spend-alert recipient."
}
}
data "openai_project_rate_limits" "current" {
project_id = var.project_id
}
resource "openai_project_rate_limit" "application" {
project_id = var.project_id
rate_limit_id = var.rate_limit_id
max_requests_per_1_minute = var.max_requests_per_minute
max_tokens_per_1_minute = var.max_tokens_per_minute
}
resource "openai_project_spend_alert" "monthly" {
project_id = var.project_id
threshold_amount = var.project_spend_threshold_cents
currency = "USD"
interval = "month"
notification_channel_type = "email"
notification_channel_recipients = var.alert_recipients
notification_channel_subject_prefix = "OpenAI project spend"
}
output "available_rate_limits" {
value = data.openai_project_rate_limits.current.rate_limits
}
output "managed_rate_limit_model" {
value = openai_project_rate_limit.application.model
}
output "project_spend_alert_id" {
value = openai_project_spend_alert.monthly.alert_id
}
terraform.tfvars를 만들고 기존 프로젝트 ID, 앞에서 조회한 텍스트 모델의 요청 한도 레코드 ID, 승인된 한도 값, 센트 단위의 지출 임계값, 알림 수신자를 지정하세요.
project_id = "proj_123"
rate_limit_id = "rl-gpt-3.5-turbo"
max_requests_per_minute = 500
max_tokens_per_minute = 200000
project_spend_threshold_cents = 20000
alert_recipients = ["platform-alerts@example.com"]
요청 수와 토큰 수는 현재 프로젝트에 허용된 한도 이내로 설정하세요. 실행 계획의 available_rate_limits 출력값에서 현재 레코드와 한도 값을 확인해 설정값과 비교할 수 있습니다.
Terraform을 초기화한 다음 실행 계획을 저장하고 검토한 뒤 적용하세요.
terraform init
terraform fmt
terraform validate
terraform plan -out=tfplan
terraform show tfplan
terraform apply tfplan
첫 실행 계획에는 추가할 리소스가 두 개 표시되어야 합니다. Terraform은 요청 한도 리소스를 상태에 추가할 항목으로 표시하지만, 계획을 적용하면 OpenAI의 기존 요청 한도 레코드가 업데이트됩니다. 다른 추가 항목은 프로젝트 지출 알림을 생성합니다. 적용 후 terraform output을 실행하면 사용 가능한 요청 한도, 관리 중인 레코드에 연결된 모델, 알림 ID가 출력됩니다.
terraform plan을 다시 실행해 추가 변경 사항이 없는지 확인하세요. 실제 설정과 구성 간에 차이가 표시되면 업데이트를 다시 적용하기 전에 다른 관리자나 자동화 작업이 요청 한도 또는 지출 알림을 변경했는지 확인하세요.