Azure Resource Manager テンプレートを使用して Azure Machine Learning のワークスペースを作成します。

この記事では、Azure Resource Manager テンプレートを使用して Azure Machine Learning ワークスペースを作成するさまざまな方法について説明します。 Resource Manager テンプレートを使用すると、1 つの調整された操作でリソースを簡単に作成できます。 テンプレートは、デプロイに必要なリソースを定義する JSON ドキュメントです。 デプロイ パラメーターを指定することもできます。 パラメーターは、テンプレートの使用時に入力値を指定するために使用します。

詳細については、「 Azure リソース マネージャーのテンプレートを使用したアプリケーションのデプロイ」を参照してください。

前提条件

制限事項

  • 新しいワークスペースを作成する場合は、ワークスペースに必要なサービスを自動的に作成するか、既存のサービスを使用することができます。 ワークスペースとは異なる 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 Machine Learning の最新の API バージョンが常に使用されているわけではありません。 テンプレートを使用する前に、最新の API バージョンを使用するようにそのテンプレートを変更することをお勧めします。 Azure Machine Learning の最新の API バージョンについて詳しくは、「Azure Machine Learning REST API」を参照してください。

    ヒント

    各 Azure サービスには、独自の API バージョンのセットがあります。 特定のサービスの API の詳細については、Azure REST API リファレンスのサービス情報を確認してください。

    API バージョンを更新するには、そのリソースの種類の "apiVersion": "YYYY-MM-DD" エントリを見つけ、それを最新バージョンに更新します。 次の例は、Azure Machine Learning のエントリです。

    "type": "Microsoft.MachineLearningServices/workspaces",
    "apiVersion": "2023-10-01",
    

同じ VNet 内の複数のワークスペース

このテンプレートでは、同じ VNet 内での複数の Azure Machine Learning ワークスペースのデプロイはサポートされません。 これは、デプロイ中にテンプレートによって新しい DNS ゾーンが作成されるためです。

同じ VNet に複数のワークスペースをデプロイするテンプレートを作成する場合は、(Azure Portal または CLI を使用して) 手動で設定し、Azure portal を使用してテンプレートを生成します

ワークスペースの Resource Manager テンプレート

このドキュメント全体で使用する Azure Resource Manager テンプレートは、Azure クイックスタート テンプレートの GitHub リポジトリの microsoft.machineleaerningservices/machine-learning-workspace-vnet ディレクトリにあります。

このテンプレートでは、次の Azure サービスが作成されます。

  • Azure Storage アカウント
  • Azure Key Vault
  • Azure Application Insights
  • Azure Container Registry
  • Azure Machine Learning ワークスペース

リソース グループは、サービスを保持するコンテナーです。 Azure Machine Learning ワークスペースにはさまざまなサービスが必要です。

サンプルのテンプレートには、次に示す 2 つの必須パラメーターがあります。

  • location は、リソースが作成される場所です。

    このテンプレートでは、大部分のリソース用に選択する場所が使用されます。 例外は Application Insights サービスです。このサービスは、他のサービスが存在するすべての場所で使用できません。 使用できない場所を選択すると、米国中南部の場所にサービスが作成されます。

  • workspaceName は、Azure Machine Learning ワークスペースのフレンドリ名です。

    注意

    ワークスペース名では、大文字と小文字は区別されません。

    その他のサービスの名前はランダムに生成されます。

ヒント

このドキュメントに関連付けられているテンプレートでは新しい Azure コンテナー レジストリが作成されますが、コンテナー レジストリを作成せずに新しいワークスペースを作成することもできます。 コンテナー レジストリが必要な操作を実行すると、それが 1 つ作成されます。 たとえば、モデルのトレーニングやデプロイなどです。

新しいコンテナー レジストリまたはストレージ アカウントを作成するのではなく、Azure Resource Manager テンプレートで既存のものを参照することもできます。 これを行う場合、マネージド ID を使用するか (プレビュー)、コンテナー レジストリの管理者アカウントを有効にする必要があります。

警告

いったん、Azure Container Registry をワークスペースに対して作成したら、削除しないでください。 それを行うと、Azure Machine Learning ワークスペースが破損します。

テンプレートの詳細については、次の記事を参照してください。

テンプレートのデプロイ

テンプレートをデプロイするには、リソース グループを作成する必要があります。

グラフィカル ユーザー インターフェイスを使用する場合は、Azure portal に関するセクションを参照してください。

az group create --name "examplegroup" --location "eastus"

リソース グループが正常に作成されたら、次のコマンドを使用してテンプレートをデプロイします。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" location="eastus"

既定では、テンプレートの一部として作成されるすべてのリソースは新規です。 ただし、既存のリソースを使用することもできます。 テンプレートに追加のパラメーターを指定することで、既存のリソースを使用できます。 たとえば、既存のストレージ アカウントを使用する場合は、storageAccountOption の値を existing に設定し、storageAccountName パラメーターにストレージ アカウントの名前を指定します。

重要

既存の Azure Storage アカウントを使用する場合は、Premium アカウント (Premium_LRS と Premium_GRS) にすることはできません。 また、階層的名前空間 (Azure Data Lake Storage Gen2 で使用されます) を含めることもできません。 ワークスペースの既定のストレージ アカウントでは、Premium Storage と階層型名前空間はサポートされていません。 ワークスペースの既定のストレージ アカウントでは、Premium Storage と階層型名前空間はサポートされていません。 "既定以外" のストレージ アカウントでは、Premium Storage または階層型名前空間を使用できます。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      storageAccountOption="existing" \
      storageAccountName="existingstorageaccountname"

暗号化ワークスペースのデプロイ

次のテンプレート例では、3 つの設定を使用してワークスペースを作成する方法を示します。

  • ワークスペースの高機密性の設定を有効にする。 これにより、新しい Azure Cosmos DB インスタンスが作成されます。
  • ワークスペースの暗号化を有効にする。
  • 既存の Azure Key Vault を使用して、カスタマー マネージド キーを取得する。 カスタマー マネージド キーは、ワークスペースの新しい Azure Cosmos DB インスタンスを作成するために使用されます。

重要

ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。

詳細については、カスタマー マネージド キーに関するセクションを参照してください。

重要

このテンプレートを使用する前に、サブスクリプションで満たしている必要がある特定の要件がいくつかあります。

  • 暗号化キーを含む既存の Azure Key Vault が必要です。
  • Azure Key Vault は、Azure Machine Learning ワークスペースの作成を計画しているリージョンと同じリージョンにある必要があります。
  • Azure Key Vault の ID と、暗号化キーの URI を指定する必要があります。

コンテナーとキーを作成する手順については、カスタマー マネージド キーの構成に関するページを参照してください。

cmk_keyvault (Key Vault の ID) およびこのテンプレートで必要な resource_cmk_uri (キー URI) パラメーターの値を取得するには、次の手順を使用します。

  1. Key Vault ID を取得するには、次のコマンドを使用します。

    az keyvault show --name <keyvault-name> --query 'id' --output tsv    
    

    このコマンドでは /subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name> のような値が返されます。

  2. カスタマー マネージド キーの URI の値を取得するには、次のコマンドを使用します。

    az keyvault key show --vault-name <keyvault-name> --name <key-name> --query 'key.kid' --output tsv    
    

このコマンドでは https://mykeyvault.vault.azure.net/keys/mykey/{guid} のような値が返されます。

重要

ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。

カスタマー マネージド キーの使用を有効にするには、テンプレートをデプロイするときに次のパラメーターを設定します。

  • encryption_statusEnabled
  • cmk_keyvault を、前の手順で取得した cmk_keyvault の値に
  • resource_cmk_uri を、前の手順で取得した resource_cmk_uri の値に
az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      encryption_status="Enabled" \
      cmk_keyvault="/subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>" \
      resource_cmk_uri="https://mykeyvault.vault.azure.net/keys/mykey/{guid}" \

カスタマー マネージド キーを使用する場合、Azure Machine Learning により、Azure Cosmos DB インスタンスを含むセカンダリ リソース グループが作成されます。 詳細については、「Azure Cosmos DB での保存時の暗号化」を参照してください。

データに対して提供できる追加の構成は、confidential_data パラメーターを true に設定することです。 これにより、次の処理が行われます。

  • サブスクリプションで以前にクラスターを作成していない場合に、Azure Machine Learning コンピューティング クラスターに対してローカル スクラッチ ディスクの暗号化を開始します。 以前にサブスクリプションでクラスターを作成したことがある場合は、サポート チケットを開き、ご利用のコンピューティング クラスターでスクラッチ ディスクの暗号化を有効にします。

  • ジョブとジョブの間にローカル スクラッチ ディスクをクリーンアップします。

  • キー コンテナーを使用して、ストレージ アカウント、コンテナー レジストリ、SSH アカウントの資格情報を実行層からコンピューティング クラスターに安全に渡します。

  • AzureMachineLearningService 以外の外部サービスから基になる Batch プールを呼び出すことができないように、IP フィルタリングを有効にします。

    重要

    ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。

    詳細については、「保存時の暗号化」を参照してください。

仮想ネットワークの背後にワークスペースをデプロイする

vnetOption パラメーターの値を new または existing に設定すると、ワークスペースが使用するリソースを仮想ネットワークの背後に作成できます。

重要

コンテナー レジストリでは、"Premium" SKU のみがサポートされます。

重要

Application Insights では、仮想ネットワークの背後へのデプロイはサポートされていません。

プライベート エンドポイントの背後にのみワークスペースをデプロイする

関連付けられたリソースが仮想ネットワークの背後にない場合、privateEndpointType パラメーターを AutoAproval または ManualApproval に設定すると、ワークスペースをプライベート エンドポイントの背後にデプロイできます。 これは、新規および既存のワークスペースの両方に対して行うことができます。 既存のワークスペースを更新する場合は、テンプレート パラメーターに既存のワークスペースの情報を入力します。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      privateEndpointType="AutoApproval"

新しい仮想ネットワークを使用する

新しい仮想ネットワークの背後にリソースをデプロイするには、それぞれのリソースの仮想ネットワーク設定と共に vnetOptionnew に設定します。 次のデプロイは、ワークスペースをストレージ アカウント リソースと共に新しい仮想ネットワークの背後にデプロイする方法を示しています。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true"
      privateEndpointType="AutoApproval"

または、複数のリソースまたはすべての依存リソースを仮想ネットワークの背後にデプロイできます。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium"
      privateEndpointType="AutoApproval"

既存の仮想ネットワークとリソースを使用する

既存の関連付けられたリソースと共にワークスペースをデプロイするには、サブネット パラメーターと共に vnetOption パラメーターを existing に設定する必要があります。 ただし、デプロイの前に、各リソースの仮想ネットワークにサービス エンドポイントを作成する必要があります。 新しい仮想ネットワークのデプロイと同様に、1 つまたはすべてのリソースを仮想ネットワークの背後にデプロイできます。

重要

サブネットには Microsoft.Storage サービス エンドポイントが必要です。

重要

サブネットでは、プライベート エンドポイントの作成は許可されていません。 サブネットを有効にするには、プライベート エンドポイントを無効にします。

  1. リソースのサービス エンドポイントを有効にします。

    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.Storage"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.KeyVault"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.ContainerRegistry"
    
  2. ワークスペースをデプロイする

    az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="existing" \
      vnetName="examplevnet" \
      vnetResourceGroupName="examplegroup" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium" \
      subnetName="examplesubnet" \
      subnetOption="existing"
      privateEndpointType="AutoApproval"
    

Azure ポータルの使用

  1. カスタム テンプレートからリソースをデプロイする」の手順に従います。 [テンプレートの選択] 画面に到達したら、 [クイックスタート] エントリを選択します。 表示されたら、[ここをクリックして、テンプレート リポジトリを開いてください] というリンクを選択します。 このリンクを使用すると、Azure クイックスタート テンプレート リポジトリの quickstarts ディレクトリに移動できます。

  2. クイックスタート テンプレートの一覧で、microsoft.machinelearningservices を選択します。 最後に、Deploy to Azure を選択します。

  3. テンプレートが表示されたら、デプロイのシナリオに応じて、以下の必須情報とその他のパラメーターを指定します。

    • サブスクリプション:これらのリソースに使用する Azure サブスクリプションを選択します。
    • リソース グループ: サービスが含まれるリソース グループを選択または作成します。
    • リージョン:リソースが作成される Azure リージョンを選択します。
    • ワークスペース名: 作成される Azure Machine Learning ワークスペースに使用する名前。 ワークスペース名は 3 から 33 文字で指定する必要があります。 使用できるのは英数字と "-" のみです。
    • 場所:リソースを作成する場所を選択します。
  4. [Review + create](レビュー + 作成) を選択します。

  5. [Review + create](レビュー + 作成) 画面で、表示された使用条件に同意して [作成] を選択します。

詳細については、「カスタム テンプレートからリソースをデプロイする」を参照してください。

トラブルシューティング

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

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

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

Azure Key Vault アクセス ポリシーと Azure Resource Manager テンプレート

これは、Azure Resource Manager テンプレートを使用してワークスペースおよび関連付けられたリソース (Azure Key Vault など) を複数回作成する場合があります。 たとえば、継続的インテグレーションおよびデプロイ パイプラインの一部として同じパラメーターを指定して、テンプレートを複数回使用する場合が挙げられます。

テンプレートによるリソース作成操作のほとんどはべき等操作ですが、テンプレートを使用するたびに Key Vault によってアクセス ポリシーはクリアされます。 アクセス ポリシーをクリアすると、それを使用している既存のワークスペース用の Key Vault へのアクセスは中断されます。 たとえば、Azure Notebooks VM の停止/作成機能が失敗することがあります。

この問題を回避するには、次のいずれかのアプローチをお勧めします。

  • パラメーターが同じである場合は、テンプレートを複数回デプロイしないでください。 または、テンプレートを使用してリソースを作成する前に、既存の同じものを削除してください。

  • Key Vault のアクセス ポリシーを調べ、これらのポリシーを使用してテンプレートの accessPolicies プロパティを設定します。 アクセス ポリシーを表示するには、次の Azure CLI コマンドを使用します。

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query properties.accessPolicies
    

    テンプレートの accessPolicies セクションの使用方法の詳細については、accessPoliciesを参照してください。

  • Key Vault リソースが既に存在しているかどうかを確認します。 存在している場合は、テンプレートを使ってそれを再作成しないでください。 たとえば、新規作成するのではなく、既存の Key Vault を使用するには、テンプレートに次の変更を加えます。

    • 既存の Key Vault リソースの ID を受け入れるパラメーターを追加します。

      "keyVaultId":{
        "type": "string",
        "metadata": {
          "description": "Specify the existing Key Vault ID."
        }
      }
      
    • Key Vault リソースを作成するセクションを削除します。

      {
        "type": "Microsoft.KeyVault/vaults",
        "apiVersion": "2018-02-14",
        "name": "[variables('keyVaultName')]",
        "location": "[parameters('location')]",
        "properties": {
          "tenantId": "[variables('tenantId')]",
          "sku": {
            "name": "standard",
            "family": "A"
          },
          "accessPolicies": [
          ]
        }
      },
      
    • ワークスペースの dependsOn セクションから "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]", の行を削除します。 また、keyVaultId パラメーターを参照するために、ワークスペースの properties セクションの keyVault エントリを変更します。

      {
        "type": "Microsoft.MachineLearningServices/workspaces",
        "apiVersion": "2019-11-01",
        "name": "[parameters('workspaceName')]",
        "location": "[parameters('location')]",
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
          "[resourceId('Microsoft.Insights/components', variables('applicationInsightsName'))]"
        ],
        "identity": {
          "type": "systemAssigned"
        },
        "sku": {
          "tier": "[parameters('sku')]",
          "name": "[parameters('sku')]"
        },
        "properties": {
          "friendlyName": "[parameters('workspaceName')]",
          "keyVault": "[parameters('keyVaultId')]",
          "applicationInsights": "[resourceId('Microsoft.Insights/components',variables('applicationInsightsName'))]",
          "storageAccount": "[resourceId('Microsoft.Storage/storageAccounts/',variables('storageAccountName'))]"
        }
      }
      

    これらの変更が完了したら、テンプレートを実行するときに既存の Key Vault リソースの ID を指定できます。 その後、テンプレートは、ワークスペースの keyVault プロパティをその ID に設定することによって、Key Vault を再利用します。

    Key Vault の ID を取得するには、元のテンプレート ジョブの出力を参照するか、Azure CLI を使用します。 次のコマンドは、Azure CLI を使用して Key Vault リソースの ID を取得する例です。

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query id
    

    このコマンドにより、次のテキストのような値が返されます。

    /subscriptions/{subscription-guid}/resourceGroups/myresourcegroup/providers/Microsoft.KeyVault/vaults/mykeyvault
    

次のステップ