Зависимость в Terraform OpenAI и виртуальной сети/подсети

Я пытаюсь создать конечную точку 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.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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/

https://techcommunity.microsoft.com/t5/azure-architecture-blog/azure-openai-private-endpoints-connecting-across-vnet-s/ba-p/3913325

Мета-аргумент depend_on — язык конфигурации | Терраформировать | Разработчик HashiCorp

Большое вам спасибо за ваш подробный ответ, я пробовал depend_on внутри модуля openai, но я ставил условие на основе модуля, что, конечно, не сработало бы, потому что модули автономны и не «знают» друг о друге. Это сработало! :)

Svet41 28.08.2024 15:32

Рад знать, что это работает для вас @Svet41

Vinay B 28.08.2024 15:53

Другие вопросы по теме

Не удалось создать azurerm_private_endpoint, получая непредвиденный статус ошибки 400 (400 неверный запрос) с ошибкой: SubscriptionNotRegisteredForFeature:
Как использовать переменные этапа для Connection_id в aws_api_gateway_integration с Terraform?
«Превышен крайний срок контекста» после запуска приложения Terraform, но ресурс Azure все еще создан. Terraform Import хочет воссоздать ресурс
Почему я не могу использовать блок перемещения Terraform для перемещения базы данных SQL Azure на другое имя ресурса?
Конвейеры Terraform и Azure — авторизация конвейеров при подключении к службе
Как обновить балансировщик нагрузки Azure с базового до стандартного в Terraform?
Как создать секрет в клиентском приложении в Azure
Как проверить конфигурацию в Terraform перед развертыванием?
Невозможно создать правило сбора данных для аналитики журналов Azure с помощью Terraform — отсутствуют параметры Terraform?
Получение списка состояний с идентификаторами ресурсов

Похожие вопросы

Search-AzQuery запрашивает авторизационные ресурсы и возвращает 0 записей
Ошибка «Невозможно определить язык проекта по файлам» при использовании функций Azure в VSCode
Определите общедоступный исходящий IP-адрес для экземпляра блоков данных
Невозможно правильно сгенерировать изображения логотипа dalle-3 с помощью Python
Как передать лицензию Azure DevOps из одной организации в другую?
«Превышен крайний срок контекста» после запуска приложения Terraform, но ресурс Azure все еще создан. Terraform Import хочет воссоздать ресурс
Проверка подлинности на основе сертификата клиента Azure
Azure App Insights: могу ли я увидеть полные трассировки без необходимости сшивать их вручную?
Реестр контейнеров Azure недоступен через частную конечную точку [403 запрещено]
Как получить значение роли приложения с учетом идентификатора роли приложения в Entra ID с помощью Microsoft Graph Powershell?