以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型。

也可根据需要通过 Azure 命令行接口 (Azure CLI) 迁移资源。

下面是一个流程图,用于确定在迁移过程中需要执行步骤的顺序

步骤 1:做好迁移规划

下面是建议在将 IaaS 资源从经典部署模型迁移到 Resource Manager 部署模型时遵循的一些最佳实践:

  • 通读受支持的和不受支持的功能和配置。 如果虚拟机使用不受支持的配置或功能,建议等到我们宣布支持该配置/功能时再进行迁移。 也可根据需要删除该功能或移出该配置,以利迁移进行。
  • 如果通过自动化脚本来部署目前的基础结构和应用程序,则可尝试使用这些脚本进行迁移,以便创建类似的测试性设置。 也可以使用 Azure 门户设置示例环境。

Important

目前不支持通过应用程序网关从经典部署模型迁移到 Resource Manager 部署模型。 如果要迁移带应用程序网关的经典虚拟网络,请先删除该网关,然后运行准备操作来移动网络。 完成迁移后,在 Azure Resource Manager 中重新连接该网关。

无法自动迁移其他订阅中连接到 ExpressRoute 线路的 ExpressRoute 网关。 此类情况下,请删除 ExpressRoute 网关、迁移虚拟网络并重新创建网关。 有关详细信息,请参阅将 ExpressRoute 线路和关联的虚拟网络从经典部署模型迁移到资源管理器部署模型

步骤2:安装最新版本的 Azure PowerShell

安装 Azure PowerShell 可以通过两个主要的选项:PowerShell 库或 Web 平台安装程序 (WebPI)。 WebPI 接收每月的更新。 PowerShell 库会持续接收更新。 本文基于 Azure PowerShell 2.1.0 版。

如需安装说明,请参阅 如何安装和配置 Azure PowerShell

步骤 3:确保你是 Azure 门户中订阅的管理员

若要执行此迁移,必须在 Azure 门户中将你添加为订阅的协同管理员。

  1. 登录到 Azure 门户
  2. 在“中心”菜单上,选择“订阅”。 如果看不到该选项,请先选择“更多服务”。
  3. 查找相应订阅项,并查看“我的角色”字段。 对于协同管理员,该值应为“帐户管理员”。

如果无法添加协同管理员,请联系订阅的服务管理员或协同管理员,将自己添加为协同管理员。

步骤 4:设置订阅并针对迁移进行注册

首先,请启动 PowerShell 提示符。 对于迁移,需要针对经典部署模型和 Resource Manager 部署模型设置环境。

登录到 Resource Manager 模型的帐户。

PowerShell复制
Login-AzureRmAccount -EnvironmentName AzureChinaCloud

使用以下命令获取可用订阅:

PowerShell复制
Get-AzureRMSubscription | Sort Name | Select Name

设置当前会话的 Azure 订阅。 此示例将默认订阅名称设置为 My Azure Subscription。 使用自己的订阅名称替换示例名称。

PowerShell复制
Select-AzureRmSubscription –SubscriptionName "My Azure Subscription"

Note

注册是一次性步骤,但必须在尝试迁移之前完成。 如果不注册,则会出现以下错误消息:

错误请求:未针对迁移注册订阅。

使用以下命令向迁移资源提供程序注册:

PowerShell复制
    Register-AzureRmResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

请等五分钟让注册完成。 可以使用以下命令来检查审批状态:

PowerShell复制
    Get-AzureRmResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

请确保在继续操作之前,RegistrationState 为 Registered 。

现在,请登录到经典模型的帐户。

PowerShell复制
Add-AzureAccount -Environment AzureChinaCloud

使用以下命令获取可用订阅:

PowerShell复制
Get-AzureSubscription | Sort SubscriptionName | Select SubscriptionName

设置当前会话的 Azure 订阅。 此示例将默认订阅设置为 My Azure Subscription。 将示例订阅名称替换成自己的名称。

PowerShell复制
Select-AzureSubscription -SubscriptionName "My Azure Subscription"

步骤 5:确保在当前部署或 VNET 的 Azure 区域中有足够的 Azure Resource Manager 虚拟机核心

可以使用以下 PowerShell 命令检查 Azure Resource Manager 中目前的核心数量。 若要了解有关核心配额的详细信息,请参阅限制和 Azure Resource Manager

此示例检查 中国北部 区域的可用性。 使用自己的区域名称替换示例名称。

PowerShell复制
Get-AzureRmVMUsage -Location "China North"

步骤 6:运行迁移 IaaS 资源的命令

Note

此处描述的所有操作都是幂等的。 如果遇到功能不受支持或配置错误以外的问题,建议重试准备、中止或提交操作。 然后,平台会尝试再次操作。

步骤 6.1:选项 1 - 迁移云服务中的虚拟机(不在虚拟网络中)

使用以下命令获取云服务列表,并选取要迁移的云服务。 如果云服务中的 VM 在虚拟网络中或者具有 Web 角色或辅助角色,该命令会返回错误消息。

PowerShell复制
Get-AzureService | ft Servicename

获取云服务的部署名称。 在此示例中,服务名称是 My Service。 使用自己的服务名称替换示例名称。

PowerShell复制
$serviceName = "My Service"
$deployment = Get-AzureDeployment -ServiceName $serviceName
$deploymentName = $deployment.DeploymentName

准备迁移云服务中的虚拟机。 可以从两个选项中进行选择。

  • 选项 1.将 VM 迁移到平台所创建的虚拟网络上

    首先,使用以下命令验证用户是否可以迁移云服务:

    PowerShell复制
    $validate = Move-AzureService -Validate -ServiceName $serviceName `
    -DeploymentName $deploymentName -CreateNewVirtualNetwork
    $validate.ValidationMessages

    前一个命令会显示任何阻止迁移的警告和错误。 如果验证成功,可继续执行“准备”步骤:

    PowerShell复制
    Move-AzureService -Prepare -ServiceName $serviceName `
    -DeploymentName $deploymentName -CreateNewVirtualNetwork
  • 选项 2.迁移到 Resource Manager 部署模型中的现有虚拟网络

    此示例将资源组名称设置为 myResourceGroup、将虚拟网络名称设置为 myVirtualNetwork 并将子网名称设置为 mySubNet。 将该示例中的名称替换成自己的资源名称。

    PowerShell复制
    $existingVnetRGName = "myResourceGroup"
    $vnetName = "myVirtualNetwork"
    $subnetName = "mySubNet"

    首先,请使用以下命令验证用户是否可以迁移虚拟网络:

    PowerShell复制
    $validate = Move-AzureService -Validate -ServiceName $serviceName `
    -DeploymentName $deploymentName -UseExistingVirtualNetwork -VirtualNetworkResourceGroupName $existingVnetRGName -VirtualNetworkName $vnetName -SubnetName $subnetName
    $validate.ValidationMessages

    前一个命令会显示任何阻止迁移的警告和错误。 如果验证成功,则可继续执行以下准备步骤:

    PowerShell复制
    Move-AzureService -Prepare -ServiceName $serviceName -DeploymentName $deploymentName `
    -UseExistingVirtualNetwork -VirtualNetworkResourceGroupName $existingVnetRGName `
    -VirtualNetworkName $vnetName -SubnetName $subnetName

使用前述任一选项成功完成准备操作以后,即可查询 VM 的迁移状态。 确保 VM 处于“ Prepared ”状态。

此示例将 VM 名称设置为 myVM。 使用自己的 VM 名称替换示例名称。

PowerShell复制
$vmName = "myVM"
$vm = Get-AzureVM -ServiceName $serviceName -Name $vmName
$vm.VM.MigrationState

使用 PowerShell 或 Azure 门户查看准备就绪的资源的配置。 如果尚未做好迁移准备,因此想要回到旧的状态,请使用以下命令:

PowerShell复制
Move-AzureService -Abort -ServiceName $serviceName -DeploymentName $deploymentName

如果准备好的配置看起来没问题,则可继续进行,使用以下命令提交资源:

PowerShell复制
Move-AzureService -Commit -ServiceName $serviceName -DeploymentName $deploymentName

步骤 6.1:选项 2 - 迁移虚拟网络中的虚拟机

若要迁移虚拟网络中的虚拟机,可迁移虚拟网络。 虚拟机随虚拟网络自动迁移。 选取要迁移的虚拟网络。

Note

通过使用虚拟机的 VHD(OS 和数据)文件创建新的使用托管磁盘的 Resource Manager 虚拟机来迁移单个经典虚拟机

Note

虚拟网络名称可能和新门户中显示的名称不同。 新的 Azure 门户显示名称为 [vnet-name],但实际的虚拟网络名称的类型是 Group [resource-group-name] [vnet-name]。 迁移之前,使用命令 Get-AzureVnetSite | Select -Property Name 查找实际的虚拟网络名称,或者在旧版 Azure 门户中查看它。

此示例将虚拟网络名称设置为 myVnet。 使用自己的虚拟网络名称替换示例名称。

PowerShell复制
$vnetName = "myVnet"

Note

如果虚拟网络包含的 Web 角色/辅助角色或 VM 的配置不受支持,则会出现验证错误消息。

首先,请使用以下命令验证用户是否可以迁移虚拟网络:

PowerShell复制
Move-AzureVirtualNetwork -Validate -VirtualNetworkName $vnetName

前一个命令会显示任何阻止迁移的警告和错误。 如果验证成功,则可继续执行以下准备步骤:

PowerShell复制
Move-AzureVirtualNetwork -Prepare -VirtualNetworkName $vnetName

使用 Azure PowerShell 或 Azure 门户查看已准备就绪的虚拟机的配置。 如果尚未做好迁移准备,因此想要回到旧的状态,请使用以下命令:

PowerShell复制
Move-AzureVirtualNetwork -Abort -VirtualNetworkName $vnetName

如果准备好的配置看起来没问题,则可继续进行,使用以下命令提交资源:

PowerShell复制
Move-AzureVirtualNetwork -Commit -VirtualNetworkName $vnetName

步骤 6.2:迁移存储帐户

完成虚拟机迁移之后,建议迁移存储帐户。

在迁移存储帐户之前,请执行以下先决条件检查:

  • 迁移其磁盘存储在存储帐户中的经典虚拟机

    上述命令返回存储帐户中所有经典 VM 磁盘的 RoleName 和 DiskName 属性。 RoleName 是磁盘附加到的虚拟机的名称。 如果上述命令返回了磁盘,请确保先迁移这些磁盘所附加到的虚拟机,再迁移存储帐户。

    PowerShell复制
     $storageAccountName = 'yourStorageAccountName'
    Get-AzureDisk | where-Object {$_.MediaLink.Host.Contains($storageAccountName)} | Select-Object -ExpandProperty AttachedTo -Property `
    DiskName | Format-List -Property RoleName, DiskName
  • 删除存储帐户中存储的未附加经典 VM 磁盘

    使用以下命令查找存储帐户中未附加的经典 VM 磁盘:

    PowerShell复制
    $storageAccountName = 'yourStorageAccountName'
    Get-AzureDisk | where-Object {$_.MediaLink.Host.Contains($storageAccountName)} | Where-Object -Property AttachedTo -EQ $null | Format-List -Property DiskName

    如果上述命令返回了磁盘,请使用以下命令删除这些磁盘:

    PowerShell复制
    Remove-AzureDisk -DiskName 'yourDiskName'
  • 删除存储帐户中存储的 VM 映像

    上述命令返回 OS 磁盘存储在该存储帐户中的所有 VM 映像。

    PowerShell复制
    Get-AzureVmImage | Where-Object { $_.OSDiskConfiguration.MediaLink -ne $null -and $_.OSDiskConfiguration.MediaLink.Host.Contains($storageAccountName)`
    } | Select-Object -Property ImageName, ImageLabel

    上述命令返回数据磁盘存储在该存储帐户中的所有 VM 映像。

    PowerShell复制
    Get-AzureVmImage | Where-Object {$_.DataDiskConfigurations -ne $null -and ($_.DataDiskConfigurations | Where-Object {$_.MediaLink -ne $null -and $_.MediaLink.Host.Contains($storageAccountName)}).Count -gt 0 `
    } | Select-Object -Property ImageName, ImageLabel

    使用前面的命令删除上述命令返回的所有 VM 映像:

    PowerShell复制
    Remove-AzureVMImage -ImageName 'yourImageName'

使用以下命令验证要迁移的每个存储帐户。 在此示例中,存储帐户名称为 myStorageAccount。 使用自己的存储帐户名称替换示例名称。

PowerShell复制
$storageAccountName = "myStorageAccount"
Move-AzureStorageAccount -Validate -StorageAccountName $storageAccountName

下一步是准备存储帐户以便进行迁移

PowerShell复制
$storageAccountName = "myStorageAccount"
Move-AzureStorageAccount -Prepare -StorageAccountName $storageAccountName

使用 Azure PowerShell 或 Azure 门户检查准备就绪的存储帐户的配置。 如果尚未做好迁移准备,因此想要回到旧的状态,请使用以下命令:

PowerShell复制
Move-AzureStorageAccount -Abort -StorageAccountName $storageAccountName

如果准备好的配置看起来没问题,则可继续进行,使用以下命令提交资源:

PowerShell复制
Move-AzureStorageAccount -Commit -StorageAccountName $storageAccountName

后续步骤

使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager的更多相关文章

  1. 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型

    以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...

  2. 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...

  3. 有关从经典部署模型迁移到 Azure Resource Manager 部署模型的常见问题

    此迁移计划是否影响 Azure 虚拟机上运行的任何现有服务或应用程序? 不可以. VM(经典)是公开上市的完全受支持的服务. 你可以继续使用这些资源来拓展你在 Azure 上的足迹. 如果我近期不打算 ...

  4. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager

    适用场景 用户希望将特定云服务下的所有虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称:ARM). Note 如果云服务下使用 VNET 也希望将 ...

  5. 如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager

    本文内容 适用场景 解决方案 适用场景 用户拥有多个云服务但是在同一个 VNET 下,希望将这些虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称: ...

  6. 平台支持的从经典部署模型到 Azure Resource Manager 的 IaaS 资源迁移

    本文介绍如何才能将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Resource Manager 部署模型. 用户可以阅读有关 Azure Resource Manager 功能和优点的更多 ...

  7. 有关平台支持的从经典部署模型到 Azure Resource Manager 的迁移的技术深入探讨

    本文将深入探讨如何从 Azure 经典部署模型迁移到 Azure Resource Manager 部署模型. 本文将介绍资源和功能级别的资源,让用户了解 Azure 平台如何在两种部署模型之间迁移资 ...

  8. 将 ExpressRoute 线路从经典部署模型转移到 Resource Manager 部署模型

    本文概述将 Azure ExpressRoute 线路从经典部署模型转移到 Azure Resource Manager 部署模型的效果. Azure 当前使用两种部署模型:Resource Mana ...

  9. Azure Powershell对ARM资源的基本操作

    本分主要介绍Windows Azure Powershell对ARM资源的基本操作 1.登陆ARM模式,命令:Login-AzureRmAccount -EnvironmentName AzureCh ...

随机推荐

  1. (转)MySQL 主从复制搭建,基于日志(binlog

    原文:http://blog.jobbole.com/110934/ 什么是MySQL主从复制 简单来说,就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数 ...

  2. 移动端优化 && 清除移动端网站点击a标签时闪现的边框或遮罩层(CSS) && 移动端点击 && 文字不可选择

      在移动端网站,当你点击加了a标签的文字或图片时,该元素的周围会闪现一个蓝色的边框,在微信上的网站就是如此:而有的浏览器会闪现一个半透明遮罩层,比如移动端的Chrome浏览器,其实这些特效无非就是为 ...

  3. 如何为 Go 设计一个通用的日志包

    需求 一个通用的日志包,应该满足以下几个需求: 兼容 log.Logger,标准库大量使用了 log.Logger 作为其错误内容的输出通道,比如 net/http.Server.ErrorLog,所 ...

  4. IPC之binder机制

    我们知道,在Android系统中,每一个应用程序都运行在独立的进程中,这也保证了当其中一个程序出现异常而不会影响另一个应用程序的正常运转.在许多情况下,我们activity都会与各种系统的servic ...

  5. InnoDB存储引擎的表空间文件,重做日志文件

    存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据.这些存储引擎真正存储了数据和索引等数据. 表空间文件 InnoDB存储引擎在存储设计上模仿了Oracle,将存 ...

  6. Go RabbitMQ(三)发布订阅模式

    RabbitMQ 在上一节中我们创建了工作队列,并且假设每一个任务都能够准确的到达对应的worker.在本节中我们将介绍如何将一个消息传递到多个消费者,这也就是所说的发布订阅模式 为了验证该模式我们使 ...

  7. JS常用时间处理方法

    这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 -- 传送门:http://www.w3school.com.cn/js/jsref_obj_date.asp 时间格式化 -- 转换为 ...

  8. iOS开源项目周报0316

    由OpenDigg 出品的iOS开源项目周报第十二期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等.GodEye  ...

  9. JavaScript插入节点小结

    JS原生API插入节点的方式大致有innerHTML.outerHTML.appendChild.insertBefore.insertAdjacentHTML.applyElement这6种. 这里 ...

  10. JS中的 ES6新类型iterable

    1.1 iterable字面意思:可迭代的,可重复的 iterable是ES6标准引入的新的类型.而Array.Map和Set都属于iterable类型 1.2 为什么加入iterable类型? 遍历 ...