我正在尝试实现一个用例,我们必须使用 for_each 使用单个 azurerm_cognitive_deployment 块部署 2 个不同的 openAI 模型。
resource "azurerm_cognitive_deployment" "openai-model" {
for_each = var.openai_landing_zone_openAI
provider = azurerm.sub_openai_landing_zone
name = each.value.name
cognitive_account_id = azurerm_cognitive_account.openAI[each.key].id
model {
dynamic "origin" {
for_each = var.openai_landing_zone_openAI.models
content {
format = each.value.models.format
name = each.value.models.model_name
version = each.value.models.version
}
scale {
type = "Standard"
capacity = each.value.models.capacity
}
}
}
}
var 文件。
openai_landing_zone_openAI = {
"demo-openai" = {
location = "west us",
rg_name = "demo-rg",
kind = "OpenAI",
sku_name = "S0",
public_access = false,
local_auth_enabled = false,
custom_subdomain_name = "demo-openai",
name = "demo-deployment",
models = {
"0" = {
format = "OpenAI",
version = "0613",
model_name = "gpt-35-turbo",
capacity = "20"
},
"1" = {
format = "OpenAI",
version = "0613",
model_name = "gpt-4",
capacity = "20"
}
}
}
}
我已经写了这个块,但它给出了语法错误。是否可以用单个块来做到这一点。有没有其他办法请指教。
使用 terraform 的 OpenAI 动态块。
我对您共享的代码配置进行了 2 个主要更改,并且能够成功配置需求。
as MarkoE 建议进行更改
format = each.value.format
并且比例块配置是在模型配置信息之外进行的。
我的配置如下。
main.tf:
provider "azurerm" {
features {}
alias = "sub_openai_landing_zone"
}
provider "azurerm" {
features {}
}
variable "location" {}
variable "rg_name" {}
variable "sku_name" {}
variable "account_name" {}
variable "deployment_name" {}
variable "models" {
type = list(object({
format : string
model_name: string
version : string
}))
}
module "openai_cognitive_deployment" {
source = "./modules/cognitive_deployment"
providers = {
azurerm.sub_openai_landing_zone = azurerm.sub_openai_landing_zone
}
location = var.location
rg_name = var.rg_name
sku_name = var.sku_name
account_name = var.account_name
deployment_name = var.deployment_name
models = var.models
}
terraform.tfvars:
location = "West US"
rg_name = "testvk-rg"
sku_name = "S0"
account_name = "openai-production"
deployment_name = "openai-deployment-production"
models = [
{
format = "OpenAI",
model_name= "gpt-35-turbo",
deployment_name = "vinay35gpt"
version = 1106,
},
{
format = "OpenAI",
model_name= "text-embedding-ada-002",
deployment_name = "customdepvk"
version = 2,
}
]
模块/认知部署:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
configuration_aliases = [azurerm.sub_openai_landing_zone]
}
}
}
variable "location" {}
variable "rg_name" {}
variable "sku_name" {}
variable "account_name" {}
variable "deployment_name" {}
variable "models" {
type = list(object({
format : string
model_name: string
version : string
}))
}
resource "azurerm_resource_group" "openai_rg" {
name = var.rg_name
location = var.location
}
resource "azurerm_cognitive_account" "openai_account" {
name = var.account_name
location = azurerm_resource_group.openai_rg.location
resource_group_name = azurerm_resource_group.openai_rg.name
kind = "OpenAI"
sku_name = var.sku_name
}
resource "azurerm_cognitive_deployment" "openai_model" {
for_each = { for idx, m in var.models : idx => m }
provider = azurerm.sub_openai_landing_zone
name = "${var.deployment_name}-${each.key}"
cognitive_account_id = azurerm_cognitive_account.openai_account.id
model {
format = each.value.format
name = each.value.model_name
version = each.value.version
}
scale {
type = "Standard"
}
}
部署成功: