Azure DevTest Labs 環境を使用すると、複数の仮想マシン (VM) とサービスとしてのプラットフォーム (PaaS) リソースを使用してラボを簡単かつ一貫してプロビジョニングできます。 この記事では、 Azure Resource Manager (ARM) テンプレートから DevTest Labs 環境を作成する方法について説明します。 この方法を使用して、多層 Web アプリケーションまたは SharePoint ファーム用のラボを作成できます。
DevTest Labs 環境のリソースは、同じライフサイクルを共有します。 それらを一緒に管理し、個々の VM のコストを追跡するのと同じように、ラボ環境内の個々の PaaS リソースのコストを追跡できます。
パブリックまたはプライベートの Git テンプレート リポジトリから ARM 環境テンプレートを使用するようにラボを構成できます。 次の図は、DevTest Labs がパブリック リポジトリまたはプライベート リポジトリの ARM テンプレートを使用して、VM やその他のリソースを含む環境をデプロイする方法を示しています。
Note
エンタープライズ全体の PaaS リソース、ポリシー、セキュリティ設定、またはデプロイ ステージとアプリケーション間の CI/CD 統合を管理する必要がある場合は、Azure Deployment Environment (ADE) を使用して環境を作成することを検討してください。 ADE を使用すると、開発者はプロジェクト ベースのテンプレートを使用してアプリ インフラストラクチャを迅速にデプロイし、開発チームの一貫性のある安全な環境を確保できます。 詳細については、 Azure デプロイ環境のドキュメントを参照してください。
前提条件
- ラボのテンプレート リポジトリを追加または構成するには、少なくともラボの 共同作成者 アクセス許可。
- 使用可能な ARM テンプレートから Azure DevTest 環境を作成するには、少なくともラボで DevTest ユーザー のアクセス許可を付与します。
-
環境の作成の自動化で PowerShell スクリプトを実行するには、
Az.Resourcesモジュールがインストールされた Azure PowerShell。
制限事項
DevTest Labs の ARM 環境テンプレートから作成された環境には、次の制限があります。
VM の 自動シャットダウン機能 はサポートされていません。
次のラボ ポリシーは適用も評価もされません。
- ユーザーあたりの VM 数
- ユーザーあたりの Premium VM 数
- ユーザーあたりの Premium ディスクの数
たとえば、ラボ ポリシーで各ユーザーが最大 5 つの VM を作成することしか許可されていない場合でも、ユーザーは多数の VM を作成する ARM 環境テンプレートをデプロイできます。
ラボのテンプレート リポジトリを構成する
DevTest Labs パブリック ARM テンプレート リポジトリおよび他のパブリックまたはプライベート Git リポジトリから ARM 環境テンプレートを使用するようにラボを構成できます。 テンプレート リポジトリへのラボ アクセスを有効にすると、ラボ ユーザーは、VM の作成と同様に、Azure portal でテンプレートを選択することで、環境をすばやく作成できます。
DevTest Labs パブリック ARM テンプレート リポジトリ には、Azure Web Apps、Azure Service Fabric クラスター、開発 SharePoint ファーム用の事前認証された環境テンプレートが含まれています。 PaaS リソースでスムーズに作業を開始できるように、テンプレートには最小限の入力パラメーターがあります。
パブリック環境テンプレートをそのまま使用することも、ニーズに合わせてカスタマイズすることもできます。 GitHub パブリック テンプレート リポジトリに対して pull request を送信することで、パブリック テンプレートに対する修正や追加を提案することもできます。
環境テンプレートを他のパブリックまたはプライベート Git リポジトリに格納し、それらのリポジトリをラボに追加して、すべてのラボ ユーザーがテンプレートを使用できるようにすることもできます。 手順については、「 Git リポジトリに ARM テンプレートを格納する 」および「 テンプレート リポジトリをラボに追加する」を参照してください。
パブリック環境設定を構成する
新規または既存のラボの DevTest Labs パブリック テンプレート リポジトリ へのラボ アクセスを有効にすることができます。 リポジトリへのアクセスを有効にすると、ラボ ユーザーが使用できるようにする環境テンプレートを選択できます。
新しいラボのパブリック環境アクセスを構成する
新しいラボを作成するときにパブリック環境リポジトリへのアクセスを構成するには、[基本設定] タブで [パブリック環境] オプションを [オン] または [オフ] に設定します。 このオプションは既定で [オン] に設定されています。
既存のラボのパブリック環境アクセスを構成する
既存のラボのパブリック環境リポジトリアクセスを有効または無効にするには:
ラボの Azure portal の [概要] ページで、左側のナビゲーション メニューの [設定] で [構成とポリシー] を選択します。
[ 構成とポリシー] ページで、左側のメニューの [仮想マシン ベース ] を展開し、[ パブリック環境] を選択します。
[ パブリック環境 ] ページで、[ このラボのパブリック環境を有効にする] オプションを [はい ] または [いいえ] に設定します。
[保存] を選択します。
使用可能なパブリック環境テンプレートを選択する
ラボのパブリック環境リポジトリを有効にすると、リポジトリ内のすべての環境テンプレートがラボ ユーザーが既定で使用できるようになります。 選択したテンプレートへのアクセスを無効にすることもできます。 無効になっているテンプレートは、ユーザーが作成できる環境の一覧に表示されなくなります。
特定の環境テンプレートへのアクセスを禁止するには:
ラボの Azure portal の [構成とポリシー>仮想マシン ベース>パブリック環境 ] ページで、無効にする環境の横にあるチェック ボックスをオフにします。
[保存] を選択します。
環境ユーザーのアクセス許可を構成する
既定では、ラボ ユーザーは、作成する環境で 閲覧者 ロールに割り当てられます。 閲覧者は、SQL サーバーやデータベースなどの環境リソースを停止、開始、または変更することはできません。 ラボ ユーザーが環境内のリソースを編集できるようにするには、環境のリソース グループに 共同作成者 ロールを付与できます。
ラボの Azure portal の [概要] ページで、左側のナビゲーション メニューの [設定] で [構成とポリシー] を選択します。
[ 構成とポリシー ] ページで、左側のメニューの [設定] を展開し、[ ラボの設定] を選択します。
[ ラボの設定] ページの [ 環境アクセス] で、[ リソース グループのユーザー権限 ] オプションを [共同作成者] に設定します。
[保存] を選択します。
テンプレートから環境を作成する
ラボでパブリック またはプライベート テンプレート リポジトリを使用するように構成されている場合は、仮想マシン (VM) の作成と同様に、使用可能な ARM テンプレートを選択して環境を作成できます。 テンプレートから環境を作成するには、次の手順に従います。
ラボの Azure portalの [概要] ページで、左側のナビゲーション メニューの [マイ ラボ] の下にある [マイ環境] を選択します。
[ マイ環境 ] ページで、[ 追加] を選択します。
[ 基本の選択 ] ページで、作成する環境を選択します。
[ 追加 ] ウィンドウで、 環境名 を入力し、その他のパラメーター設定を構成します。
- 各 ARM 環境テンプレートには、一意のパラメーターが含まれています。 環境を追加するときは、赤いアスタリスクで示される、すべての必須パラメーターの値を入力する必要があります。
-
azuredeploy.parameters.json ARM テンプレート ファイルの一部のパラメーター値では、[追加] ウィンドウに既定値のない空白の設定フィールドが生成されます。 これらの値には、
GEN-UNIQUE、GEN-UNIQUE-[N]、GEN-SSH-PUB-KEY、およびGEN-PASSWORDが含まれます。 - パスワードなどの セキュリティで保護された文字列 パラメーターには、Azure Key Vault のシークレットを使用できます。 詳細については、「 Azure Key Vault にシークレットを格納する」を参照してください。
[] を選択し、[] を追加します。 環境のプロビジョニングがすぐに開始されます。
環境のプロビジョニングには、長時間かかる場合があります。 合計時間は、DevTest Labs がラボ環境の一部として作成するサービス インスタンス、VM、およびその他のリソースの数によって異なります。
[ マイ環境 ] ページでプロビジョニングの状態を監視できます。 ツール バーの [更新 ] を選択してページ ビューを更新し、現在の状態を確認します。 プロビジョニングの進行中、環境の状態は [作成中] になります。 プロビジョニングが完了すると、状態が [準備完了] に変わります。
環境の準備ができたら、[ マイ環境 ] の一覧で環境を展開して、テンプレートがプロビジョニングされた VM を表示できます。
デプロイでは、ARM テンプレートが定義したすべての環境リソースをプロビジョニングする新しいリソース グループが作成されます。 [ マイ環境 ] ボックスの一覧で環境を選択すると、テンプレートによって作成されたすべてのリソースグループとリソースが表示されます。
一覧で仮想マシン (VM) を選択すると、VM のプロパティと使用可能なアクション (構成、スケジュール、ポリシーの管理など) が表示されます。
環境作成の自動化
開発またはテストシナリオ用に複数の環境を作成する必要がある場合は、Azure PowerShell または Azure CLI を使用して、ARM テンプレートから環境のデプロイを自動化できます。 次の手順では、Azure PowerShell New-AzResource コマンドを使用して ARM 環境テンプレートのデプロイを自動化する方法を示します。
Azure CLI az deployment group create コマンドを使用してデプロイを自動化することもできます。 詳細については、「ARM テンプレートと Azure CLI でリソースをデプロイする」を参照してください。
次の 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."スクリプトを使用するには、次のコマンドを実行します。 コマンド内のプレースホルダーを独自のラボ値で更新します。
.\DeployLabEnvironment.ps1 ` -SubscriptionId "<Subscription ID>" ` -LabName "<LabName>" ` -ResourceGroupName "<LabResourceGroupName>" ` -RepositoryName "<TemplateRepoName>" ` -TemplateName "<TemplateFolderName>" ` -EnvironmentName "<EnvironmentName>"