Gestire le aree di lavoro di Azure Machine Learning con Terraform

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

Una configurazione Terraform è un documento che definisce le risorse necessarie per una distribuzione. Può anche specificare le variabili di distribuzione. Le variabili vengono usate per fornire valori di input quando si usa la configurazione.

Prerequisiti

Limiti

  • Quando si crea una nuova area di lavoro, è possibile creare automaticamente i servizi necessari o usare quelli 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 della sottoscrizione B, lo spazio dei nomi di Azure Machine Learning deve essere registrato nella sottoscrizione B prima che sia possibile usare l'account di archiviazione con l'area di lavoro.

    Il provider di risorse per Azure Machine Learning è Microsoft.MachineLearningServices. Per informazioni su come verificare se è registrato e come registrarlo, vedere l'articolo Provider e tipi di risorse di Azure.

    Importante

    Questo vale solo per le risorse fornite durante la creazione dell'area di lavoro: Account di Archiviazione di Azure, Registro Azure Container, Azure Key Vault e Application Insights.

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 può rendere più difficile la risoluzione dei problemi. Se si elimina l'istanza di Application Insights creata dall'area di lavoro, non è possibile ricrearla senza eliminare e ricreare l'area di lavoro.

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

Dichiarare il provider di Azure

Creare il file di configurazione Terraform che dichiara il provider di Azure:

  1. Creare un file denominato main.tf. Se si usa Azure Cloud Shell, usare bash:

    code main.tf
    
  2. Incollare il codice seguente nell'editor:

    main.tf:

    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
    }
    
  3. Salvare il file (<CTRL>S) e uscire dall'editor (<CTRL>Q).

Distribuire un'area di lavoro

Per creare un'area di lavoro di Azure Machine Learning, è possibile usare le configurazioni Terraform seguenti. Quando si crea un'area di lavoro di Azure Machine Learning, sono necessari vari altri servizi come dipendenze. Il modello specifica anche queste risorse associate all'area di lavoro. A seconda delle esigenze, è possibile scegliere di usare il modello che crea risorse con connettività di rete pubblica o privata.

Alcune risorse in Azure richiedono nomi univoci globali. Prima di distribuire le risorse usando i modelli seguenti, impostare la variabile name su un valore univoco.

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"
}

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"
  }
}

Risoluzione dei problemi

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.

Passaggi successivi