2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure OpenAI ServiceリソースをTerraformで作成する

Last updated at Posted at 2023-09-19

はじめに

Azure OpenAI Serviceを活用することで、様々な生成AIをセキュアに利用できます。

また、TerraformではAzureの様々なリソースの作成・変更をコードで構築でき、Azure OpenAI ServiceについてもTerraformで構築することができます。

そこで、今回はネットワーク制限(IP制限)を含めてAzure OpenAI ServiceリソースをTerraformで作成する方法をご紹介します。

前提

  • Azureサブスクリプションの適用およびAzure OpenAI Serviceの利用申請は既に完了しているものとします。
  • Terraformのインストールおよび環境構築は完了しているものとします。
  • Terraformでのデプロイ対象のリソースグループは既に作成済みであるものとします。

TerraformでのAzure OpenAI Serviceリソースの定義

azurermプロバイダーの定義

まずTerraformでAzureリソースを構成するには、main.tfazurermプロバイダーを定義する必要があります。

参考:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs

main.tf
terraform {
  # Azure Provider
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.59.0"
    }
  }
}

# Configure the Azure Provider
provider "azurerm" {
  features {}
}

Azure OpenAI Serviceアカウントの定義

Azure OpenAI Serviceのリソースを定義するには、azurerm_cognitive_accountで定義します。

参考:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/cognitive_account

設定項目と概要は下記の通りです。

  • name: OpenAIリソース名
  • resource_group_name: リソースグループ名
  • location: リージョン
    • 本ドキュメントでは東日本を指定しています。
    • Azure OpenAI Serviceが提供されているリージョンは、こちらで確認できます。
  • kind: OpenAI(固定値)
  • sku_name: S0(固定値)
  • custom_subdomain_name: 任意のAzure OpenAI Serviceドメイン名
    • リソース作成後、OpenAIエンドポイントはhttps://<任意のドメイン>.openai.azure.com/となります。
  • network_acls: ネットワークアクセス制御
    • default_action: Deny
      • ip_rulesで指定したアドレス以外からのアクセスを拒否します。
    • ip_rules: Azure OpenAI Serviceのアクセスを許可するIPアドレス一覧
      • ネットワークアクセス制御は必須の設定ではありませんが、こちらが無いとインターネット上どこからでもAzure OpenAI Serviceにアクセスできてしまうため、IP制限等でアクセス制限しておくことをおすすめします。
main.tf
# Azure OpenAI Service Account
resource "azurerm_cognitive_account" "openai_sample" {
  name                  = "openai-acc"
  resource_group_name   = "my-resource-group"
  location              = "japaneast"
  kind                  = "OpenAI"
  sku_name              = "S0"
  custom_subdomain_name = "<任意のドメイン>"
  network_acls {
    default_action = "Deny"
    ip_rules       = ["xx.xx.xx.xx", "xx.xx.xx.xx"] # 許可するIPの一覧
  }
}

Azure OpenAI Serviceデプロイメントの定義

上記のAzure OpenAI Serviceアカウントだけではチャット機能を使うことはできず、先ほど作成したアカウントに対しモデルをデプロイする必要があります。

こちらは、azurerm_cognitive_deploymentで定義します。

参考:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/cognitive_deployment

設定項目と概要は下記の通りです。

  • name: デプロイ名
  • cognitive_account_id: Azure OpenAI ServiceアカウントのID
    • 上記で定義したAzure OpenAI Service Accountと紐づくように、azurerm_cognitive_account.<account名>.idとします。
  • model: モデル
    • format: OpenAI(固定値)
    • name: モデルの種類
    • version: バージョン
      • modelのnameおよびversionでは、Azure OpenAI Serviceで利用するモデルの種類とバージョンを指定します。
      • モデルの種類やバージョンは、こちらのドキュメントをご参照ください。
      • 本ドキュメントでは、gpt-35-turboの最新バージョン0613を指定しています。
  • scale
    • type: Standard(固定値)
# Azure OpenAI Service Deployment
resource "azurerm_cognitive_deployment" "chat" {
  name                 = "my-chat-model"
  cognitive_account_id = azurerm_cognitive_account.openai_sample.id
  model {
    format  = "OpenAI"
    name    = "gpt-35-turbo"
    version = "0613"
  }
  scale {
    type = "Standard"
  }
}

リソースの確認

terraform planおよびterraform applyでリソースの作成が完了したら、Azure PortalでAzure OpenAI Serviceが作成されています。

リソースの概要の「探索」からAzure OpenAI Studioにアクセスしてみましょう。

まず「デプロイ」を確認すると、Terraformで作成したモデルがデプロイされています。

1.png

また、「チャット」で先ほどデプロイしたモデルでチャットを行えることが確認できます。

2.png

また、アクセス元のIPアドレスをTerraformで定義したアドレス以外でチャットしようとするとAccess denied due to Virtual Network/Firewall rules.が返りIP制限も反映されていることが確認できます。

(IP制限の詳細についてはAzure Portalで作成したAzure OpenAI Serviceリソースの「ネットワーク」から確認できます。)

3.png

サンプルコード

main.tf
terraform {
  # Azure Provider
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.59.0"
    }
  }
}

# Configure the Azure Provider
provider "azurerm" {
  features {}
}

# Azure OpenAI Service Account
resource "azurerm_cognitive_account" "openai_sample" {
  name                  = "openai-acc"
  resource_group_name   = "my-resource-group"
  location              = "japaneast"
  kind                  = "OpenAI"
  sku_name              = "S0"
  custom_subdomain_name = "<任意のドメイン>"
  network_acls {
    default_action = "Deny"
    ip_rules       = ["xx.xx.xx.xx", "xx.xx.xx.xx"]
  }
}

# Azure OpenAI Service Deployment
resource "azurerm_cognitive_deployment" "chat" {
  name                 = "my-chat-model"
  cognitive_account_id = azurerm_cognitive_account.openai_sample.id
  model {
    format  = "OpenAI"
    name    = "gpt-35-turbo"
    version = "0613"
  }
  scale {
    type = "Standard"
  }
}

まとめ

今回はTerraformを使い、Azure OpenAI Serviceのリソース作成およびモデルのデプロイを行いました。

また、今回ご紹介したIP制限以外にも、プライベートエンドポイント接続などセキュアにAzure OpenAI Serviceを利用できる環境をTerraformで定義することができます。

関連リンク

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?