ARM テンプレートから Azure DevTest Labs 環境を作成する

この記事では、Azure Resource Manager (ARM) テンプレートから Azure DevTest Labs 環境を作成する方法について説明します。 DevTest Labs 環境を使うと、複数の仮想マシン (VM) またはサービスとしてのプラットフォーム (PaaS) リソースを含むラボを簡単に一貫してプロビジョニングできます。 たとえば、多層 Web アプリケーションや SharePoint ファーム用のラボを作成する場合などです。

環境内のリソースは同じライフサイクルを共有し、ユーザーはそれらをまとめて管理できます。 個々のラボ VM のコストを追跡する場合と同様に、ラボ環境と PaaS リソースのコストを追跡できます。

パブリックまたはプライベートの Git リポジトリから ARM テンプレートを使うように Azure DevTest Labs を構成できます。 詳しくは、ラボ用のテンプレート リポジトリに関するセクションをご覧ください。

パブリック またはカスタム テンプレート リポジトリの ARM テンプレートから Azure DevTest Labs で環境を作成する方法を示す図。

ARM テンプレートを使って Azure DevTest Labs リソースを作成する場合は、「クイックスタート: ARM テンプレートを使用して DevTest Labs でラボを作成する」をご覧ください。

制限事項

DevTest Labs で ARM テンプレートからラボを作成する場合は、次の制限事項を考慮してください。

  • VM の自動シャットダウンは、PaaS リソースには適用されません。

  • すべてのラボ ポリシーが、ARM テンプレートのデプロイ時に評価されるわけではありません。 評価されないポリシーには、ラボ ユーザーあたりの VM の数、ユーザーあたりの Premium VM の数、ユーザーあたりの Premium デスクの数が含まれます。 たとえば、ラボ ポリシーでは、ユーザーが 1 人あたり 5 つの VM のみに制限される場合があります。 ただし、ユーザーは、数十台の VM を作成する ARM 環境テンプレートをデプロイできます。

テンプレートから環境を作成する

Azure DevTest Labs のパブリック テンプレート リポジトリから環境を作成するか、ラボにプライベート テンプレート リポジトリを追加することができます。

ラボ用の環境を構成する方法を確認してください。 たとえば、テンプレート リポジトリを構成する方法、パブリック環境を有効または無効にする方法、ラボを作成するための特定のテンプレートを選ぶ方法などです。

テンプレートから環境を作成するには、次の手順に従います。

  1. Azure portal で、お使いのラボ リソースを選びます。

  2. ラボの [概要] ページで、上部のツールバーから [追加] を選択します。

  3. [ベースの選択] ページで、使用する ARM 環境テンプレートを選択します。 使用可能な環境テンプレートは、最初にベースの一覧に表示されます。

    パブリック環境テンプレートを示すスクリーンショット。

  4. [追加] 画面で、[環境名] を入力し、他の入力フィールドを指定します。

    入力フィールドの数と種類は、ARM テンプレートで定義されています。 必要に応じて、テンプレート azuredeploy.parameters.json ファイルで空白または既定として定義されている入力フィールドに値を入力します。

    • secure string パラメーターについては、Azure Key Vault のシークレットを使用できます。 シークレットをキー コンテナーに保存し、ラボ リソースの作成時にそれらを使用する方法については、Azure Key Vault にシークレットを格納する方法に関する記事を参照してください。

    • ARM テンプレート ファイルでは、GEN-UNIQUEGEN-UNIQUE-[N]GEN-SSH-PUB-KEYGEN-PASSWORD の各パラメーター値によって、ユーザーが値を入力するための空白の入力フィールドが生成されます。

    SharePoint 環境の [追加] ペインを示すスクリーンショット。

  5. [追加] を選択して環境を作成します。

    環境のプロビジョニングがすぐに開始されます。 プロビジョニングの状態は、ラボの [概要] ページの [私の環境] で確認できます。 環境のプロビジョニングには、長時間かかる場合があります。

  6. 環境の作成が終わったら、[私の環境] で環境を展開して、テンプレートでプロビジョニングされた VM と他のリソースの一覧を表示します。

    環境下にある VM の一覧を示すスクリーンショット。

    デプロイによって、ARM テンプレートで定義されたすべての環境リソースをプロビジョニングするための新しいリソース グループが作成されます。 [私の環境] で環境名を選択して、テンプレートで作成されたリソース グループとすべてのリソースを表示します。

    リソース グループとすべての環境リソースを示すスクリーンショット。

  7. 環境 VM を選択して、構成、スケジュール、ポリシーの管理など、VM で使用可能なアクションを確認します。

    環境 VM で使用可能なアクションを示すスクリーンショット。

環境テンプレート リポジトリ

Azure DevTest Labs では、ARM テンプレートから環境を作成できます。 ARM テンプレートには次の 2 つのソースがあります。

ヒント

パブリック テンプレートのリビジョンまたは追加を提案するには、オープンソースの GitHub パブリック テンプレート リポジトリに対して pull request を送信します。

ラボ用にパブリック環境設定を構成する

パブリック テンプレート リポジトリからのテンプレートの使用を有効にするようにラボを構成できます。 ラボ用にパブリック テンプレート リポジトリを有効にすると、ユーザーは、ラボで VM を作成する方法と同様に、Azure portal でこれらのテンプレートを直接選んで環境をすばやく作成できます。

さらに、ユーザーが環境の作成に使用できるテンプレートを選ぶこともできます。

ラボの作成時にパブリック環境を有効にする

ラボを作成するときに、ラボ用にパブリック環境リポジトリ アクセスを有効にするには:

  1. DevTest Labs リソースを作成するときに、[基本設定] タブを選びます。

  2. [パブリックな環境] フィールドで [オン] を選びます。

    新しいラボのパブリック環境の有効化を示すスクリーンショット。

既存のラボのパブリック環境を有効または無効にする

既存のラボ、または ARM テンプレートで作成したラボの場合、パブリック環境が有効になっていない可能性があります。 既存のラボのパブリック環境リポジトリを有効または無効にするには、次の手順に従います。

  1. Azure portal で、お使いのラボ リソースを選びます。

  2. 左側のナビゲーションで、[構成とポリシー] を選択します。

  3. 左側のナビゲーションの [仮想マシンのベース] の下にある [パブリック環境] を選びます。

  4. [このラボのパブリックな環境を有効にする][はい] または [いいえ] を選んで、ラボのパブリック環境を有効または無効にします。

  5. [保存] を選択します。

使用可能なパブリック環境テンプレートを選択する

パブリック環境を有効にすると、リポジトリ内のすべての環境テンプレートを環境の作成に使用できるようになります。 ラボに対して特定の環境のみを許可するには:

  1. Azure portal で、お使いのラボ リソースを選びます。

  2. 左側のナビゲーションで、[構成とポリシー] を選択します。

  3. 左側のナビゲーションの [仮想マシンのベース] の下にある [パブリック環境] を選びます。

  4. 一覧で特定の環境の選択を解除し、ラボ ユーザーが使用できないようにしてから、[保存] を選びます。

    ラボのパブリック環境の一覧を示すスクリーンショット。

環境のユーザー権利を構成する

既定では、ラボ ユーザーが環境内で持っているのは閲覧者ロールであり、環境リソースを変更することはできません。 たとえば、ユーザーは、リソースを停止または開始できません。 ラボ ユーザーに共同作成者ロールを付与して、環境リソースを編集できるようにするには:

  1. Azure portal で、お使いのラボ リソースを選びます。

  2. 左側のナビゲーションで、[構成とポリシー] を選択します。

  3. 左側のナビゲーションで [ラボの設定] を選びます。

  4. [環境へのアクセス]>[リソース グループのユーザー権限] で、[共同作成者] を選んでから、[保存] を選びます。

    ラボ ユーザーの共同作成者アクセス許可の構成を示すスクリーンショット。

環境の作成を自動化する

開発またはテスト シナリオ用に複数の環境を作成する必要がある場合は、Azure PowerShell または Azure CLI を使用して環境のデプロイを自動化できます。

Azure CLI コマンド az deployment group create を使用して、環境を作成できます。 詳細については、「Deploy resources with Resource Manager templates and Azure CLI」 (Resource Manager テンプレートと Azure CLI を使用したリソースのデプロイ) を参照してください。

ラボの所有者と管理者は、Azure PowerShell を使用して、ARM テンプレートから VM と環境を作成できます。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Azure PowerShell を使用して ARM 環境テンプレートのデプロイを自動化するには、次の手順に従います。

  1. ARM 環境テンプレートを Git リポジトリにチェックインし、リポジトリをラボに追加します。

  2. 次の PowerShell スクリプトを deployenv.ps1 としてお使いのコンピューターに保存します。 このスクリプトでは、ARM テンプレートを呼び出して、ラボに環境を作成します。

    #Requires -Module Az.Resources
    
    [CmdletBinding()]
    
    param (
    # ID of the Azure subscription for the lab
    [string] [Parameter(Mandatory=$true)] $SubscriptionId,
    
    # Name of the lab in which to create the environment
    [string] [Parameter(Mandatory=$true)] $LabName,
    
    # Name of the template repository connected to the lab
    [string] [Parameter(Mandatory=$true)] $RepositoryName,
    
    # Name of the template (folder name in the Git repository)
    [string] [Parameter(Mandatory=$true)] $TemplateName,
    
    # Name of the environment to create in the lab
    [string] [Parameter(Mandatory=$true)] $EnvironmentName,
    
    # The parameters to be passed to the template. Each parameter is prefixed with "-param_".
    # For example, if the template has a parameter named "TestVMName" with a value of "MyVMName",
    # the string in $Params will be "-param_TestVMName MyVMName".
    # This convention allows the script to dynamically handle different templates.
    [Parameter(ValueFromRemainingArguments=$true)]
        $Params
    )
    
    # Sign in to Azure, or comment out this statement to completely automate environment creation.
    Connect-AzAccount
    
    # Select the subscription that has the lab.  
    Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
    
    # Get the user ID to use later in the script.
    $UserId = $((Get-AzADUser -UserPrincipalName ((Get-AzContext).Account).Id).Id)
    
    # Get the lab location.
    $lab = Get-AzResource -ResourceType "Microsoft.DevTestLab/labs" -Name $LabName
    if ($lab -eq $null) { throw "Unable to find lab $LabName in subscription $SubscriptionId." }
    
    # Get information about the repository connected to the lab.
    $repository = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
        -ResourceName $LabName `
        -ApiVersion 2016-05-15 `
        | Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($repository -eq $null) { throw "Unable to find repository $RepositoryName in lab $LabName." }
    
    # Get information about the ARM template base for the environment.
    $template = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType "Microsoft.DevTestLab/labs/artifactSources/armTemplates" `
        -ResourceName "$LabName/$($repository.Name)" `
        -ApiVersion 2016-05-15 `
        | Where-Object { $TemplateName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($template -eq $null) { throw "Unable to find template $TemplateName in lab $LabName." }
    
    # Build the template parameters by using parameter names and values.
    $parameters = Get-Member -InputObject $template.Properties.contents.parameters -MemberType NoteProperty | Select-Object -ExpandProperty Name
    $templateParameters = @()
    
    # Extract the custom parameters from $Params and format them as name/value pairs.
    $Params | ForEach-Object {
        if ($_ -match '^-param_(.*)' -and $Matches[1] -in $parameters) {
            $name = $Matches[1]                
        } elseif ( $name ) {
            $templateParameters += @{ "name" = "$name"; "value" = "$_" }
            $name = $null #reset name variable
        }
    }
    
    # Create an object to hold the necessary template properties.
    $templateProperties = @{ "deploymentProperties" = @{ "armTemplateId" = "$($template.ResourceId)"; "parameters" = $templateParameters }; }
    
    # Deploy the environment in the lab by using the New-AzResource command.
    New-AzResource -Location $Lab.Location `
        -ResourceGroupName $lab.ResourceGroupName `
        -Properties $templateProperties `
        -ResourceType 'Microsoft.DevTestLab/labs/users/environments' `
        -ResourceName "$LabName/$UserId/$EnvironmentName" `
        -ApiVersion '2016-05-15' -Force
    
    Write-Output "Environment $EnvironmentName completed."
    
  3. 独自の値を使用して次の値の例を置き換え、スクリプトを実行します。

    • SubscriptionId
    • LabName
    • ResourceGroupName
    • RepositoryName
    • TemplateName (Git リポジトリ内のテンプレート フォルダー)
    • EnvironmentName
    ./deployenv.ps1 -SubscriptionId "000000000-0000-0000-0000-0000000000000" -LabName "mydevtestlab" -ResourceGroupName "mydevtestlabRG000000" -RepositoryName "myRepository" -TemplateName "ARM template folder name" -EnvironmentName "myNewEnvironment"
    

次の手順