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

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

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

前提条件

制限事項

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

    Azure Machine Learning のリソース プロバイダーは、Microsoft.MachineLearningServices です。 それが登録済みかどうか確認する方法、またはそれを登録する方法については、「Azure リソース プロバイダーと種類」をご覧ください。

    重要

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

  • ワークスペースの作成時に作成される Application Insights インスタンスには、次の制限が適用されます。

    ヒント

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

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

ワークスペースの作成

次のコードを含む 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
}

次のコードを含む providers.tf という名前のファイルで、Azure プロバイダーを宣言します。

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

ワークスペースを構成します。

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

Note

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

プランを作成して適用する

ワークスペースを作成するには、次のコードを実行します。

terraform init

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

terraform apply "demo.tfplan"

リソース プロバイダーのエラーのトラブルシューティング

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 リソース プロバイダーを登録する必要があります。 このリソース プロバイダーは、マネージド仮想ネットワークのプライベート エンドポイントを作成するときにワークスペースによって使用されます。

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