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

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

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

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

可以配置 Azure 开发测试实验室,以使用公共或专用 GitHub 存储库中的 ARM 模板。 下图显示如何使用开发测试实验室根据公共或自定义模板存储库中的 ARM 模板创建环境。 实验室模板存储库部分详细介绍了这一过程。

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

注意

强烈建议使用 Azure 部署环境 (ADE) 来创建环境。 ADE 使开发人员能够使用基于项目的模板快速部署应用基础结构,确保开发团队的一致和安全环境。

若要详细了解 Azure 部署环境,请参阅 Azure 部署环境文档

先决条件

  • 具备在开发测试实验室中配置实验室环境的经验会很有帮助。 如果不熟悉如何使用实验室,请先查看配置公共环境设置部分中的说明。 需要了解如何配置模板存储库、启用或禁用公共环境,以及选择用于创建实验室的模板。

限制

使用开发测试实验室中的 ARM 模板创建实验室时,需要注意一些限制:

  • 开发测试实验室对根据 ARM 模板创建的 PaaS 资源不支持虚拟机 (VM) 自动关闭功能

  • 部署 ARM 模板时,开发测试实验室不会评估所有实验室策略。 不会评估以下策略:

    • 每个实验室用户的 VM 数
    • 每个用户的高级 VM 数
    • 每个用户的高级磁盘数

    假设你的实验室策略允许每个用户最多创建五个 VM。 在开发测试实验室中,每个用户都可以部署一个模板,该模板可创建数十个 VM 的 ARM 环境。

使用模板创建环境

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

按照以下步骤根据模板创建环境:

  1. Azure 门户中,转到“开发测试实验室”的实验室资源。

  2. 在实验室“概述”页面上,展开左侧菜单中的“我的实验室”部分,然后选择“我的环境”

  3. 在“我的环境”页面,选择工具栏上的“添加”

  4. 在“选择基础映像”页面,选择要使用的 ARM 环境模板

    屏幕截图显示了“开发测试实验室”的实验室资源可使用的公共环境 ARM 模板。

  5. 在“添加”窗格中,输入“环境名称”,并配置其他参数设置

    每个 ARM 模板的参数类型和数量都是唯一的。 红色星号 (*) 指示必填的设置。 必须输入所有必填设置的值。

    ARM 模板文件 (azuredeploy.parameters.json) 中的某些参数值会在“添加”窗格中生成空白设置字段(无默认值)。 这些参数值包括 GEN-UNIQUEGEN-UNIQUE-[N]GEN-SSH-PUB-KEYGEN-PASSWORD

    屏幕截图显示“添加”窗格,其中包含 SharePoint 环境的配置设置。

    对于密码等安全字符串参数,可以使用 Azure Key Vault 中的密钥。 若要了解如何在密钥保管库中保存密钥并在创建实验室资源时使用这些密钥,请参阅在 Azure Key Vault 中存储密钥

  6. 选择“添加”创建环境。 环境会立即开始预配。

    注意

    预配环境的过程可能需要很长时间。 总时间取决于开发测试实验室在实验室环境中创建的服务实例、VM 和其他资源的数量。

  7. 若要监视预配状态,请返回到实验室的“我的环境”页面

    屏幕截图显示如何查看实验室环境中的预配状态。

    正在进行预配时,环境状态为“正在创建”。 预配完成之后,状态将更改为“就绪”。 可以选择工具栏上的“刷新”以更新页面视图并查看当前状态

  8. 环境准备就绪后,可以在“我的环境”列表中展开环境,查看通过模板预配的 VM

    屏幕截图显示为新预配的环境创建的 VM 列表。

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

    屏幕截图显示包含所有环境资源(包括 VM、磁盘、虚拟网络等)的资源组。

  10. 在列表中选择一个环境 VM,查看该 VM 的可用操作,如管理配置、计划和策略:

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

浏览模板存储库

从以下两个来源可获取用于在开发测试实验室中创建环境的 ARM 模板:

配置公共环境设置

可以将实验室配置为允许使用公共模板 GitHub 存储库中的模板。 为实验室启用公共模板存储库后,用户可以直接在 Azure 门户中选择这些模板,快速创建实验室环境,类似于在实验室中创建 VM 的方式。 此外,还可以选择可供用户用来创建实验室环境的具体模板。

为新实验室设置公共环境访问权限

按照以下步骤为新实验室配置公共环境存储库访问权限:

  1. 创建开发测试实验室资源的过程中,选择“基本设置”选项卡

  2. 将“公共环境”选项设置为“开启”

    屏幕截图显示如何在实验室创建过程中为实验室启用公共环境存储库。

为现有实验室设置公共环境访问权限

可能未为现有的实验室或通过 ARM 模板创建的实验室启用公共环境。 通过“为此实验室启用公共环境”选项,可以控制对任何现有实验室的公共环境存储库的访问

按照以下步骤为任何现有实验室启用或禁用公共环境存储库访问权限:

  1. Azure 门户中,转到要设置公共环境访问权限的“开发测试实验室”的实验室资源。

  2. 在实验室“概述”页上,展开左侧菜单中的“设置”部分,然后选择“配置和策略”。

  3. 在“配置和策略”页面,展开左侧菜单中的“虚拟机基础映像”部分,然后选择“公共环境”

  4. 在“公共环境”页面,将“为此实验室启用公共环境”选项设置为“是”

    屏幕截图显示如何为现有实验室资源启用所有公共环境存储库。

  5. 选择“保存”。

选择可用的公共环境模板

在设置“为此实验室启用公共环境”选项以控制实验室对公共环境的访问权限后,默认情况下会选择所有环境模板。 根据所做选择,该选项设置可以允许或禁止访问所有环境。 可以使用列表中的选择复选框来指定用户可以访问的环境。

按照以下步骤允许实验室仅访问特定环境:

  1. 在“公共环境”页面,将“为此实验室启用公共环境”选项设置为“是”

  2. 取消选择列表中的特定环境,使其对实验室用户不可用:

    屏幕截图显示如何取消选择实验室的公共环境存储库以禁止用户访问。

  3. 选择“保存”。

配置环境用户权限

默认情况下,实验室用户将分配有公共环境存储库中的“读取者”角色。 他们无法更改环境资源,也无法停止或启动资源。

使用以下步骤赋予实验室用户“参与者”角色,允许他们编辑环境资源

  1. Azure 门户中,转到要调整用户角色分配的“开发测试实验室”的实验室资源。

  2. 在实验室“概述”页上,展开左侧菜单中的“设置”部分,然后选择“配置和策略”。

  3. 在“配置和策略”页面,展开左侧菜单中的“设置”部分,然后选择“实验室设置”

  4. 在“实验室设置”页面,将“环境访问”>“资源组用户权限”选项设置为“参与者”

    屏幕截图显示如何在开发测试实验室中为实验室用户设置“参与者”角色权限。

  5. 选择“保存”。

自动化环境创建

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

实验室所有者和管理员可以使用 Azure PowerShell 从 ARM 模板创建 VM 和环境。 还可以通过 Azure CLI 使用 az deployment group create 命令自动执行部署,以创建环境。 有关详细信息,请参阅使用 ARM 模板和 Azure CLI 部署资源

注意

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

通过以下步骤使用 Azure PowerShell 自动执行 ARM 环境模板部署:

  1. 将 ARM 环境模板存储到 GitHub 存储库中

  2. 将 GitHub ARM 模板存储库添加到实验室

  3. 将以下文件名为“deployenv.ps1”的 PowerShell 脚本保存到计算机。 此脚本将调用 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. 运行该脚本。