前面几篇文章介绍过Azure的两种VM的模式,包括ASM和ARM。并且介绍了如何用Azure CLI和PowerShell创建虚拟机。本文将介绍如何采用Json的Template来创建基于ARM的VM。

当然采用Json Template的方式创建虚拟机是几种方式中最好的,这样可以便于批量部署、Json文件可以重用。

ARM的Template的格式采用的是Json的格式。其需要的几个部分如下:

需要定义的有:parameters,variables,resources和outputs。但只有resources是必须的。

由于Template的内容比较复杂,一般都采用复制已有的Template Jason文件修改的方式。

目前,在Github上有大量的Azure ARM Jason Template,可以下载修改使用。

具体的网址在:

https://github.com/Azure/azure-quickstart-templates

比如我们要创建一台CentOS 6.5的Linux虚拟机。在上面的链接中,没有相应的template。我们通过一台Ubuntu的Template进行修改。

首先下载两个Jason文件:

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-linux/azuredeploy.json

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-linux/azuredeploy.parameters.json

第一个文件是部署文件,第二个文件是参数文件。

我们首先看部署文件:

一、修改parameter中的内容

1 把Ubuntu版本改成CentOS版本:

    "ubuntuOSVersion": {
"type": "string",
"defaultValue": "14.04.2-LTS",
"allowedValues": [
"12.04.5-LTS",
"14.04.2-LTS",
"15.10"
],

改成

    "CentOSVersion": {
"type": "string",
"defaultValue": "6.5",
"allowedValues": [
"6.5",
"6.6",
"7.0",
"7.1"
],

2 把metadata的描述更改

"metadata": {
"description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version. Allowed values: 12.04.5-LTS, 14.04.2-LTS, 15.10."
}

改为:

"metadata": {
"description": "The CentOS version for the VM. This will pick a fully patched image of this given CentOS version. Allowed values: 6.5, 6.6, 7.0, 7.1."
}

二、修改variables中的内容

原始的变量定义如下:

  "variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
"dataDisk1VhdName": "datadisk1",
"imagePublisher": "Canonical",
"imageOffer": "UbuntuServer",
"OSDiskName": "osdiskforlinuxsimple",
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"storageAccountType": "Standard_LRS",
"publicIPAddressName": "myPublicIP",
"publicIPAddressType": "Dynamic",
"vmStorageAccountContainerName": "vhds",
"vmName": "MyUbuntuVM",
"vmSize": "Standard_D1",
"virtualNetworkName": "MyVNET",
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
"subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
"apiVersion": "2015-06-15"
},

更改为:

  "variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
"dataDisk1VhdName": "datadisk1",
"imagePublisher": "OpenLogic",
"imageOffer": "CentOS",
"OSDiskName": "osdiskforlinuxsimple",
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"storageAccountType": "Standard_LRS",
"publicIPAddressName": "myPublicIP",
"publicIPAddressType": "Dynamic",
"vmStorageAccountContainerName": "vhds",
"vmName": "MyCentOSVM",
"vmSize": "Standard_A1",
"virtualNetworkName": "MyVNET",
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
"subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
"apiVersion": "2015-06-15"
},

修改完部署文件后,修改参数文件:

参数文件如下:

{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminUsername": {
"value": "azureUser"
},
"adminPassword": {
"value": "GEN-PASSWORD"
},
"dnsLabelPrefix": {
"value": "GEN-UNIQUE"
},
"ubuntuOSVersion": {
"value": "14.04.2-LTS"
}
}
}

更改为:

{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminUsername": {
"value": "hengwei"
},
"adminPassword": {
"value": "abc@123456"
},
"dnsLabelPrefix": {
"value": "hwvm"
},
"CentOSVersion": {
"value": "6.5"
}
}
}

并把两个文件上传到Github上,链接如下:

https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json

https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.parameters.json

下面可以通过PowerShell命令通过Jason Template创建VM了:

New-AzureRmResourceGroup -Name hw01 -Location chinaeast

ResourceGroupName : hw01
Location : chinaeast
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/xxxxxxxx/resourceGroups/hw01
New-AzureRmResourceGroupDeployment -Name hwvm01 -ResourceGroupName hw01 -TemplateUri https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json -TemplateParameterUri https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.parameters.json -Mode Incremental

DeploymentName          : hwvm01
ResourceGroupName : hw01
ProvisioningState : Succeeded
Timestamp : 2016/7/1 14:09:58
Mode : Incremental
TemplateLink :
Uri : https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json
ContentVersion : 1.0.0.0 Parameters :
Name Type Value
=============== ========================= ==========
adminUsername String hengwei
adminPassword SecureString
dnsLabelPrefix String hwvm
centOSVersion String 6.5 Outputs :
Name Type Value
=============== ========================= ==========
hostname String hwvm.chinaeast.cloudapp.azure.com
sshCommand String ssh hengwei@hwvm.chinaeast.cloudapp.azure.com DeploymentDebugLogLevel :

创建成功。

再通过下面的命令查看:

get-azurermvm

RequestId                         : afe8fb47-4e2f-434f-aa40-4d230a549598
StatusCode : OK
ResourceGroupName : HW01
Id : /subscriptions/xxxxxxxx/resourceGroups/HW01/providers/Microsoft.Compute/virtualMachines/MyCentOSVM
Name : MyCentOSVM
Type : Microsoft.Rest.Azure.AzureOperationResponse`1[Microsoft.Rest.Azure.IPage`1[Microsoft.Azure.Management.Compute.Models.VirtualMachine]]
Location : chinaeast
Tags : {}
DiagnosticsProfile :
BootDiagnostics :
Enabled : True
StorageUri : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/
HardwareProfile :
VmSize : Standard_A1
NetworkProfile :
NetworkInterfaces[0] :
Id : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
OSProfile :
ComputerName : MyCentOSVM
AdminUsername : hengwei
LinuxConfiguration :
DisablePasswordAuthentication : False
ProvisioningState : Succeeded
StorageProfile :
ImageReference :
Publisher : OpenLogic
Offer : CentOS
Sku : 6.5
Version : latest
OsDisk :
OsType : Linux
Name : osdisk
Vhd :
Uri : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/vhds/osdiskforlinuxsimple.vhd
Caching : ReadWrite
CreateOption : FromImage
DataDisks[0] :
Lun : 0
Name : datadisk1
Vhd :
Uri : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/vhds/datadisk1.vhd
Caching : None
CreateOption : Empty
DiskSizeGB : 100
DataDiskNames[0] : datadisk1
NetworkInterfaceIDs[0] : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
Get-AzureRmNetworkInterface

Name                 : myVMNic
ResourceGroupName : hw01
Location : chinaeast
Id : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
Etag : W/"1e379401-4980-42c6-ba83-9e26f19133bd"
ResourceGuid : c4e50ac6-fdb1-416c-a5b2-d71baace6b55
ProvisioningState : Succeeded
Tags :
VirtualMachine : {
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Compute/virtualMachines/MyCentOSVM"
}
IpConfigurations : [
{
"Name": "ipconfig1",
"Etag": "W/\"1e379401-4980-42c6-ba83-9e26f19133bd\"",
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1",
"PrivateIpAddress": "10.0.0.4",
"PrivateIpAllocationMethod": "Dynamic",
"Subnet": {
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET/subnets/Subnet"
},
"PublicIpAddress": {
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/publicIPAddresses/myPublicIP"
},
"ProvisioningState": "Succeeded",
"LoadBalancerBackendAddressPools": [],
"LoadBalancerInboundNatRules": [],
"ApplicationGatewayBackendAddressPools": []
}
]
DnsSettings : {
"DnsServers": [],
"AppliedDnsServers": []
}
EnableIPForwarding : False
NetworkSecurityGroup : null
Primary : True
Get-AzureRmPublicIpAddress

Name                     : myPublicIP
ResourceGroupName : hw01
Location : chinaeast
Id : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/publicIPAddresses/myPublicIP
Etag : W/"0d4e57f8-25a1-4bf7-bec9-e98785ed8179"
ResourceGuid : f8216ff0-06a6-478b-8270-f18fc717c0f7
ProvisioningState : Succeeded
Tags :
PublicIpAllocationMethod : Dynamic
IpAddress : 42.159.235.75
IdleTimeoutInMinutes : 4
IpConfiguration : {
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1"
}
DnsSettings : {
"DomainNameLabel": "hwvm",
"Fqdn": "hwvm.chinaeast.cloudapp.chinacloudapi.cn"
Get-AzureRmVirtualNetwork

Name              : MyVNET
ResourceGroupName : hw01
Location : chinaeast
Id : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET
Etag : W/"888d8b21-091b-4f40-b2ba-284f16c0f641"
ResourceGuid : a69ef02a-728e-4212-8c2a-7a7c0f4bb881
ProvisioningState : Succeeded
Tags :
AddressSpace : {
"AddressPrefixes": [
"10.0.0.0/16"
]
}
DhcpOptions : null
Subnets : [
{
"Name": "Subnet",
"Etag": "W/\"888d8b21-091b-4f40-b2ba-284f16c0f641\"",
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET/subnets/Subnet",
"AddressPrefix": "10.0.0.0/24",
"IpConfigurations": [
{
"Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1"
}
],
"ProvisioningState": "Succeeded"
}
]
Get-AzureRmStorageAccount

ResourceGroupName   : hw01
StorageAccountName : eyyvnizdwsddusalinuxvm
Id : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Storage/storageAccounts/eyyvnizdwsddusalinuxvm
Location : chinaeast
Sku : Microsoft.Azure.Management.Storage.Models.Sku
Kind : Storage
Encryption :
AccessTier :
CreationTime : 2016/7/1 14:07:14
CustomDomain :
LastGeoFailoverTime :
PrimaryEndpoints : Microsoft.Azure.Management.Storage.Models.Endpoints
PrimaryLocation : chinaeast
ProvisioningState : Succeeded
SecondaryEndpoints :
SecondaryLocation :
StatusOfPrimary : Available
StatusOfSecondary :
Tags : {}
Context : Microsoft.WindowsAzure.Commands.Common.Storage.AzureStorageContext

使用Json Template在Azure China创建ARM类型的虚拟机的更多相关文章

  1. 用Json Template在Azure上创建Cisco CSR路由器

    Azure的ARM模式可以通过Json的模板创建VM.本文以Cisco的CSR的image为例,介绍如何用Json的创建VM. 一.Cisco CSR的Image 首先把Cisco CSR的image ...

  2. 使用PowerShell在Azure China创建Data Warehouse

    微软的Azure Data Warehouse是基于MPP架构的分布式系统: Control Node负责管理系统和接受用户的请求,Compute Node负责计算. 目前在国内Azure Data ...

  3. 在Global Azure上用Azure CLI创建ARM的VM和面向公网的负载均衡

    在Global的Azure上,新的Portal和ARM已经正式发布.将来传统的portal和ASM将逐渐淡出. China Azure将在今年下半年推出新的Portal管理界面和ARM功能(即IaaS ...

  4. Azure CLI2.0 捕获Linux ARM非托管磁盘虚拟机并创建ARM托管磁盘虚拟机

    1.系统内部取消预配VM,创建了测试文件目录及文件:hlm20180904/ hlm20180904.txt 2.使用CLI2.0创建VM映像 a.登陆CLI2.0 备注:在 Azure 中国区使用 ...

  5. Azure ARM (22) 使用Azure PowerShell创建Azure RM VM

    <Windows Azure Platform 系列文章目录> 在Azure China获得VM Image,可以执行下面的脚本. Get-AzureRmVMImagePublisher ...

  6. Java 创建 ARM 虚拟机磁盘类型选择的问题

    问题描述 在Azure 门户创建 ARM 虚拟机时,我们直接可以选择虚拟机的磁盘类型,但是在 Azure Management Libraries for Java 的 API 中我们无法找到直接设置 ...

  7. Azure ARM (5) ARM Template初探 - 本地JSON Template文件(1)

    <Windows Azure Platform 系列文章目录>      Azure ARM (1) 概览      Azure ARM (2) 概览      Azure ARM (3) ...

  8. Azure上采用Json Template从已有的VHD创建VM

    从已有的VHD创建VM是使用Azure中经常要操作的内容. 本文将介绍如何采用Json Template从已经有的VHD创建VM. 一.准备VHD 在我的Azure账户中选择一台VM,如下图: 查看其 ...

  9. 在Azure China用自定义镜像创建Azure VM Scale Set

    在Azure China用自定义镜像创建Azure VM Scale Set 在此感谢世纪互联的工程师Johnny Lee和Lan,你们给了我很大的帮助.因为Azure China的官网没有给出完整的 ...

随机推荐

  1. node中session存储与销毁,及session的生命周期

    1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...

  2. gzip: stdin: unexpected end of file tar: Unexpected EOF in archive

    1.问题描述: 今天解压tar包遇到这样一个问题 使用命令:tar -zxvf  xxxxx.tar.gz gzip: stdin: unexpected end of filetar: Unexpe ...

  3. Windows 7安装PHP运行环境和开发环境

    1. 安装Apache 下载地址:http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32 如需更改端口:打开Apache安装目录下conf目 ...

  4. API是什么?——回答:接口。(待)

    基础打不够啊,一句话问倒我.第一反应是像java,matlab之类的api,下个小文件,然后安装到电脑上,可以很方便的查看一些东西. 但是一般公司的对外api不可能做的像java这样,还专门提供一个可 ...

  5. js适配器模式

    适配器模式,将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范 ...

  6. c# 判断一个ip通不通 能不能ping通

    方法一: 已经证实能用的. using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...

  7. Android在layout xml中使用ViewStub完成动态加载

    Android在layout xml中使用ViewStub完成动态加载 一.Layout XML文件常见的两种模块加载方式 1.静态加载:被加载的模块和其它模块加载的时间一样. <include ...

  8. WPF TextBox 只能输入数字键

     <Grid>         <TextBox Name="textBox1" PreviewTextInput="textBox1_PreviewT ...

  9. QBXT Day 4 数学,数论

    今天讲一讲数论吧(虽然清明讲过了) 进制转换 我们来看10这个数怎么转换成k进制 因为10=2^3+2^1,所以10就是1010 三进制也同理10=3^2+3^0,所以就是101 我们对于一个10进制 ...

  10. node.js 操作excel

    首先安装依赖库node-xlsx npm install node-xlsx 在操作文件中直接引用 var xlsx = require("node-xlsx"); 读取excel ...