既存の 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
2 回目のプランでは、変更なしと報告されるはずです。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 を 承認済みのインベントリに保管してください。サービスアカウント で、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 のステートからリソースを削除します。 |