Gestire aree di lavoro di Azure Machine Learning usando Terraform

Questo articolo illustra come creare un’area di lavoro di Azure Machine Learning usando i file di configurazione di Terraform. I file di configurazione basati su modelli di Terraform consentono di definire, creare e configurare le risorse di Azure in modo ripetibile e prevedibile. Terraform tiene traccia dello stato delle risorse e può pulire ed eliminare risorse.

Un file di configurazione di Terraform è un documento che definisce le risorse necessarie per una distribuzione. La configurazione di Terraform può anche specificare le variabili di distribuzione da usare per fornire valori di input quando si applica la configurazione.

Prerequisiti

Limiti

  • Quando si crea una nuova area di lavoro, è possibile creare automaticamente i servizi necessari per l’area di lavoro o usare i servizi esistenti. Se si vogliono usare i servizi esistenti di una sottoscrizione di Azure diversa rispetto all'area di lavoro, è necessario registrare lo spazio dei nomi di Azure Machine Learning nella sottoscrizione che contiene tali servizi. Ad esempio, se si crea un’area di lavoro nella sottoscrizione A che usa un account di archiviazione nella sottoscrizione B, lo spazio dei nomi di Azure Machine Learning deve essere registrato nella sottoscrizione B prima che l’area di lavoro possa usare l’account di archiviazione.

    Il provider di risorse per Azure Machine Learning è Microsoft.MachineLearningServices. Per informazioni sul controllo di una registrazione o per eseguire una registrazione, vedere Provider e tipi di risorse di Azure.

    Importante

    Queste informazioni si applicano solo alle risorse fornite durante la creazione dell’area di lavoro: account di Archiviazione di Azure, Registro Azure Container, Azure Key Vault e Application Insights.

  • La limitazione seguente si applica all’istanza di Application Insights creata durante la creazione dell’area di lavoro:

    Suggerimento

    Quando si crea l'area di lavoro, viene creata un'istanza di Azure Application Insights. Se necessario, è possibile eliminare l'istanza di Application Insights dopo la creazione del cluster. L’eliminazione limita le informazioni raccolte dall’area di lavoro e potrebbe rendere più difficile la risoluzione dei problemi. Se si elimina l’istanza di Application Insights creata dall’area di lavoro, l’unico modo per ricrearla consiste nell’eliminare e ricreare l’area di lavoro.

    Per altre informazioni sull’uso dell’istanza di Application Insights, vedere Monitorare e raccogliere dati dagli endpoint del servizio Web di Machine Learning.

Creare l'area di lavoro

Creare un file chiamato main.tf con il codice seguente.

data "azurerm_client_config" "current" {}

resource "azurerm_resource_group" "default" {
  name     = "${random_pet.prefix.id}-rg"
  location = var.location
}

resource "random_pet" "prefix" {
  prefix = var.prefix
  length = 2
}

resource "random_integer" "suffix" {
  min = 10000000
  max = 99999999
}

Dichiarare il provider di Azure in un file chiamato providers.tf con il codice seguente.

terraform {
  required_version = ">= 1.0"

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0, < 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
    }
  }
}

Configurare l'area di lavoro

Per creare un’area di lavoro di Azure Machine Learning, usare una delle configurazioni di Terraform seguenti. Un’area di lavoro di Azure Machine Learning richiede diversi altri servizi come dipendenze. Il modello specifica queste risorse associate. A seconda delle esigenze, è possibile scegliere di usare un modello che crea risorse con connettività di rete pubblica o privata.

Nota

Alcune risorse in Azure richiedono nomi univoci globali. Prima di distribuire le risorse, assicurarsi di impostare variabili name su valori univoci.

La configurazione seguente crea un’area di lavoro con connettività di rete pubblica.

Definire le variabili seguenti in un file chiamato variables.tf.

variable "environment" {
  type        = string
  description = "Name of the environment"
  default     = "dev"
}

variable "location" {
  type        = string
  description = "Location of the resources"
  default     = "eastus"
}

variable "prefix" {
  type        = string
  description = "Prefix of the resource name"
  default     = "ml"
}

Definire la configurazione dell’area di lavoro seguente in un file chiamato workspace.tf:

# Dependent resources for Azure Machine Learning
resource "azurerm_application_insights" "default" {
  name                = "${random_pet.prefix.id}-appi"
  location            = azurerm_resource_group.default.location
  resource_group_name = azurerm_resource_group.default.name
  application_type    = "web"
}

resource "azurerm_key_vault" "default" {
  name                     = "${var.prefix}${var.environment}${random_integer.suffix.result}kv"
  location                 = azurerm_resource_group.default.location
  resource_group_name      = azurerm_resource_group.default.name
  tenant_id                = data.azurerm_client_config.current.tenant_id
  sku_name                 = "premium"
  purge_protection_enabled = false
}

resource "azurerm_storage_account" "default" {
  name                            = "${var.prefix}${var.environment}${random_integer.suffix.result}st"
  location                        = azurerm_resource_group.default.location
  resource_group_name             = azurerm_resource_group.default.name
  account_tier                    = "Standard"
  account_replication_type        = "GRS"
  allow_nested_items_to_be_public = false
}

resource "azurerm_container_registry" "default" {
  name                = "${var.prefix}${var.environment}${random_integer.suffix.result}cr"
  location            = azurerm_resource_group.default.location
  resource_group_name = azurerm_resource_group.default.name
  sku                 = "Premium"
  admin_enabled       = true
}

# Machine Learning workspace
resource "azurerm_machine_learning_workspace" "default" {
  name                          = "${random_pet.prefix.id}-mlw"
  location                      = azurerm_resource_group.default.location
  resource_group_name           = azurerm_resource_group.default.name
  application_insights_id       = azurerm_application_insights.default.id
  key_vault_id                  = azurerm_key_vault.default.id
  storage_account_id            = azurerm_storage_account.default.id
  container_registry_id         = azurerm_container_registry.default.id
  public_network_access_enabled = true

  identity {
    type = "SystemAssigned"
  }
}

Creare e applicare il piano

Per creare l’area di lavoro, eseguire il codice seguente:

terraform init

terraform plan \
        # -var <any of the variables set in variables.tf> \
          -out demo.tfplan

terraform apply "demo.tfplan"

Risolvere gli errori del provider di risorse

Quando si crea un'area di lavoro di Azure Machine Learning o una risorsa usata dall'area di lavoro, è possibile che venga visualizzato un errore simile ai messaggi seguenti:

  • No registered resource provider found for location {location}
  • The subscription is not registered to use namespace {resource-provider-namespace}

Molti provider di risorse vengono registrati automaticamente, ma non tutti. Se si riceve questo messaggio, è necessario registrare il provider indicato.

La tabella seguente contiene un elenco dei provider di risorse richiesti da Azure Machine Learning:

Provider di risorse Perché è necessario
Microsoft.MachineLearningServices Creazione dell'area di lavoro di Azure Machine Learning.
Microsoft.Storage L'account di Archiviazione di Azure viene usato come risorsa di archiviazione predefinita per l'area di lavoro.
Microsoft.ContainerRegistry Registro Azure Container viene usato dall'area di lavoro per compilare immagini Docker.
Microsoft.KeyVault Azure Key Vault viene usato dall'area di lavoro per archiviare i segreti.
Microsoft.Notebooks Notebook integrati nell'istanza di ambiente di calcolo di Azure Machine Learning.
Microsoft.ContainerService Se si prevede di distribuire modelli sottoposti a training nei servizi Azure Kubernetes.

Se si prevede di usare una chiave gestita dal cliente con Azure Machine Learning, è necessario registrare i provider di servizi seguenti:

Provider di risorse Perché è necessario
Microsoft.DocumentDB Istanza di Azure CosmosDB che registra i metadati per l'area di lavoro.
Microsoft.Search Ricerca cognitiva di Azure offre funzionalità di indicizzazione per l'area di lavoro.

Se si prevede di usare una rete virtuale gestita con Azure Machine Learning, è necessario registrare il provider di risorse Microsoft.Network. Questo provider di risorse viene usato dall'area di lavoro quando si creano endpoint privati per la rete virtuale gestita.

Per informazioni sulla registrazione dei provider di risorse, vedere Risoluzione degli errori di registrazione del provider di risorse.