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

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

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

パブリックまたはプライベートの GitHub リポジトリから ARM テンプレートを使うように Azure DevTest Labs を構成できます。 次の図は、パブリック またはカスタム テンプレート リポジトリの ARM テンプレートから DevTest Labs で環境を作成する方法を示しています。 ラボのテンプレート リポジトリのセクションで、このプロセスについて詳しく説明します。

テンプレート リポジトリの ARM テンプレートを使用して DevTest Labs で環境を作成する方法を示す図。

Note

環境を作成するには、Azure Deployment Environments (ADE) を強くお勧めします。 ADE を使用すると、開発者は、プロ​​ジェクトベースのテンプレートを使用してアプリ インフラストラクチャを迅速にデプロイでき、開発チームにとって一貫性のある安全な環境が確保されます。

Azure Deployment Environments の詳細については、Azure Deployment Environments のドキュメントを参照してください。

前提条件

  • DevTest Labs でラボ環境を構成した経験があると役に立ちます。 ラボでの作業が初めての場合は、「パブリック環境設定の構成」セクションの手順を確認することから始めてください。 テンプレート リポジトリを構成する方法、パブリック環境を有効または無効にする方法、ラボを作成するテンプレートを選択する方法を理解する必要があります。

制限事項

DevTest Labs で ARM テンプレートからラボを作成する場合に考慮すべきいくつかの制限事項があります。

  • DevTest Labs では、ARM テンプレートから作成された PaaS リソースについて仮想マシン (VM) の自動シャットダウン機能はサポートされていません。

  • DevTest Labs では、ARM テンプレートの展開時にすべてのラボ ポリシーが評価されるわけではありません。 次のポリシーは評価されません。

    • ユーザーあたりの VM 数
    • ユーザーあたりの Premium VM 数
    • ユーザーあたりの Premium デスク数

    各ユーザーが最大 5 つの VM を作成できるラボ ポリシーがあるとします。 DevTest Labs で、各ユーザーは、数十の VM を作成する ARM 環境テンプレートをデプロイできます。

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

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

次の手順に従って、テンプレートから環境を作成します。

  1. Azure portal で、DevTest Labs のラボ リソースに移動します。

  2. ラボの [概要] ページで、左側のメニューの [個人用ラボ] セクションを展開し、[私の環境] を選択します。

  3. [私の環境] ページで、ツール バー [追加] を選択します。

  4. [ベースの選択] ページで、使用する ARM 環境テンプレートを選択します。

    DevTest Labs ラボ リソースで使用できるパブリック環境 ARM テンプレートを示すスクリーンショット。

  5. [追加] ウィンドウで、[環境名] を入力し、その他のパラメーター設定を構成します。

    パラメーターの種類と数は、ARM テンプレートごとに固有です。 赤のアスタリスク (*) は必須設定を示しています。 必要なすべての設定に値を入力する必要があります。

    ARM テンプレート ファイル (azuredeploy.parameters.json) の一部のパラメーター値では、[追加] ウィンドウで空白の設定フィールドが生成されます (既定値はありません)。 これらのパラメーター値には、GEN-UNIQUEGEN-UNIQUE-[N]GEN-SSH-PUB-KEYGEN-PASSWORD があります。

    SharePoint 環境用に構成する設定を含む [追加] ウィンドウを示すスクリーンショット。

    パスワードのような "セキュリティで保護された文字列" のパラメーターには、Azure Key Vault のシークレットを使用できます。 シークレットをキー コンテナーに保存し、ラボ リソースの作成時にそれらを使用する方法については、Azure Key Vault にシークレットを格納する方法に関する記事を参照してください。

  6. [追加] を選択して環境を作成します。 環境のプロビジョニングがすぐに開始されます。

    Note

    環境のプロビジョニングには、長時間かかる場合があります。 合計時間は、DevTest Labs がラボ環境の一部として作成するサービス インスタンス、VM、およびその他のリソースの数によって異なります。

  7. プロビジョニングの状態を監視するには、ラボの [私の環境] ページに戻ります。

    ラボ環境のプロビジョニング状態を表示する方法を示すスクリーンショット。

    プロビジョニングの進行中、環境の状態は [作成中] になります。 プロビジョニングが完了すると、状態が [準備完了] に変わります。 ツール バーの [最新の情報に更新] を選択してページ ビューを更新し、現在の状態を確認できます。

  8. 環境の準備ができたら、[私の環境] 一覧で環境を展開して、テンプレートによってプロビジョニングされた VM を表示できます。

    新しくプロビジョニングされた環境用に作成された VM の一覧を示すスクリーンショット。

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

    VM、ディスク、仮想ネットワークなど、すべての環境リソースを含むリソース グループを示すスクリーンショット。

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

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

テンプレート リポジトリを探す

DevTest Labs で環境を作成するための ARM テンプレートは、次の 2 つのソースから入手できます。

パブリック環境設定を構成する

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

新しいラボのパブリック環境アクセスを設定する

次の手順に従って、新しいラボのパブリック環境リポジトリ アクセスを構成します。

  1. DevTest Labs リソースを作成するプロセス中に、[基本設定] タブを選択します。

  2. [パブリック環境] オプションを [オン] に設定します。

    ラボの作成プロセス中にラボのパブリック環境リポジトリを有効にする方法を示すスクリーンショット。

既存のラボのパブリック環境アクセスを設定する

既存のラボ、または ARM テンプレートで作成したラボの場合、パブリック環境が有効になっていない可能性があります。 [このラボのパブリックな環境を有効にする] オプションを使用して、既存のラボのパブリック環境リポジトリへのアクセスを制御できます。

既存のラボのパブリック環境リポジトリ アクセスを有効または無効にするには、次の手順に従います。

  1. Azure portal で、パブリック環境アクセスを設定する DevTest Labs ラボ リソースに移動します。

  2. ラボの [概要] ページで、左側のメニューの [設定] セクションを展開し、[構成とポリシー] を選択します。

  3. [構成とポリシー] ページで、左側のメニューの [仮想マシンのベース] セクションを展開し、[パブリック環境] を選択します。

  4. [パブリック環境] ページで、[このラボのパブリックな環境を有効にする] オプションを [はい] に設定します。

    既存のラボ リソースに対してすべてのパブリック環境リポジトリを有効にする方法を示すスクリーンショット。

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

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

[このラボのパブリックな環境を有効にする] オプションを設定してラボのパブリック環境へのアクセスを制御すると、すべての環境テンプレートが既定で選択されます。 このオプション設定では、選択に基づいて環境 "すべて" へのアクセスを許可または禁止します。 一覧の選択チェックボックスを使用すると、ユーザーがアクセスできる環境を指定できます。

ラボの特定の環境のみへのアクセスを許可するには、次の手順に従います。

  1. [パブリック環境] ページで、[このラボのパブリックな環境を有効にする] オプションを [はい] に設定します。

  2. リストの特定の環境を選択解除して、ラボ ユーザーが使用できないようにします。

    ラボのパブリック環境リポジトリを選択解除してユーザーのアクセスを無効にする方法を示すスクリーンショット。

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

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

既定では、ラボ ユーザーにはパブリック環境リポジトリの閲覧者ロールが割り当てられます。 環境リソースを変更することはできず、リソースを停止または開始することもできません。

ラボ ユーザーに共同作成者ロールを付与して、環境リソースを編集できるようにするには、次の手順を使用します。

  1. Azure portal で、ユーザーのロール割り当てを調整する DevTest Labs ラボ リソースに移動します。

  2. ラボの [概要] ページで、左側のメニューの [設定] セクションを展開し、[構成とポリシー] を選択します。

  3. [構成とポリシー] ページで、左側のメニューの [設定] セクションを展開し、[Lab settings] (ラボの設定) を選択します。

  4. [Lab settings] (ラボの設定) ページで、[リ環境へのアクセス] > [ソース グループのユーザー権限] オプションを [共同作成者] に設定します。

    DevTest Labs でラボ ユーザーに共同作成者ロールのアクセス許可を設定する方法を示すスクリーンショット。

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

環境作成の自動化

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

ラボの所有者と管理者は、Azure PowerShell を使用して、ARM テンプレートから VM と環境を作成できます。 az deployment group create コマンドを使用して環境を作成することで、Azure CLI を使用してデプロイを自動化することもできます。 詳細については、「ARM テンプレートと Azure CLI でリソースをデプロイする」を参照してください。

注意

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

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

  1. ARM 環境テンプレートを GitHub リポジトリに保存します

  2. GitHub ARM テンプレート リポジトリをラボに追加します

  3. 次の 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 GitHub repository)
    [string] [Parameter(Mandatory=$true)] $TemplateName,
    
    # Name of the environment to create in the lab
    [string] [Parameter(Mandatory=$true)] $EnvironmentName,
    
    # The parameters to pass 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 is "-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 for your 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 your 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 your 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."
    
  4. スクリプト内の次のプレースホルダーを実際のラボの値に置き換えます。

    • SubscriptionId
    • LabName
    • ResourceGroupName
    • RepositoryName
    • TemplateName (GitHub リポジトリ内のテンプレート フォルダー)
    • EnvironmentName

    次のスニペットは、パラメーター値の例を使用してスクリプトを実行する方法を示しています。

    ./deployenv.ps1 -SubscriptionId "000000000-0000-0000-0000-0000000000000" -LabName "mydevtestlab" -ResourceGroupName "mydevtestlabRG000000" -RepositoryName "myRepository" -TemplateName "ARM template folder name" -EnvironmentName "myNewEnvironment"
    
  5. スクリプトを実行します。