【Terraform】Azure OpenAIからAI Foundryへの移行完全ガイド:ダウンタイムゼロの「接続」アーキテクチャ
Azure OpenAI Service をTerraformで管理している皆様、Azure Portal上に表示される「Azure AI Foundry へのアップグレード」という通知に安易に従ってはいけません。Webコンソール上ではボタン一つの操作に見えますが、IaC(Infrastructure as Code)の観点では、エンドポイントの変更やアクセスキーの無効化を伴うリソースの破壊的再作成(ForceNew)を引き起こすリスクがあります。
本記事では、既存の本番環境リソースを維持したまま、Terraformを用いて安全に「Azure AI Foundry」環境へ移行するためのアーキテクチャパターンと、具体的な実装コードを解説します。
本記事では、既存の本番環境リソースを維持したまま、Terraformを用いて安全に「Azure AI Foundry」環境へ移行するためのアーキテクチャパターンと、具体的な実装コードを解説します。
目次
Azure Portalの「アップグレード」がTerraformでは危険な理由
⚠️ 警告:kindプロパティの変更は「リソース置換」を引き起こします
Webコンソールの案内に従い、Terraformコード上の
リソースが再作成されると、以下の致命的な問題が発生します。
Webコンソールの案内に従い、Terraformコード上の
kind を “OpenAI” から “AIServices” に書き換えるアプローチは推奨されません。これはAzure Resource Managerの仕様上、リソースの再作成(ForceNew)を強制するためです。
- エンドポイントURLの変更: アプリケーション側の接続設定を更新する必要があります。
- アクセスキーの変更: 既存のキーが無効化され、即座にサービスダウンが発生します。
- デプロイ済みモデルの消失: GPT-4などのモデルデプロイ設定がすべて削除されます。
推奨戦略:「Hub & Spoke」アーキテクチャによる統合
Azure AI Foundryの本質は、既存のAIサービスを置き換えるものではなく、それらを統合管理する「ハブ」です。既存のAzure OpenAIリソース(計算リソース)には手を加えず、その外側に管理層としての「AI Hub」と「AI Project」を構築し、そこから既存リソースを**参照(Link)**させる構成が正解です。
この構成のメリット
既存のOpenAIリソースの設定(kind=”OpenAI”)は一切変更しません。そのため、稼働中のアプリケーションへの影響は皆無(ダウンタイムゼロ)です。
既存のOpenAIリソースの設定(kind=”OpenAI”)は一切変更しません。そのため、稼働中のアプリケーションへの影響は皆無(ダウンタイムゼロ)です。
【実践】Terraformによる移行実装コード
ここからは、azurerm プロバイダー(v4.0系以上推奨)と、細かい設定を補完する azapi プロバイダーを併用した実装例を紹介します。
1プロバイダー設定
AI Foundry関連の新しいリソースに対応するため、azurerm はv4.0以上を使用し、接続設定のために azapi を定義します。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 4.0.0"
}
azapi = {
source = "Azure/azapi"
version = "~> 1.13"
}
}
}
2AI Hub と Project の作成
既存のOpenAIリソースとは別に、新規にHubとProjectを作成します。v4.0系では専用リソースazurerm_ai_foundry が利用可能です。
# 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, KeyVault, AppInsights) は別途作成しID指定
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 # Hubに接続し全プロジェクトで共有
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]
}
Point:
authType = "AAD" を指定することで、HubのManaged Identityを使用したセキュアな接続が可能になります。これにより、アクセスキーをコードに埋め込むリスクを排除できます。
4権限の付与 (RBAC)
最後に、AI HubのManaged Identityが既存のOpenAIリソースを操作できるよう、適切なロール(Cognitive Services OpenAI Contributor)を割り当てます。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
}
まとめ:IaCにおける「Link & Extend」戦略
Azure AI Foundryへの移行は、既存リソースを破壊することなく、管理レイヤーを追加する「Link & Extend(接続と拡張)」のアプローチで実現可能です。- 既存の OpenAIリソースはそのまま 維持する。
- Terraformで AI Hub / Project を新規作成する。
- Connectionリソース で両者を紐付ける。

コメント