Condividi tramite


Usare Terraform per creare un hub di Azure AI Foundry

Annotazioni

Le informazioni contenute in questo articolo sono specifiche di un progetto basato su hub e non si applicano a un progetto Foundry. Vedere Come si conosce il tipo di progetto disponibile? e Creare un progetto basato su hub.

Questo articolo illustra come usare Terraform per creare un hub di Azure AI Foundry , un progetto e una connessione ai servizi di intelligenza artificiale. Un hub è una posizione centrale per i data scientist e gli sviluppatori che collaborano a progetti di Machine Learning. Offre uno spazio condiviso e collaborativo per creare, eseguire il training e distribuire modelli di Machine Learning. L'hub è integrato con Azure Machine Learning e altri servizi di Azure ed è quindi la soluzione completa per le attività di Machine Learning. L'hub consente anche di gestire e monitorare le distribuzioni di intelligenza artificiale, nonché di assicurarsi che funzionino come previsto.

Terraform consente di definire, visualizzare in anteprima e distribuire l'infrastruttura cloud. Con Terraform è possibile creare file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, si crea un piano di esecuzione che consente di visualizzare in anteprima le modifiche dell'infrastruttura prima della distribuzione. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.

  • Creare un gruppo di risorse
  • Impostare un account di archiviazione
  • Definire un insieme di credenziali delle chiavi
  • Configurare i servizi di intelligenza artificiale
  • Creare un hub di Azure AI Foundry
  • Sviluppare un progetto Azure AI Foundry
  • Stabilire una connessione ai servizi di intelligenza artificiale

Prerequisiti

Implementare il codice Terraform

Annotazioni

Il codice di esempio per questo articolo si trova nel repository GitHub di Azure Terraform. È possibile visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform. Potrebbe essere necessario aggiornare le versioni del provider di risorse usate nel modello per usare le versioni più recenti disponibili.

Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure

  1. Creare una directory in cui testare ed eseguire il codice Terraform di esempio e impostarla come directory corrente.

  2. Creare un file denominato providers.tf e inserire il codice seguente.

    terraform {
      required_version = ">= 1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {
        key_vault {
          recover_soft_deleted_key_vaults    = false
          purge_soft_delete_on_destroy       = false
          purge_soft_deleted_keys_on_destroy = false
        }
        resource_group {
          prevent_deletion_if_contains_resources = false
        }
      }
    }
    
  3. Creare un file denominato main.tf e inserire il codice seguente.

    # Random pet to be used in resource group name
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    # Create a resource group
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # Retrieve information about the current Azure client configuration
    data "azurerm_client_config" "current" {}
    
    # Generate random value for unique resource naming
    resource "random_string" "example" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    # Create an Azure Key Vault resource
    resource "azurerm_key_vault" "example" {
      name                = random_string.example.result                 # Name of the Key Vault
      location            = azurerm_resource_group.example.location      # Location from the resource group
      resource_group_name = azurerm_resource_group.example.name          # Resource group name
      tenant_id           = data.azurerm_client_config.current.tenant_id # Azure tenant ID
    
      sku_name                 = "standard" # SKU tier for the Key Vault
      purge_protection_enabled = true       # Enables purge protection to prevent accidental deletion
    }
    
    # Set an access policy for the Key Vault to allow certain operations
    resource "azurerm_key_vault_access_policy" "test" {
      key_vault_id = azurerm_key_vault.example.id                 # Key Vault reference
      tenant_id    = data.azurerm_client_config.current.tenant_id # Tenant ID
      object_id    = data.azurerm_client_config.current.object_id # Object ID of the principal
    
      key_permissions = [ # List of allowed key permissions
        "Create",
        "Get",
        "Delete",
        "Purge",
        "GetRotationPolicy",
      ]
    }
    
    # Create an Azure Storage Account
    resource "azurerm_storage_account" "example" {
      name                     = random_string.example.result            # Storage account name
      location                 = azurerm_resource_group.example.location # Location from the resource group
      resource_group_name      = azurerm_resource_group.example.name     # Resource group name
      account_tier             = "Standard"                              # Performance tier
      account_replication_type = "LRS"                                   # Locally-redundant storage replication
    }
    
    # Deploy Azure AI Services resource
    resource "azurerm_ai_services" "example" {
      name                  = "exampleaiservices"                     # AI Services resource name
      location              = azurerm_resource_group.example.location # Location from the resource group
      resource_group_name   = azurerm_resource_group.example.name     # Resource group name
      sku_name              = "S0"                                    # Pricing SKU tier
      custom_subdomain_name = "exampleaiservices"                     # Custom subdomain name
    }
    
    # Create Azure AI Foundry service
    resource "azurerm_ai_foundry" "example" {
      name                = "exampleaihub"                       # AI Foundry service name
      location            = azurerm_ai_services.example.location # Location from the AI Services resource
      resource_group_name = azurerm_resource_group.example.name  # Resource group name
      storage_account_id  = azurerm_storage_account.example.id   # Associated storage account
      key_vault_id        = azurerm_key_vault.example.id         # Associated Key Vault
    
      identity {
        type = "SystemAssigned" # Enable system-assigned managed identity
      }
    }
    
    # Create an AI Foundry Project within the AI Foundry service
    resource "azurerm_ai_foundry_project" "example" {
      name               = "example"                           # Project name
      location           = azurerm_ai_foundry.example.location # Location from the AI Foundry service
      ai_services_hub_id = azurerm_ai_foundry.example.id       # Associated AI Foundry service
    
      identity {
        type = "SystemAssigned" # Enable system-assigned managed identity
      }
    }
    
  4. Creare un file denominato variables.tf e inserire il codice seguente.

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
  5. Creare un file denominato outputs.tf e inserire il codice seguente.

    output "resource_group_name" {
      value = azurerm_resource_group.example.id
    }
    
    output "workspace_name" {
      value = azurerm_ai_foundry.example.name
    }
    

Inizializzare Terraform

Per inizializzare la distribuzione di Terraform, eseguire terraform init. Questo comando scarica il provider di Azure necessario per gestire le risorse di Azure.

terraform init -upgrade

Punti principali:

  • Il parametro -upgrade aggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.

Crea un piano di esecuzione di Terraform

Eseguire terraform plan per creare un piano di esecuzione.

terraform plan -out main.tfplan

Punti principali:

  • Il comando terraform plan crea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive.
  • Il parametro facoltativo -out consente di specificare un file di output per il piano. L'uso del parametro -out garantisce che il piano esaminato sia esattamente quello applicato.

Applicare un piano di esecuzione di Terraform

Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.

terraform apply main.tfplan

Punti principali:

  • Il comando terraform apply di esempio presuppone che in precedenza sia stato eseguito terraform plan -out main.tfplan.
  • Se è stato specificato un nome file diverso per il parametro -out, usare lo stesso nome file nella chiamata a terraform apply.
  • Se non è stato usato il parametro -out, chiamare terraform apply senza parametri.

Verificare i risultati

  1. Ottenere il nome del gruppo di risorse di Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Ottenere il nome dell'area di lavoro.

    workspace_name=$(terraform output -raw workspace_name)
    
  3. Eseguire az ml workspace show per visualizzare le informazioni sulla nuova area di lavoro.

    az ml workspace show --resource-group $resource_group_name \
                         --name $workspace_name
    

Pulire le risorse

Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:

  1. Esegui terraform plan e specifica il flag destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Punti principali:

    • Il comando terraform plan crea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive.
    • Il parametro facoltativo -out consente di specificare un file di output per il piano. L'uso del parametro -out garantisce che il piano esaminato sia esattamente quello applicato.
  2. Eseguire terraform apply per applicare il piano di esecuzione.

    terraform apply main.destroy.tfplan
    

Risolvere i problemi di Terraform in Azure

Risolvere i problemi comuni relativi all'uso di Terraform in Azure.

Passaggi successivi