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

将开发测试实验室和日程安排移到另一个区域

可以将开发测试实验室及其关联的日程安排移到其他区域。 若要移动实验室,请在另一个区域中创建现有实验室的副本。 移动实验室后,如果目标区域中有虚拟机 (VM),则可以移动实验室日程安排。

在本文中,学习如何:

  • 导出实验室的 Azure 资源管理器 (ARM) 模板。
  • 通过添加或更新目标区域及其他参数来修改模板。
  • 部署模板以在目标区域中创建新的实验室。
  • 配置新的实验室。
  • 将数据移到新的实验室。
  • 将日程安排移到新实验室。
  • 删除源区域中的资源。

先决条件

  • 确保帐户使用的服务和功能在目标区域中受支持。

  • 对于预览功能,请确保你的订阅已列入目标区域的允许列表。

  • 开发测试实验室不会存储密码,也不会从导出的 ARM 模板公开密码。 需要了解以下各项的密码/机密:

    • VM
    • 已存储的机密
    • 专用项目 Repos 的 PAT 令牌,用于将专用 Repos 与实验室一起移动。
  • 移动实验室日程安排时,请确保目标区域中存在计算 VM。

移动实验室

以下部分介绍如何创建和自定义 ARM 模板,以将实验室从一个区域移动到另一个区域。

如果目标区域中有 VM,则可以在不移动实验室的情况下移动日程安排。 如果要在不移动实验室的情况下移动日程安排,请参阅移动日程安排

准备移动实验室

移动实验室时,必须执行一些步骤来为移动做准备。 你需要:

  • 准备虚拟网络
  • 导出实验室的 ARM 模板
  • 修改模板
  • 部署移动实验室的模版
  • 配置新的实验室
  • 交换新 VM 下的计算 VM 的 OS 磁盘
  • 清理原始实验室

准备虚拟网络

若要开始,请导出并修改某个资源管理器模板。

  1. 登录 Azure 门户

  2. 如果目标区域下没有资源组,请立即创建一个。

  3. 使用“将 Azure 虚拟网络移到另一个区域”一文中所述的步骤,将当前虚拟网络移到新的区域和资源组。

    或者,如果无需保留原始虚拟网络,可以创建一个新的虚拟网络。

导出实验室的 ARM 模板

接下来,导出 JSON 模板,其中包含描述实验室的设置。

若要使用 Azure 门户导出模板:

  1. 选择“所有资源”,然后选择实验室的资源组。

  2. 选择“导出模板”。

  3. 在“导出模板”中选择“下载”。

  4. 找到从门户下载的 .zip 文件,并将该文件解压缩到所选的文件夹。

    此 zip 文件包含构成模板的 .json 文件以及用于部署模板的脚本。 它包含实验室下以 ARM 模板格式列出的所有资源(共享映像库资源除外)。

修改模板

为在新的区域中正确部署 ARM 模板,必须更改模板的几个部分。

若要使用 Azure 门户更新模板:

  1. 在 Azure 门户中,选择“创建资源”。

  2. 在“搜索市场”中键入“模板部署”,然后按 ENTER

  3. 选择“模板部署”。

    显示选择了模板部署的 Azure 市场的屏幕截图。

  4. 选择“创建”。

  5. 选择“在编辑器中生成自己的模板”。

  6. 选择“加载文件”,然后按说明加载在上一部分下载的 template.json 文件。

  7. 在编辑器中,对 template.json 文件进行以下更改:

    1. 将原始 location 替换为要在其中进行部署的新区域,如 westus2southeastasia 等。若要获取区域位置代码,请参阅 Azure 位置。 区域的代码是不含空格的区域名称,“美国中部” = centralus

      "variables": {},
      "resources": [
        {
          "type": "microsoft.devtestlab/labs",
          "location": "centralus",
      
    2. 如果在“实验室设置”中设置了“一个资源组中的所有虚拟机”,则还需在 ARM 模板中更新以下值:

      • microsoft.devtestlab/labs 资源的 apiVersion 更新为 2018-10-15-preview
      • vmCreationResourceGroupId 添加到 properties 节。
      "variables": {},
      "resources": [
        {
          "type": "microsoft.devtestlab/labs",
          "apiVersion": "2018-10-15-preview",
          "name": "[parameters('labs_lj_dtl_rgsettings_name')]",
          "location": "<regionName>",
          "properties": {
            "vmCreationResourceGroupId": "/subscriptions/<subscriptionID>/resourceGroups/<myResourceGroup>",
            "labStorageType": "Premium",
      
    3. 查找 "type": "microsoft.devtestlab/labs/users" 资源。 在此处删除整个 secretStore 部分,包括 keyVaultldkeyVaultUri 参数。

      secretStore": {
        "keyVaultUri": "<vaultvalue>"
        "keyVaultld": "<id>"
      }
      
    4. 查找 "type": "microsoft.devtestlab/labs/virtualnetworks" 资源。 如果之前在这些步骤中创建了新的虚拟网络,则必须在 /subnets/[SUBNET_NAME] 中添加实际的子网名称。 如果选择将虚拟网络移到新的区域,则应跳过此步骤。

    5. 查找 "type": "microsoft.devtestlab/labs/virtualmachines" 资源。

      1. 在“properties”下,添加 "password": "RANDOM_PASSWORD"

        注意

        若要创建新的 VM,则必须提供“password”属性。 输入一个随机密码,因为稍后将使用原始 VM 交换 OS 磁盘。

      2. 对于共享 IP 虚拟机,请在“properties.networkInterface”下添加此代码片段,

        使用 RDP 的 Windows VM:

        "networkInterface": {
          "sharedPublicIpAddressConfiguration": {
            "inboundNatRules": [
              {
                "transportProtocol": "tcp",
                "backendPort": 3389
              }
            ]
          }
        }
        

        使用 SSH 的 Linux VM:

         "networkInterface": {
            "sharedPublicIpAddressConfiguration": {
              "inboundNatRules": [
                {
                  "transportProtocol": "tcp",
                  "backendPort": 22
                }
              ]
            }
          }
        
    6. microsoft.devtestlab/labs/users/secrets 资源下,“properties”后的参数, 将 YOUR_STORED_PASSWORD 替换为你的密码。

      重要

      使用 secureString 作为密码值。

      "value": "YOUR_STORED_PASSWORD"
      
    7. microsoft.devtestlab/labs/artifactsources 资源下,“properties”后的参数, 将 YOUR_STORED_PASSWORD 替换为你的密码。 再次使用 secureString 作为密码值。

      "securityToken": "YOUR_PAT_TOKEN_VALUE"
      
    8. 在编辑器中,保存模板。

部署移动实验室的模版

部署模板以在目标区域中创建新的实验室。

  1. 在“自定义部署”页中,使用模板中定义的相应值更新所有参数。

  2. 输入以下值:

    名称
    订阅 选择 Azure 订阅。
    资源组 选择在上一部分中创建的资源组名称。
    位置 选择实验室的位置。 例如“美国中部”。
    实验室名称 必须为不同的名称。
    Vnet ID 必须是已移动的实验室,或是你创建的新实验室。
  3. 选择“查看 + 创建”。

  4. 选择“创建”。

  5. 选择屏幕顶部的铃铛图标(通知)可查看部署状态。 此时会看到“部署正在进行”。 等待部署完成。

配置新的实验室

虽然已使用 ARM 模板在新的区域下复制了大多数实验室资源,但仍需要手动移动一些编辑内容。

  1. 如果原始实验室中有任何计算库,则将其添加回实验室。
  2. 将策略“每个用户的虚拟机”、“每个实验室的虚拟机”和“允许的虚拟机大小”添加回已移动的实验室

交换新 VM 下的计算 VM 的 OS 磁盘

请注意,新实验室下的 VM 与旧实验室下的 VM 具有相同的规格。 唯一的区别是它们的 OS 磁盘。

  1. 在新的区域下创建空磁盘。

    • 获取新实验室下的目标 Compute VM OS 磁盘名称。 可以在实验室的“虚拟机”页上的“资源组”下找到计算 VM 及其磁盘。

    • 使用 AzCopy 将旧磁盘内容复制到新区域中的新/空磁盘中。 可以从开发箱或 Azure Cloud Shell 中运行 Powershell 命令。

      AzCopy 是移动数据的首选工具。 此方法已针对性能进行优化。 一种更快的方法是直接复制数据,因此 AzCopy 不使用计算机的网络带宽。 可在命令行或自定义脚本中使用 AzCopy。 请参阅 AzCopy 入门

      # Fill in the source/target disk names and their resource group names
      $sourceDiskName = "SOURCE_DISK"
      $sourceRG = "SOURCE_RG"
      $targetDiskName = "TARGET_DISK"
      $targetRG = "TARGET_RG"
      $targetRegion = "TARGET_LOCATION"
      
      # Create an empty target disk from the source disk
      $sourceDisk = Get-AzDisk -ResourceGroupName $sourceRG -DiskName $sourceDiskName
      $targetDiskconfig = New-AzDiskConfig -SkuName $sourceDisk.Sku.Name -UploadSizeInBytes $($sourceDisk.DiskSizeBytes+512) -Location $targetRegion -OsType $sourceDisk.OsType -CreateOption 'Upload'
      $targetDisk = New-AzDisk -ResourceGroupName $targetRG -DiskName $targetDiskName -Disk $targetDiskconfig
      
      # Copy the disk content from source to target
      $sourceDiskSas = Grant-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName -DurationInSecond 1800 -Access 'Read'
      $targetDiskSas = Grant-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName -DurationInSecond 1800 -Access 'Write'
      azcopy copy $sourceDiskSas.AccessSAS $targetDiskSas.AccessSAS --blob-type PageBlob
      Revoke-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName
      Revoke-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName
      

      之后,新区域下会有一个新磁盘。

    1. 将新实验室下的 Compute VM OS 磁盘交换为新磁盘。 若要了解如何操作,请参阅“使用 PowerShell 更改 AZURE VM 使用的 OS 磁盘”一文。

移动日程安排

有两种计划转移方法:

  • 在移动的 VM 上手动重新创建计划。 此过程可能非常耗时且容易出错。 如果有一些计划和 VM,此方法最有用。
  • 使用 ARM 模板导出和重新部署计划。

使用以下步骤,通过 ARM 模板导出计划并在另一个 Azure 区域中重新部署计划:

  1. 登录 Azure 门户

  2. 转到 VM 所在的源资源组。

  3. 在“资源组概述”页上的“资源”下,选择“显示隐藏类型”。

  4. 选择类型为 microsoft.devtestlab/schedules 的所有资源。

  5. 选择“导出模板”。

    显示资源组中隐藏资源的屏幕截图,其中已选择计划。

  6. 在“导出资源组模板”页上,选择“部署”。

  7. 在“自定义部署”页上,选择“编辑模板”。

  8. 在模板代码中,将 "location": "<old location>" 的所有实例更改为 "location": "<new location>",然后选择“保存”。

  9. 在“自定义部署”页上,输入与目标 VM 匹配的值:

    名称
    订阅 选择 Azure 订阅。
    资源组 选择资源组名称。
    区域 选择实验室计划的位置。 例如“美国中部”。
    计划名称 必须是全局唯一的名称。
    VirtualMachine_xxx_externalId 必须是目标 VM。

    显示自定义部署页面的屏幕截图,其中有相关设置的新位置值。

    重要

    每个计划必须具有全局唯一的名称;需要更改新位置的计划名称。

  10. 选择“查看并创建”以创建部署。

  11. 部署完成后,验证是否已在新 VM 上正确配置了新计划。

丢弃或清理

部署后,如果要从头开始,则可以删除目标实验室,然后重复本文的准备移动部分中所述的步骤。

若要提交变更并完成移动,必须删除原始实验室。

若要使用 Azure 门户删除实验室:

  1. 在 Azure 门户中展开左侧的菜单,打开服务菜单,然后选择“开发测试实验室”以显示实验室的列表。

  2. 找到要删除的目标实验室,然后右键单击列表右侧的“更多”按钮 (...)。

  3. 选择“删除”并确认。

你也可以选择清理原始日程安排(如果不再使用它们)。 转到原始计划资源组(在上面的步骤 5 中从其中导出模板),然后删除计划资源。

后续步骤

在本文中,我们将开发测试实验室从一个区域移到了另一个区域,并清理了源资源。 若要详细了解如何在区域之间移动资源,以及如何在 Azure 中进行灾难恢复,请参阅: