Terraform을 사용하여 Azure Machine Learning 작업 영역 관리

이 문서에서는 Terraform 구성 파일을 사용하여 Azure Machine Learning 작업 영역을 만드는 방법을 알아봅니다. Terraform의 템플릿 기반 구성 파일을 사용하면 반복 가능하고 예측 가능한 방식으로 Azure 리소스를 정의하고, 만들고, 구성할 수 있습니다. Terraform은 리소스 상태를 추적하고 리소스를 정리하고 제거할 수 있습니다.

Terraform 구성 파일은 배포에 필요한 리소스를 정의하는 문서입니다. Terraform 구성은 구성을 적용할 때 입력 값을 제공하는 데 사용할 배포 변수를 지정할 수도 있습니다.

필수 조건

  • Azure Machine Learning의 무료 또는 유료 버전이 포함된 Azure 구독입니다. Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • 빠른 시작: Terraform 설치 및 구성의 지침에 따라 Terraform을 설치하고 구성했습니다.

제한 사항

  • 새 작업 영역을 만들 때 작업 영역에 필요한 서비스를 자동으로 만들거나 기존 서비스를 사용할 수 있습니다. 작업 영역과 다른 Azure 구독의 기존 서비스를 사용하려면 해당 서비스가 포함된 구독에 Azure Machine Learning 네임스페이스를 등록해야 합니다. 예를 들어, 구독 B의 스토리지 계정을 사용하는 구독 A의 작업 영역을 만드는 경우 작업 영역에서 스토리지 계정을 사용하려면 먼저 Azure Machine Learning 네임스페이스를 구독 B에 등록해야 합니다.

    Azure Machine Learning의 리소스 공급자는 Microsoft.MachineLearningServices입니다. 등록 여부를 확인하거나 등록하는 방법에 대한 자세한 내용은 Azure 리소스 공급자 및 형식을 참조하세요.

    Important

    이 정보는 작업 영역 만드는 동안 제공되는 리소스(Azure Storage 계정, Azure Container Registry, Azure Key Vault 및 Application Insights)에만 적용됩니다.

  • 작업 영역을 만드는 동안 만들어진 Application Insights 인스턴스에는 다음 제한 사항이 적용됩니다.

    Azure Application Insights 인스턴스는 작업 영역을 만들 때 만들어집니다. 원하는 경우 클러스터를 만든 후 Application Insights 인스턴스를 삭제할 수 있습니다. 이 인스턴스를 삭제하면 작업 영역에서 수집되는 정보가 제한되며, 문제를 해결하기가 더 어려워질 수 있습니다. 작업 영역에서 만들어진 Application Insights 인스턴스를 삭제하는 경우 이를 다시 만들 수 있는 유일한 방법은 작업 영역을 삭제하고 다시 만드는 것입니다.

    이 Application Insights 인스턴스 사용에 대한 자세한 내용은 Machine Learning 웹 서비스 엔드포인트에서 데이터 모니터링 및 수집을 참조하세요.

작업 영역 만들기

다음 코드가 포함된 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 작업 영역에는 다양한 다른 서비스가 종속성으로 필요합니다. 템플릿은 이러한 관련 리소스를 지정합니다. 필요에 따라 공용 또는 개인 네트워크 연결로 리소스를 만드는 템플릿을 사용하도록 선택할 수 있습니다.

참고 항목

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 컴퓨팅 인스턴스의 통합 Notebook.
Microsoft.ContainerService Azure Kubernetes Services에 학습된 모델을 배포하려는 경우.

Azure Machine Learning에서 고객 관리형 키를 사용하려는 경우 다음 서비스 공급자를 등록해야 합니다.

리소스 공급자 필요한 이유
Microsoft.DocumentDB 작업 영역의 메타데이터를 기록하는 Azure CosmosDB 인스턴스입니다.
Microsoft.Search Azure Search는 작업 영역에 대한 인덱싱 기능을 제공합니다.

Azure Machine Learning에서 관리형 가상 네트워크를 사용하려는 경우 Microsoft.Network 리소스 공급자를 등록해야 합니다. 이 리소스 공급자는 관리형 가상 네트워크에 대한 프라이빗 엔드포인트를 만들 때 작업 영역에서 사용됩니다.

리소스 공급자 등록에 대한 자세한 내용은 리소스 공급자 등록 오류 해결을 참조하세요.