Terraform を使用して Azure Machine Learning ワークスペースを管理する

この記事では、Terraform の構成ファイルを使用して、Azure Machine Learning ワークスペースを作成して管理する方法について説明します。 Terraform のテンプレート ベースの構成ファイルを使用すると、Azure リソースの定義、作成、構成を反復的および計画的に行うことができます。 Terraform によって、リソースの状態が追跡され、リソースをクリーンアップおよび破棄できます。

Terraform の構成は、デプロイに必要なリソースが定義されているドキュメントです。 デプロイ変数を指定することもできます。 変数は、構成の使用時に入力値を指定するために使用されます。

前提条件

制限事項

  • 新しいワークスペースを作成する場合は、ワークスペースに必要なサービスを自動的に作成するか、既存のサービスを使用することができます。 ワークスペースとは異なる Azure サブスクリプション の既存のサービスを使用する場合は、それらのサービスを含むサブスクリプションに Azure Machine Learning 名前空間を登録する必要があります。 たとえば、サブスクリプション B のストレージ アカウントを使用するサブスクリプション A でワークスペースを作成する場合、ワークスペースでストレージ アカウントを使用するには、Azure Machine Learning 名前空間がサブスクリプション B に登録されている必要があります。

    Azure Machine Learning のリソース プロバイダーは、Microsoft.MachineLearningServices です。 登録されているかどうかを確認する方法や、登録方法については、記事「Azure リソース プロバイダーと種類」を参照してください。

    重要

    これは、ワークスペースの作成時に提供されるリソースである、Azure Storage アカウント、Azure Container Register、Azure Key Vault、Application Insights にのみ適用されます。

ヒント

Azure Application Insights インスタンスは、ワークスペースの作成時に作成されます。 必要に応じて、クラスターの作成後に Application Insights インスタンスを削除できます。 それを削除すると、ワークスペースから収集される情報が限定され、問題のトラブルシューティングが困難になる可能性があります。 ワークスペースによって作成された Application Insights インスタンスを削除した場合、ワークスペースを削除して再作成することなく、それを再作成することはできません。

この Application Insights インスタンスの使用方法の詳細については、「Machine Learning Web サービス エンドポイントからのデータの監視と収集」を参照してください。

Azure プロバイダーを宣言する

Azure プロバイダーを宣言する Terraform 構成ファイルを作成します。

  1. main.tf という名前で新しいファイルを作成します。 Azure Cloud Shell で作業している場合は、bash を使用します。

    code main.tf
    
  2. 以下のコードをエディターに貼り付けます。

    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. ファイルを保存し (<Ctrl>S キー)、エディターを終了します (<Ctrl>Q キー)。

ワークスペースをデプロイする

Azure Machine Learning ワークスペースを作成するには、次の Terraform 構成を使用できます。 Azure Machine Learning ワークスペースを作成するときは、依存関係として他のさまざまなサービスが必要です。 テンプレートでは、これらのワークスペースに関連付けられているリソースも指定します。 ニーズに応じて、パブリックまたはプライベート ネットワーク接続を使用するリソースを作成するテンプレートを使用できます。

Azure の一部のリソースには、グローバルに一意の名前が必要です。 次のテンプレートを使用してリソースをデプロイする前に、name 変数に一意の値を設定します。

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

トラブルシューティング

リソース プロバイダーのエラー

Azure Machine Learning ワークスペース (またはワークスペースで使用されるリソース) を作成しようとすると、次のメッセージに似たエラーが表示されることがあります。

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

ほとんどのリソースプロバイダーは自動的に登録されますが、すべてではありません。 このメッセージが表示された場合は、言及されているプロバイダーを登録する必要があります。

次の表に、Azure Machine Learning で必要なリソース プロバイダーの一覧を示します。

リソース プロバイダー 必要な理由
Microsoft.MachineLearningServices Azure Machine Learning ワークスペースの作成。
Microsoft.Storage Azure Storage アカウントは、ワークスペースの既定のストレージとして使用されます。
Microsoft.ContainerRegistry Azure Container Registry は、Docker イメージを構築するためにワークスペースによって使用されます。
Microsoft.KeyVault Azure Key Vault は、シークレットを格納するためにワークスペースによって使用されます。
Microsoft.Notebooks Azure Machine Learning コンピューティング インスタンス上の統合されたノートブック。
Microsoft.ContainerService トレーニング済みのモデルを Azure Kubernetes Service にデプロイすることを計画している場合。

Azure Machine Learning でカスタマー マネージド キーを使用することを計画している場合は、以下のサービス プロバイダーを登録する必要があります。

リソース プロバイダー 必要な理由
Microsoft.DocumentDB ワークスペースのメタデータをログに記録する Azure CosmosDB インスタンス。
Microsoft.Search Azure Search では、ワークスペースのインデックス作成機能を提供します。

Azure Machine Learning でマネージド仮想ネットワークを使用する場合は、Microsoft.Network リソース プロバイダーを登録する必要があります。 このリソース プロバイダーは、マネージド仮想ネットワークのプライベート エンドポイントを作成するときにワークスペースによって使用されます。

リソースプロバイダーの登録については、「リソースプロバイダー登録エラーの解決」を参照してください。

次の手順