Использование Terraform для управления ресурсами Microsoft Foundry

Используйте Terraform для автоматизации создания Microsoft Foundry ресурсов, проектов, развертываний и подключений.

Если вы уже настроили ресурс Foundry на портале Azure, вы можете export эту конфигурацию как код Terraform вместо создания конфигурации с нуля.

Для управления ресурсами Foundry можно использовать поставщик Terraform AzAPI или поставщик AzureRM . Поставщик AzAPI позволяет получить доступ ко всем конфигурациям плоскости управления Foundry, включая предварительные версии функций. Вариант AzureRM ограничен основными возможностями управления.

Файлы состояния Terraform могут включать конфиденциальные значения. Используйте безопасную серверную часть и управление доступом для сценариев использования в команде.

Совет

Конфигурации Terraform, готовые к рабочей среде, охватывающие распространенные сценарии развертывания Foundry, см. в папке infrastructure-setup-terraform в репозитории примеров Foundry. Клонируйте репозиторий и настройте конфигурации вместо начала с нуля.

Terraform включает определение, предварительную версию и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После проверки изменений примените план выполнения для развертывания инфраструктуры.

Возможности поставщика

В следующей таблице показано, какие действия поддерживаются каждым поставщиком:

Действие Поставщик AzAPI Поставщик AzureRM
Создание группы ресурсов
Создание ресурса Foundry
Настройка развертываний
Настройка проектов
Настройка подключения к знаниям и инструментам -
Настройка узла возможностей (для расширенных конфигураций инструментов, таких как стандартная настройка агента) -

Необходимые условия

Учетная запись Azure с активной подпиской. Если у вас нет, создайте учетную запись free Azure, которая включает бесплатную пробную подписку.

  • Доступ к роли, которая позволяет создать ресурс Foundry, например владелец учетной записи Foundry или владелец Foundry в подписке или группе ресурсов. Дополнительные сведения о разрешениях см. в разделе Role-based access control for Microsoft Foundry.

    Important

    Недавно были переименованы роли RBAC в Foundry. Foundry User, Foundry Owner, Foundry Account Owner и Foundry Project Manager ранее назывались пользователь Azure AI, владелец Azure AI, владелец учетной записи Azure AI и руководитель проекта Azure AI. Пока новое название внедряется, в некоторых местах вы всё ещё можете видеть прежние названия. Идентификаторы ролей и основные разрешения не меняются из-за переименования.

  • Установите и настройте Terraform.

Создание базовой конфигурации Foundry

  1. Создайте каталог для тестирования и запуска примера кода Terraform. Сделайте этот каталог текущим каталогом.

  2. Создайте файл с именем providers.tf и добавьте следующий код.

    # Setup providers
    provider "azapi" {
      subscription_id = var.subscription_id
    }
    
  3. Создайте файл с именем main.tf и добавьте следующий код.

    ## Create a random string
    ## 
    resource "random_string" "unique" {
      length      = 5
      min_numeric = 5
      numeric     = true
      special     = false
      lower       = true
      upper       = false
    }
    
    ## Create a resource group for the resources to be stored in
    ##
    resource "azapi_resource" "rg" {
      type      = "Microsoft.Resources/resourceGroups@2021-04-01"
      name      = "tf-319-basic"
      location  = var.location
    }
    
    ########## Create AI Foundry resource
    ##########
    
    ## Create the AI Foundry resource
    ##
    resource "azapi_resource" "ai_foundry" {
      type                      = "Microsoft.CognitiveServices/accounts@2025-06-01"
      name                      = "aifoundry${random_string.unique.result}"
      parent_id                 = azapi_resource.rg.id
      location                  = var.location
      schema_validation_enabled = false
    
      body = {
        kind = "AIServices"
        sku = {
          name = "S0"
        }
        identity = {
          type = "SystemAssigned"
        }
    
        properties = {
          # Support both Entra ID and API Key authentication for Cognitive Services account
          disableLocalAuth = false
    
          # Specifies that this is an AI Foundry resourceyes
          allowProjectManagement = true
    
          # Set custom subdomain name for DNS names created for this Foundry resource
          customSubDomainName = "aifoundry${random_string.unique.result}"
        }
      }
    }
    
    ## Create a deployment for OpenAI's GPT-4o in the AI Foundry resource
    ##
    resource "azapi_resource" "aifoundry_deployment_gpt_4o" {
      type      = "Microsoft.CognitiveServices/accounts/deployments@2023-05-01"
      name      = "gpt-4o"
      parent_id = azapi_resource.ai_foundry.id
      depends_on = [
        azapi_resource.ai_foundry
      ]
    
      body = {
        sku = {
          name     = "Standard"
          capacity = 1
        }
        properties = {
          model = {
            format  = "OpenAI"
            name    = "gpt-4o"
            version = "2024-11-20"
          }
        }
      }
    }
    
    ## Create AI Foundry project
    ##
    resource "azapi_resource" "ai_foundry_project" {
      type                      = "Microsoft.CognitiveServices/accounts/projects@2025-06-01"
      name                      = "project${random_string.unique.result}"
      parent_id                 = azapi_resource.ai_foundry.id
      location                  = var.location
      schema_validation_enabled = false
    
      body = {
        sku = {
          name = "S0"
        }
        identity = {
          type = "SystemAssigned"
        }
    
        properties = {
          displayName = "project"
          description = "My first project"
        }
      }
    }
    
  4. Создайте файл с именем variables.tf и добавьте следующий код.

    variable "location" {
      description = "The name of the location to provision the resources to"
      type        = string
    }
    
    variable "subscription_id" {
      type = string
    }
    

Ссылки:

Инициализация Terraform

Запустите terraform init , чтобы инициализировать развертывание Terraform. Эта команда загружает поставщика Azure, необходимого для управления ресурсами Azure.

terraform init -upgrade

Ключевые моменты:

  • Параметр -upgrade обновляет необходимые плагины поставщика до последней версии, которая соответствует ограничениям версии конфигурации.

Создайте план выполнения Terraform

Выполните terraform plan, чтобы создать план выполнения.

terraform plan -out main.tfplan

Ключевые моменты:

  • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в файлах конфигурации. Этот шаблон позволяет проверить соответствие плана выполнения ожиданиям перед внесением изменений в фактические ресурсы.
  • Необязательный -out параметр позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что именно проверенный план будет применен.

Применение плана выполнения Terraform

Запустите terraform apply, чтобы применить план реализации к облачной инфраструктуре.

terraform apply main.tfplan

Ключевые моменты:

  • Пример команды terraform apply предполагает, что ранее вы выполнили команду terraform plan -out main.tfplan.
  • Если вы указали другое имя файла для -out параметра, используйте то же имя файла в вызове terraform apply.
  • Если параметр не использовался -out , вызовите terraform apply без параметров.

Проверьте ваше развертывание

Выполните следующие команды, чтобы проверить развернутые ресурсы:

terraform state list
terraform output

Экспорт существующего ресурса в Terraform

Если вы уже настроили ресурс Foundry на портале Azure, вы можете экспортировать эту конфигурацию в виде кода Terraform. Экспорт записывает текущие параметры ресурса, включая сетевые правила, настройку идентификации и ассоциации проектов. Используйте экспортируемый код в качестве отправной точки для управления ресурсом с помощью Terraform.

  1. На портале Azure перейдите к ресурсу Foundry.

  2. В меню слева разверните Автоматизация, а затем выберите Экспорт шаблона.

    Снимок экрана левого меню ресурса Foundry с развернутой группой Automation и выбранным пунктом Export template.

  3. Перейдите на вкладку Terraform, чтобы просмотреть созданный код Terraform . Используйте вкладку AzureRM или AzApi, чтобы выбрать формат поставщика для экспорта.

    Снимок экрана страницы шаблона экспорта Foundry с выбранной вкладкой Terraform, где над подвкладками AzureRM и AzApi отображаются кнопки «Скачать», «Открыть в VS Code» и «Копировать», а ниже — сгенерированный код Terraform.

  4. Выберите "Скачать ", чтобы сохранить файл локально, открыть в VS Code , чтобы изменить его напрямую, или скопируйте код в буфер обмена.

Примечание

Экспорт может завершиться предупреждением, если некоторые типы ресурсов не поддерживают полный экспорт. Просмотрите выходные данные и укажите отсутствующие свойства вручную.

Импорт экспортированного ресурса в состояние Terraform

Чтобы с помощью Terraform в дальнейшем управлять экспортируемым ресурсом, импортируйте его в состояние Terraform. Для поставщика AzAPI:

terraform import azapi_resource.example <resource-id>

Замените <resource-id> полным идентификатором ресурса Azure, показанным в экспортируемом файле (например, /subscriptions/.../providers/Microsoft.CognitiveServices/accounts/<name>).

Настройка экспортируемой конфигурации

Экспортированный код Terraform содержит жестко закодированные значения, относящиеся к вашей подписке и группе ресурсов. Прежде чем повторно использовать конфигурацию, выполните следующие действия.

  • Замените жестко закодированные идентификаторы подписок, имена групп ресурсов и идентификаторы ресурсов переменными Terraform.
  • Удалите все свойства, которые не требуются или ссылаются на ресурсы за пределами области развертывания.
  • Добавьте или измените конфигурации безопасности в соответствии с требованиями вашей организации.

Конфигурации Terraform, готовые к работе с корпоративной безопасностью, см. в папке infrastructure-setup-terraform в репозитории примеров Foundry.

При настройке конфигурации рекомендуется добавить следующие параметры безопасности. Выберите в зависимости от требований к управлению:

Контроль Когда его добавить Узнать больше
Частные конечные точки (сетевая изоляция) Ваша организация запрещает общедоступные конечные точки или требуется сохранить трафик в виртуальной сети для соответствия требованиям (HIPAA, PCI, FedRAMP). Настройка сетевой изоляции с помощью частных конечных точек
Ключи, управляемые клиентом (CMK) для шифрования Необходимо управлять жизненным циклом ключа шифрования, периодичностью его ротации и отзывом, либо ваша классификация данных требует использования собственного ключа (BYOK, bring your own key). Настройка управляемых клиентом ключей для шифрования
Управление доступом на основе ролей (RBAC) Вам необходимо разграничить доступ с наименьшими привилегиями для разработчиков и администраторов либо предоставить доступ нескольким командам, совместно использующим ресурс Foundry. Настройка управления доступом на основе ролей для Foundry
Пользовательские определения политик Политика Azure Ваша команда платформы применяет базовый уровень безопасности (разрешённые регионы, обязательные теги, разрешённые SKU, обязательный CMK или Private Link) ко всем ресурсам Foundry, создаваемым организацией. Создание настраиваемых определений политики Azure

Настройка безопасности и соответствия требованиям

Чтобы удовлетворить требования безопасности и соответствия, настройте Foundry с помощью конфигураций безопасности и используя собственные ресурсы для хранения данных. Например, при использовании службы агента можно использовать собственную базу данных Azure Cosmos DB, экземпляр Поиск с использованием ИИ Azure и учетную запись служба хранилища Azure для хранения потоков и сообщений.

Дополнительные примеры установки см. в следующих репозиториях:

Очистка ресурсов

Если ресурсы, созданные с помощью Terraform, больше не нужны, сделайте следующее:

  1. Запустите terraform plan и укажите флаг destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Ключевые моменты:

    • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в файлах конфигурации. Этот шаблон позволяет проверить соответствие плана выполнения ожиданиям перед внесением изменений в фактические ресурсы.
    • Необязательный -out параметр позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что именно проверенный план будет применен.
  2. Чтобы применить план выполнения, запустите terraform apply.

    terraform apply main.destroy.tfplan
    

Устранение неполадок Terraform в Azure

Устранение распространенных проблем при использовании Terraform на Azure.

Дальнейшие действия