Azure Machine Learning-werkruimten beheren met behulp van Terraform

In dit artikel leert u hoe u een Azure Machine Learning-werkruimte maakt en beheert met behulp van Terraform-configuratiebestanden. Met de op sjablonen gebaseerde configuratiebestanden van Terraform kunt u Azure-resources op een herhaalbare en voorspelbare manier definiëren, maken en configureren. Terraform houdt de resourcestatus bij en kan resources opschonen en vernietigen.

Een Terraform-configuratie is een document dat de resources definieert die nodig zijn voor een implementatie. Het kan ook implementatievariabelen opgeven. Variabelen worden gebruikt om invoerwaarden op te geven bij het gebruik van de configuratie.

Vereisten

Beperkingen

  • Wanneer u een nieuwe werkruimte maakt, kunt u automatisch services maken die nodig zijn voor de werkruimte of bestaande services gebruiken. Als u bestaande services van een ander Azure-abonnement wilt gebruiken dan de werkruimte, moet u de Azure Machine Learning-naamruimte registreren in het abonnement dat deze services bevat. Als u bijvoorbeeld een werkruimte maakt in abonnement A die gebruikmaakt van een opslagaccount van abonnement B, moet de Azure Machine Learning-naamruimte zijn geregistreerd in abonnement B voordat u het opslagaccount met de werkruimte kunt gebruiken.

    De resourceprovider voor Azure Machine Learning is Microsoft.MachineLearningServices. Zie het artikel Azure-resourceproviders en typen voor informatie over hoe u kunt zien of deze is geregistreerd en hoe u deze registreert.

    Belangrijk

    Dit geldt alleen voor resources die worden geleverd tijdens het maken van de werkruimte; Azure Storage-accounts, Azure Container Register, Azure Key Vault en Application Insights.

Fooi

Er wordt een Azure-toepassing Insights-exemplaar gemaakt wanneer u de werkruimte maakt. U kunt het Application Insights-exemplaar verwijderen nadat het cluster is gemaakt. Als u deze verwijdert, worden de gegevens die zijn verzameld uit de werkruimte beperkt en kan het lastiger zijn om problemen op te lossen. Als u het Application Insights-exemplaar verwijdert dat door de werkruimte is gemaakt, kunt u deze niet opnieuw maken zonder de werkruimte te verwijderen en opnieuw te maken.

Zie Gegevens van Machine Learning-webservice-eindpunten bewaken en verzamelen voor meer informatie over het gebruik van dit Application Insights-exemplaar.

De Azure-provider declareren

Maak het Terraform-configuratiebestand dat de Azure-provider declareert:

  1. Maak een nieuw bestand met de naam main.tf. Als u met Azure Cloud Shell werkt, gebruikt u bash:

    code main.tf
    
  2. Plak de volgende code in de 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. Sla het bestand (<Ctrl>S) op en sluit de editor (<Ctrl>Q).

Een werkruimte implementeren

De volgende Terraform-configuraties kunnen worden gebruikt om een Azure Machine Learning-werkruimte te maken. Wanneer u een Azure Machine Learning-werkruimte maakt, zijn verschillende andere services vereist als afhankelijkheden. De sjabloon geeft ook deze gekoppelde resources aan de werkruimte op. Afhankelijk van uw behoeften kunt u ervoor kiezen om de sjabloon te gebruiken waarmee resources worden gemaakt met een openbare of persoonlijke netwerkverbinding.

Voor sommige resources in Azure zijn wereldwijd unieke namen vereist. Voordat u uw resources implementeert met behulp van de volgende sjablonen, stelt u de name variabele in op een waarde die uniek is.

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

Problemen oplossen

Fouten met resourceprovider

Wanneer u een Azure Machine Learning-werkruimte maakt of een resource die door de werkruimte wordt gebruikt, ontvangt u mogelijk een foutbericht die op een van de volgende berichten lijkt:

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

De meeste resourceproviders worden automatisch geregistreerd, maar niet allemaal. Als u dit bericht ontvangt, moet u de vermelde provider registreren.

De volgende tabel bevat een lijst met de resourceproviders die vereist zijn voor Azure Machine Learning:

Resourceprovider Waarom dit nodig is
Microsoft.MachineLearningServices De Azure Machine Learning-werkruimte maken.
Microsoft.Storage Azure Storage-account wordt gebruikt als de standaardopslag voor de werkruimte.
Microsoft.ContainerRegistry Azure Container Registry wordt door de werkruimte gebruikt om Docker-installatiekopieën te bouwen.
Microsoft.KeyVault Azure Key Vault wordt door de werkruimte gebruikt om geheimen op te slaan.
Microsoft.Notebooks Geïntegreerde notebooks in een Azure Machine Learning-rekenproces.
Microsoft.ContainerService Als u van plan bent getrainde modellen te implementeren in Azure Kubernetes Services.

Als u van plan bent om een door de klant beheerde sleutel te gebruiken met Azure Machine Learning, moeten de volgende serviceproviders zijn geregistreerd:

Resourceprovider Waarom dit nodig is
Microsoft.DocumentDB Azure CosmosDB-exemplaar dat metagegevens voor de werkruimte registreert.
Microsoft.Search Azure Search biedt indexeringsmogelijkheden voor de werkruimte.

Als u van plan bent om een beheerd virtueel netwerk te gebruiken met Azure Machine Learning, moet de resourceprovider Microsoft.Network worden geregistreerd. Deze resourceprovider wordt door de werkruimte gebruikt bij het maken van privé-eindpunten voor het beheerde virtuele netwerk.

Zie Fouten oplossen voor de registratie van de resourceprovider voor informatie over het registreren van resourceproviders.

Volgende stappen