《Windows Azure Platform 系列文章目录》
本文参考了Git Hub的ARM Template:
https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image
但是Git Hub上的Template不包含Availability Set,笔者在这里进行了修改。
https://github.com/leizhang1984/AzureChinaPowerShell/tree/master/ARM/vmforuserimage
在很多时候,我们需要从Classic VM的操作系统盘的VHD文件,创建新的ARM VM。
这里的关键步骤如下:
1.创建Classic VM,并获得OS Disk的VHD路径
2.通过ARM Portal: https://portal.azure.cn,创建新的
- Azure ARM Resource Group
- ARM Storage Account
- ARM Virtual Network和Subnet
3.如果Classic VM是开机状态,请用AzCopy工具,把OS Disk和Data Disk的VHD文件,拷贝到同一个存储账号(Classic Storage)的不同Container下。
然后把VHD从Classic Storage Account,拷贝到ARM Storage Account
4.如果Classic VM是关机状态,请直接用AzCopy工具,把OS Disk和Data Disk的VHD文件,拷贝到ARM Storage Account里
5.运行Azure PowerShell,执行Template Deployment
接下来开始本节的内容
1.首先我们在ASM模式下(https://manage.windowsazure.cn),创建新的Azure Classic VM。步骤略。
2.查看这个Classic VM的OS Disk和Data Disk,如下图红色部分:
3.通过ARM Portal: https://portal.azure.cn,创建新的
- Azure ARM Resource Group
- ARM Storage Account
- ARM Virtual Network和Subnet
4.为了方便拷贝VHD,我们先把虚拟机关机。(注意关机前请先绑定固定VIP和内网DIP)
5.使用AzCopy工具,把OS Disk和Data Disk的VHD文件,拷贝到ARM Storage Account里。图略。
6.拷贝完毕后,我们需要修改相应的ARM Template
https://github.com/leizhang1984/AzureChinaPowerShell/tree/master/ARM/vmforuserimage
7.Git Hub中的azuredeploy.json,不需要修改
8.Git Hub中的azuredeploy.parameters.json,进行以下修改:
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "customVmName": { "value": "LeiARMWeb01" }, "userImageStorageAccountName": { "value": "leiarmstorage" }, "userImageStorageAccountResourceGroupName": { "value": "LeiARMRG" }, "osDiskVhdUri": { "value": "https://leiarmstorage.blob.core.chinacloudapi.cn/vhds/LeiASMWeb-LeiASMWeb01-2016-12-05.vhd" }, //dnsLabelPrefix必须为小写 "dnsLabelPrefix": { "value": "customdns" }, "adminUsername": { "value": "azureadmin" }, "adminPassword": { "value": "MyVM@123456" }, "osType": { "value": "Windows" }, "vmSize": { "value": "Standard_D2" }, "availabilitySets_name": { "value": "Web_AvbSet" }, "newOrExistingVnet": { "value": "existing" }, "newOrExistingVnetName": { "value": "LeiARMVNet" }, "newOrExistingSubnetName": { "value": "subnet-1" }, "existingVnetResourceGroupName": { "value": "LeiARMRG" } } }
8.请注意:如果Azure Windows VM已经运行了Sysprep,则上面的azuredeploy.parameters.json中的adminUsername和adminPassword会生效
9.如果之前的Azure VM没有运行Sysprep,则上面的adminUsername和adminPassword无效
10.运行Azure PowerShell,进行验证:
#Login Azure China Cloud Add-AzureRmAccount -EnvironmentName AzureChinaCloud; # 选择Azure China 订阅ID Select-AzureRmSubscription -SubscriptionID '[订阅ID]' #执行Azure Deploy New-AzureRmResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName LeiARMRG -Mode Incremental -TemplateFile 'D:\vmforuserimage\azuredeploy.json' -TemplateParameterFile 'D:\vmforuserimage\azuredeploy.parameters.json'
11.执行完毕后,会进行ARM Storage Account的VHD文件,新建新的ARM VM中。如下: