For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

Terraform によるレート制限と利用額の管理

プロジェクトのレート制限を確認して更新し、利用額アラートを設定します。

このガイドでは、プロジェクトの既存のレート制限を管理し、月間利用額のアラートを作成します。レート制限は、プロジェクトが一定期間内にモデルを利用できる量を制限します。利用額アラートは、月間利用額がしきい値に達するとチームに通知します。API リクエストを停止したり、利用額に上限を設けたりする機能はありません。

このガイドの手順を完了すると、次の処理を繰り返し実行できる構成ができあがります。

  • 既存のプロジェクトで利用できるレート制限レコードの取得
  • 1 つのモデルのリクエスト数とトークン数の上限の管理
  • プロジェクトの月間利用額がしきい値に達したときのメール通知

事前準備

Terraform プロバイダーのセットアップを完了し、管理者用 API キーを環境変数 OPENAI_ADMIN_KEY としてエクスポートしてください。次のものも用意します。

  • 既存のプロジェクトの ID
  • 利用額アラートの送信先メールアドレス(1 件以上)

手順を試す際は、テスト用のプロジェクトを使用してください。次のセクションで、テキストモデルに対応するレート制限レコードを特定します。プロジェクトで利用できるレート制限レコードは 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 には、利用できるモデルのレート制限ごとに 1 つのオブジェクトが含まれます。各オブジェクトには 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 には、レート制限を変更するプロジェクトの ID を指定します。
  • rate_limit_id には、モデルに対応する既存のレート制限レコードの ID を指定します。モデル ID とは異なります。
  • max_requests_per_1_minute は、プロジェクトがそのモデルに 1 分間に送信できるリクエスト数を制限します。
  • max_tokens_per_1_minute は、プロジェクトがそのモデルで 1 分間に処理できるトークン数を制限します。

選択したレコードに適用されるフィールドだけを設定してください。レコードの種類によっては、1 分あたりの画像数や音声データ量(メガバイト)、1 日あたりのリクエスト数や 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 には少なくとも 1 件の送信先を指定する必要があります。
  • 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 米ドルに達するとメールが送信されます。

プロジェクトと組織のアラートは一緒に管理できます。プロジェクトと組織で対応を担当するチームが異なる場合は、それぞれに異なるしきい値と送信先を設定してください。

構成例全体の実行

ここまでの例では、具体的な値を使って各リソースを説明しました。以下の構成例では、環境に依存する値を変数に置き換え、プロジェクトのレート制限の取得、1 件のレート制限の管理、1 件のプロジェクト利用額アラートの設定をまとめて行います。

次の構成を 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

初回の実行計画では、2 つのリソースが追加対象として表示されるはずです。レート制限リソースは Terraform の状態への追加として表示されますが、計画を適用すると OpenAI の既存のレート制限レコードが更新されます。もう一方のリソースでは、プロジェクトの利用額アラートが作成されます。適用後に terraform output を実行すると、利用できるレート制限、管理対象レコードに対応するモデル、アラート ID が表示されます。

terraform plan をもう一度実行し、追加の変更がないことを確認してください。構成と実際の状態に差異がある場合は、再度更新を適用する前に、別の管理者や自動処理がレート制限または利用額アラートを変更していないか確認してください。