本記事では、実際の失敗体験から学んだ「ダウンタイムゼロ」の安全な移行アーキテクチャを、実装コード付きで解説します。
🚨 私がやらかした失敗談
最初「ポータルでボタン一つ押して、Terraformコードもkind = "AIServices" に書き換えるだけでしょ?」と思っていました。結果——ステージング環境でGPT-4のデプロイが全消滅。エンドポイントURLが変わり、接続テストが全件エラー。
terraform plan も謎のdriftを吐き続けるという地獄の数時間を過ごしました。あの苦い経験を、あなたには繰り返してほしくない。
Azure Portalの「アップグレード」がTerraformでは危険な理由
Webコンソールの案内に従い、Terraformコード上の
kind を "OpenAI" から "AIServices" に書き換えるアプローチは非推奨です。Azure Resource Managerの仕様上、このプロパティ変更はリソースの再作成を強制します。
リソースが再作成されると、本番環境では以下の致命的な問題が連鎖します。
- エンドポイントURLの変更:アプリケーション側の接続設定を緊急更新する必要があります。
- アクセスキーの無効化:既存のAPIキーが即座に失効し、サービスダウンが発生します。
- デプロイ済みモデルの消失:GPT-4oなどのモデルデプロイ設定がすべて削除されます。
- tfstateの不整合:Terraformのステート管理が壊れ、以後の
plan/applyが不安定になります。
したがって、とるべき戦略は「リソースの変換」ではなく、「既存リソースへの接続(Integration)」です。
推奨戦略:「Hub & Spoke」アーキテクチャによる統合
Azure AI Foundryの本質は、既存のAIサービスを置き換えるものではなく、それらを統合管理する「ハブ」です。既存のAzure OpenAIリソース(kind="OpenAI")には一切手を加えず、その外側に管理層としての「AI Hub」と「AI Project」を構築し、そこから既存リソースを参照(Link)させる構成が正解です。
既存のOpenAIリソースの設定は一切変更しません。稼働中のアプリケーションへの影響はゼロ(ダウンタイムゼロ)。さらに、Prompt FlowやAI Studioの評価機能といったFoundry固有の機能も、既存リソースに乗っかる形で即座に利用開始できます。
【実践】Terraformによる移行実装コード
azurerm プロバイダー(v4.0系以上推奨)と、細かい設定を補完する azapi プロバイダーを併用した実装例を紹介します。
1 プロバイダー設定
AI Foundry関連の新しいリソースに対応するため、azurerm はv4.0以上を使用し、Connection設定のために azapi を定義します。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 4.0.0"
}
azapi = {
source = "Azure/azapi"
version = "~> 1.13"
}
}
}
2 AI Hub と Project の作成
既存のOpenAIリソースとは別に、新規にHubとProjectを作成します。v4.0系では専用リソース azurerm_ai_foundry が利用可能です。Hub作成には Storage Account・Key Vault・Application Insights の依存リソースが必要な点に注意してください。
# AI Hub (管理プレーン)
resource "azurerm_ai_foundry" "hub" {
name = "hub-foundry-prod"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
storage_account_id = azurerm_storage_account.foundry_sa.id
key_vault_id = azurerm_key_vault.foundry_kv.id
application_insights_id = azurerm_application_insights.foundry_ai.id
identity {
type = "SystemAssigned"
}
}
# AI Project (作業プレーン)
resource "azurerm_ai_foundry_project" "project" {
name = "prj-genai-app-01"
location = azurerm_resource_group.example.location
ai_services_hub_id = azurerm_ai_foundry.hub.id
}
3 【重要】既存リソースとの接続 (Connection)
ここが移行の肝です。AI Hubに対して「既存のOpenAIリソースを使いたい」という設定を投入します。現状、この部分は azapi_resource を用いてREST APIを直接叩くのが最も安定的かつ柔軟です。
resource "azapi_resource" "openai_connection" {
type = "Microsoft.MachineLearningServices/workspaces/connections@2024-04-01-preview"
name = "conn-existing-openai"
parent_id = azurerm_ai_foundry.hub.id
body = jsonencode({
properties = {
category = "AzureOpenAI"
target = azurerm_cognitive_account.existing_openai.endpoint
authType = "AAD" # Managed Identity認証 (キー管理不要)
isSharedToAll = true
metadata = {
ResourceId = azurerm_cognitive_account.existing_openai.id
}
}
})
depends_on = [azurerm_role_assignment.hub_openai_contributor]
}
authType = "AAD" を指定することで、HubのManaged Identityを使用したセキュアな接続が可能になります。これにより、アクセスキーをコードやSecret Managerに埋め込むリスクを排除でき、セキュリティ監査にも強い構成になります。
4 権限の付与 (RBAC)
AI HubのManaged Identityが既存のOpenAIリソースを操作できるよう、適切なロールを割り当てます。depends_on で権限付与を先行させることが重要です。
resource "azurerm_role_assignment" "hub_openai_contributor" {
scope = azurerm_cognitive_account.existing_openai.id
role_definition_name = "Cognitive Services OpenAI Contributor"
principal_id = azurerm_ai_foundry.hub.identity.principal_id
}
よくある質問(FAQ)
A.
azapi_resource の name を変えて複数の Connection リソースを作成し、それぞれ別のOpenAIリソースを target に指定するだけでOKです。同一Hub配下で複数リソースを束ねられます。
A. v3→v4の破壊的変更(
features ブロックの必須化など)があるため、まずプロバイダーのみを段階的に更新することを推奨します。terraform plan の出力を必ず確認してから apply しましょう。
A. Connection設定が正しければ、AI Foundryポータルの「Models + endpoints」セクションから既存のGPT-4等のデプロイメントが参照できます。Prompt Flowの入力としても利用可能です。
まとめ:IaCにおける「Link & Extend」戦略
Azure AI Foundryへの移行は、既存リソースを破壊することなく、管理レイヤーを追加する「Link & Extend(接続と拡張)」のアプローチで安全に実現できます。
- 既存の OpenAIリソースはそのまま 維持する(
kind="OpenAI"を変更しない) - Terraformで AI Hub / Project を新規作成する(
azurerm_ai_foundry) - Connectionリソース で両者を紐付ける(
azapi_resource+ AAD認証) - RBACで 最小権限の原則 を守りながら権限を付与する
この手順を踏むことで、本番環境の安定稼働を守りつつ、最新のAIプラットフォームの恩恵(Prompt Flowやモデル評価機能など)を即座に享受できます。次はTerraformのチーム運用体制についても整備してみてください。
インフラをコードで管理するIaCは、再現性・安全性の面で圧倒的に優れています。VPS環境でTerraformの検証環境を手軽に用意したい場合は、以下のサービスもチェックしてみてください。
🚀 XServer VPS でTerraform検証環境を作る

コメント