Я пытаюсь создать конечную точку openai, используя модуль openai в terraform. У меня нет проблем создать сеть и затем отдельно открыть ее. Однако когда я пытаюсь добавить все в один конвейер, он ищет виртуальную сеть и подсеть, как будто они уже созданы, вместо того, чтобы создавать их сначала.
(Я ИЗМЕНИЛ ИМЕНА СОБСТВЕННЫЕ НА «ТЕСТ» ДЛЯ КОНФИДЕНЦИАЛЬНОСТИ)
Моя структура каталогов следующая:
terraform
/modules
/openai/
main.tf
variables.tf
outputs.tf
network/
main.tf
variables.tf
outputs.tf
main.tf
variables.tf
В моем сетевом файле я создаю выходные данные для имен виртуальных сетей и подсетей:
output "subnet_name" {
description = "The name of the subnet."
value = azurerm_subnet.test_subnet.name
}
output "vnet_name" {
description = "The name of the virtual network."
value = azurerm_virtual_network.test_vnet.name
}
В корне main.tf:
provider "azurerm" {
features {}
}
# Network Module
module "network" {
source = "./modules/network"
vnet_name = "test_vnet"
address_space = ["10.0.0.0/16"]
location = "US East"
resource_group_name = "TestRG"
subnet_name = "test_subnet"
subnet_prefixes = ["10.0.1.0/24"]
}
module "openai" {
source = "./modules/openai"
resource_group_name = "TestRG"
location = "US East"
openai_name = "test_openai"
vnet_name = module.network.vnet_name
subnet_name = module.network.subnet_name
}
модуль openai main.tf:
provider "azurerm" {
features {}
}
module "openai" {
source = "Azure/openai/azurerm"
resource_group_name = var.resource_group_name
location = var.location
private_endpoint = {
"pe_endpoint" = {
private_dns_entry_enabled = true
dns_zone_virtual_network_link = "dns_zone_link"
is_manual_connection = false
name = var.private_endpoint_name
private_service_connection_name = var.private_service_connection_name
subnet_name = var.subnet_name
vnet_name = var.vnet_name
vnet_rg_name = var.resource_group_name
}
}
deployment = {
"text-embedding-ada-002" = {
name = "text-embedding-ada-002"
model_format = "OpenAI"
model_name = "text-embedding-ada-002"
model_version = "2"
scale_type = "Standard"
}
}
}
Не следует ли сначала создать сетевые компоненты, учитывая, что я беру переменные из сетевого модуля? Я знаю, что могу добавить модуль vnet в папку openai, но я предпочитаю разделить их и не могу понять, почему вышеописанное не работает. Любые идеи приветствуются! Я не специалист по терраформированию :)
Спасибо
Попробовал запустить план terraform, описанный выше, и получил ошибку о том, что виртуальная сеть и подсети не существуют при создании openai pe_endpoint.
OpenAI и далее сеть можно создать только отдельно с помощью terraform.
Похоже, проблема в том, как вы передаете Vnet в OpenAI, потому что во время параллельной работы все ресурсы предоставляются одновременно.
Итак, чтобы решить эту проблему, нам нужно внести изменения таким образом, чтобы выходные данные Vnets использовались для назначения OpenAI с помощью depend_on.
конфигурация:
main.tf:
provider "azurerm" {
features {}
}
module "network" {
source = "./modules/network"
vnet_name = "test_vnet"
address_space = ["10.0.0.0/16"]
location = "East US"
resource_group_name = "vinay-rg"
subnet_name = "test_subnet"
subnet_prefixes = ["10.0.1.0/24"]
}
module "openai" {
source = "./modules/openai"
resource_group_name = "vinay-rg"
location = "East US"
vnet_name = module.network.vnet_name
subnet_name = module.network.subnet_name
private_endpoint_name = "test_pe_endpoint"
private_service_connection_name = "test_service_connection"
}
модули/network.tf:
variable "vnet_name" {
description = "Name of the Virtual Network"
type = string
}
variable "address_space" {
description = "Address space for the Virtual Network"
type = list(string)
}
variable "location" {}
variable "resource_group_name" {}
variable "subnet_name" {}
variable "subnet_prefixes" {}
resource "azurerm_virtual_network" "test_vnet" {
name = var.vnet_name
address_space = var.address_space
location = var.location
resource_group_name = var.resource_group_name
}
resource "azurerm_subnet" "test_subnet" {
name = var.subnet_name
resource_group_name = var.resource_group_name
virtual_network_name = azurerm_virtual_network.test_vnet.name
address_prefixes = var.subnet_prefixes
}
output "subnet_name" {
value = azurerm_subnet.test_subnet.name
}
output "vnet_name" {
value = azurerm_virtual_network.test_vnet.name
}
модули/openai.tf:
provider "azurerm" {
features {}
}
module "openai" {
source = "Azure/openai/azurerm"
resource_group_name = var.resource_group_name
location = var.location
private_endpoint = {
"pe_endpoint" = {
private_dns_entry_enabled = true
dns_zone_virtual_network_link = "dns_zone_link"
is_manual_connection = false
name = var.private_endpoint_name
private_service_connection_name = var.private_service_connection_name
subnet_name = var.subnet_name
vnet_name = var.vnet_name
vnet_rg_name = var.resource_group_name
}
}
deployment = {
"text-embedding-ada-002" = {
name = "text-embedding-ada-002"
model_format = "OpenAI"
model_name = "text-embedding-ada-002"
model_version = "2"
scale_type = "Standard"
}
}
depends_on = [ var.vnet_name, var.subnet_name ]
}
variable "subnet_name" {}
variable "vnet_name" {}
variable "resource_group_name" {}
variable "location" {}
variable "private_endpoint_name" {}
variable "private_service_connection_name" {}
Развертывание:
ссылаться:
https://github.com/Azure/terraform-azurerm-openai/tree/v0.1.3/examples/azureopenai-private-endpoints
https://msandbu.org/deploy-azure-openai-using-terraform-with-private-endpoint/
Мета-аргумент depend_on — язык конфигурации | Терраформировать | Разработчик HashiCorp
Рад знать, что это работает для вас @Svet41
Большое вам спасибо за ваш подробный ответ, я пробовал depend_on внутри модуля openai, но я ставил условие на основе модуля, что, конечно, не сработало бы, потому что модули автономны и не «знают» друг о друге. Это сработало! :)