Azure在ASM架构下可以通过Portal经典界面的“捕获”按钮或Save-AzureVMImage等方式创建虚拟机的镜像模板,实现利用镜像模板快速部署虚拟机。
Azure在ARM架构下,Portal界面中是没有相应选项和按钮的,要实现类似的功能,需要在PowerShell下通过采用JSON的Template部署的方式实现,本文就记录这种方法以便以后使用。
原理:
复制已存在的虚拟机的vhd磁盘文件,通过复制后的vhd创建虚拟机
方法:
1、通过PowerShell登录到ARM架构
PS C:\Users\Admin> Add-AzureRmAccount -EnvironmentName AzureChinaCloud
2、通过PowerShell列出需要复制的虚拟机信息,并记录其OsDisk的vhd的Uri
比如列出azure_new001资源组中azure008虚拟机信息:
PS C:\Users\Admin> get-azurermvm -ResourceGroupName azure_new001 -name azure008
RequestId : 3ea65e13-0b3c-4fec-9530-5a82b714d5d5
StatusCode : OK
ResourceGroupName : azure_new001
Id : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov
iders/Microsoft.Compute/virtualMachines/azure008
Name : azure008
Type : Microsoft.Compute/virtualMachines
Location : chinaeast
Tags : {}
DiagnosticsProfile :
BootDiagnostics :
Enabled : True
StorageUri : https://khsgnew001diag966.blob.core.chinacloudapi.cn/
HardwareProfile :
VmSize : Standard_A0
NetworkProfile :
NetworkInterfaces[0] :
Id : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov
iders/Microsoft.Network/networkInterfaces/azure00880
OSProfile :
ComputerName : azure008
AdminUsername : azureuser
LinuxConfiguration :
DisablePasswordAuthentication : False
ProvisioningState : Succeeded
StorageProfile :
ImageReference :
Publisher : OpenLogic
Offer : CentOS
Sku : 6.7
Version : latest
OsDisk :
OsType : Linux
Name : azure008
Vhd :
Uri : https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure00820161439122934.v
hd
Caching : ReadWrite
CreateOption : FromImage
DataDisks[0] :
Lun : 0
Name : azure008-20161208-121429
Vhd :
Uri : https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure008-20161118-132429
.vhd
Caching : None
CreateOption : Empty
DiskSizeGB : 200
DataDiskNames[0] : azure008-20161208-121429
NetworkInterfaceIDs[0] : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov
iders/Microsoft.Network/networkInterfaces/azure00880
在上面其中https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure00820161439122934.vhd
就是虚拟机azure008的OsDisk系统磁盘的Uri链接(也可以在portal界面虚拟机的磁盘管理中,查看磁盘属性来获取此Uri),如还有数据磁盘也要复制,也在上面可以记录下DataDisks的Uri。
3、用AzCopy工具复制此vhd文件到另外一个容器,因为复制后vhd文件名相同,所以要新建一个容器进行复制(可以到portal界面存储账户--容器中新建)
下载AzCopy工具并安装,点击下载:MicrosoftAzureStorageTools.msi
打开cmd命令窗口,cd进入到AzCopy的安装目录,如:C:\AzCopy
用下面命令复制原虚拟机的vhd到新的容器中(这里新的容器为vhds1),把[源key]和[目标key] 分别替换成源虚拟机存储账户的访问key和目标存储账户的访问key:
C:\AzCopy>azcopy /source:https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds /dest:https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds1 /sourcekey:[源key] /DestKey:[目标key] /pattern:azure00820161439122934.vhd
Finished 1 of total 1 file(s).
[2016/12/14 15:11:23] Transfer summary:
-----------------
Total files transferred: 1
Transfer successfully: 1
Transfer skipped: 0
Transfer failed: 0
Elapsed time: 00.00:00:00
如有其他数据磁盘可进行多次复制。
4、在GitHub上的quickstart template找到相应的脚本并复制内容保存到本地进行修改
https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image
一个是azuredeploy.json(无需修改)
一个是azuredeploy.parameters.json,修改对应字段的值,此例修改后如下:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"customVmName": {
"value": "azure001"
},
"userImageStorageAccountName": {
"value": "khsgnew001disks925"
},
"userImageStorageAccountResourceGroupName": {
"value": "azure_new001"
},
"osDiskVhdUri": {
"value": "https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds1/azure00820161439122934.vhd"
},
"dnsLabelPrefix": {
"value": "azure001"
},
"adminUsername": {
"value": "azureuser"
},
"adminPassword": {
"value": "khSG2016##"
},
"osType": {
"value": "Linux"
},
"vmSize": {
"value": "Standard_A0"
},
"newOrExistingVnet": {
"value": "existing"
},
"newOrExistingVnetName": {
"value": "vnet192"
},
"newOrExistingSubnetName": {
"value": "default"
},
"existingVnetResourceGroupName": {
"value": "azure_new001"
}
}
}
5、最后通过PowerShell命令利用JSON的模板部署新的虚拟机:
PS C:\Users\Admin> New-AzureRmResourceGroupDeployment -Name azure001Dep -ResourceGroupName azure_new001 -Mode Incremental -TemplateFile 'C:\azuredeploy.json' -TemplateParameterFile 'C:\azuredeploy.parameters.json'
DeploymentName : azure001Dep
ResourceGroupName : azure_new001
ProvisioningState : Succeeded
Timestamp : 2016/12/14 7:42:48
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
customVmName String azure001
userImageStorageAccountName String khsgnew001disks925
userImageStorageAccountResourceGroupName String azure_new001
osDiskVhdUri String https://khsgnew001disks925.blob.core.chinacloudap
i.cn/vhds1/azure00820161439122934.vhd
dnsLabelPrefix String azure001
adminUserName String azureuser
adminPassword SecureString
osType String Linux
vmSize String Standard_A0
newOrExistingVnet String existing
newOrExistingVnetName String vnet192
newOrExistingSubnetName String default
existingVnetResourceGroupName String azure_new001
Outputs :
DeploymentDebugLogLevel :
6、登录ARM架构的portal界面确认结果,如之前除了Os磁盘还复制过Data磁盘,可以在界面中新的虚拟机中附加现有磁盘里选择此Data磁盘的vhd。
原文链接:微软Azure在ARM架构从已有的VHD文件创建新的虚拟机,转载请注明来源!
支持一下
掐指一算,这个博客能风光一百年!
正好学习这个,感谢分享~!