你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 ARM 模板创建 Azure 开发测试实验室环境

本文介绍如何通过 Azure 资源管理器 (ARM) 模板创建 Azure 开发测试实验室环境。 可以使用开发测试实验室环境来轻松、一致地为实验室预配多个虚拟机 (VM) 或平台即服务 (PaaS) 资源。 例如,为多层 Web 应用程序或 SharePoint 场创建实验室。

环境中的资源具有相同的生命周期,你可以一起管理它们。 可以跟踪实验室环境和 PaaS 资源的成本,就像跟踪单个实验室 VM 的成本一样。

可以将 Azure 开发测试实验室配置为使用公共或专用 Git 存储库中的 ARM 模板。 详细了解实验室模板存储库

此图显示如何使用 Azure 开发测试实验室通过公共或自定义模板存储库中的 ARM 模板创建环境。

若要使用 ARM 模板创建 Azure 开发测试实验室资源,请参阅快速入门:使用 ARM 模板在开发测试实验室中创建实验室

限制

在开发测试实验室中通过 ARM 模板创建实验室时,请考虑以下限制:

  • 虚拟机自动关闭不适用于 PaaS 资源。

  • 部署 ARM 模板时,并不会评估所有实验室策略。 未评估的策略包括:每个实验室用户的 VM 数、每个用户的高级 VM 数,以及每个用户的高级桌面数。 例如,实验室策略可能限制每个用户只能使用五个 VM。 但是,用户可以部署创建数十个 VM 的 ARM 模板。

使用模板创建环境

可以从 Azure 开发测试实验室公共模板存储库创建环境,也可以向实验室添加专用模板存储库

了解如何为实验室配置环境。 例如,如何配置模板存储库、启用或禁用公共环境以及选择用于创建实验室的特定模板。

若要使用模板创建环境:

  1. Azure 门户中选择实验室资源。

  2. 在实验室的“概述”页上,从顶部工具栏选择“添加”。

  3. 在“选择基础映像”页上,选择要使用的 ARM 环境模板。 可用环境模板首先出现在基础映像列表中。

    显示公共环境模板的屏幕截图。

  4. 在“添加”屏幕上,输入一个“环境名称”,然后填写其他输入字段。

    输入字段的数量和类型在 ARM 模板中定义。 必要时,请为模板 azuredeploy.json 文件定义为空白或默认值的输入字段输入值。

    • 对于 secure string 参数,可以使用 Azure 密钥保管库中的密钥。 若要了解如何在密钥保管库中保存密钥并在创建实验室资源时使用这些密钥,请参阅在 Azure 密钥保管库中存储密钥

    • 在 ARM 模板文件中,GEN-UNIQUEGEN-UNIQUE-[N]GEN-SSH-PUB-KEYGEN-PASSWORD 参数值会生成空白输入字段以便用户输入值。

    显示 SharePoint 环境的“添加”窗格的屏幕截图。

  5. 选择“添加”创建环境。

    环境会立即开始预配。 可在实验室“概述”页的“我的环境”下查看预配状态。 预配环境可能需要较长时间。

  6. 创建完环境后,在“我的环境”下展开环境以查看模板预配的 VM 和其他资源的列表。

    屏幕截图显示环境下的 VM 的列表。

    该部署将创建新的资源组,以预配 ARM 模板定义的所有环境资源。 在“我的环境”下选择环境名称,以查看资源组和模板创建的所有资源。

    显示包含所有环境资源的资源组的屏幕截图。

  7. 选择环境 VM 以查看 VM 的可用操作,如管理配置、计划和策略。

    显示环境 VM 的可用操作的屏幕截图。

环境模板存储库

借助 Azure 开发测试实验室,可以从 ARM 模板创建环境。 ARM 模板可以来自两个源:

提示

若要对公共模板提出修订或补充建议,请针对开源 GitHub 公共模板存储库提交拉取请求。

为实验室配置公共环境设置

可以将实验室配置为允许使用公共模板存储库中的模板。 如果为实验室启用公共模板存储库,则用户可以通过直接在 Azure 门户中选择这些模板来快速创建环境,类似于其在实验室中创建 VM 的方式。

此外还可以选择可供用户用来创建环境的具体模板。

创建实验室时启用公共环境

若要在创建实验室时为实验室启用公共环境存储库访问权限,请执行以下操作:

  1. 创建开发测试实验室资源时选择“基本设置”选项卡。

  2. 在“公共环境”字段中选择“打开”。

    显示为新实验室启用公共环境的屏幕截图。

为现有实验室启用或禁用公共环境

可能未为现有的实验室或通过 ARM 模板创建的实验室启用公共环境。 若要为现有实验室启用或禁用公共环境存储库:

  1. Azure 门户中选择实验室资源。

  2. 在左侧导航菜单中选择“配置和策略”。

  3. 选择左侧导航栏中“虚拟机基础映像”下的“公共环境”。

  4. 对于“为此实验室启用公共环境”选项,请选择“是”或“否”,以启用或禁用实验室的公共环境。

  5. 选择“保存” 。

选择可用的公共环境模板

启用公共环境时,存储库中的所有环境模板都可用于创建环境。 若要仅允许实验室的特定环境,请执行以下操作:

  1. Azure 门户中选择实验室资源。

  2. 在左侧导航菜单中选择“配置和策略”。

  3. 选择左侧导航栏中“虚拟机基础映像”下的“公共环境”。

  4. 从列表中取消选择特定环境以使实验室用户无法使用它们,然后选择“保存”。

    屏幕截图显示实验室公共环境列表。

配置环境用户权限

默认情况下,实验室用户在环境中具有“读取者”角色,无法更改环境资源。 例如,用户无法停止或启动资源。 若要向实验室用户授予“参与者”角色,以便他们能够编辑环境资源,请执行以下操作:

  1. Azure 门户中选择实验室资源。

  2. 在左侧导航菜单中选择“配置和策略”。

  3. 在左侧导航栏中选择“实验室设置”。

  4. 在“环境访问”>“资源组用户权限”下,选择“参与者”,然后选择“保存”。

    显示配置实验室用户参与者权限的屏幕截图。

自动创建环境

如果需要为开发或测试方案创建多个环境,可以通过 Azure PowerShell 或 Azure CLI 自动执行环境部署。

可以使用 Azure CLI 命令 az deployment group create 来创建环境。 有关详细信息,请参阅使用资源管理器模板和 Azure CLI 部署资源

实验室所有者和管理员可以使用 Azure PowerShell 从 ARM 模板创建 VM 和环境。

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

若要通过 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"
    

后续步骤