Azure虚拟机的默认内部IP地址由DHCP分配,并且当VM关闭,资源收回之后如果再次启动该VM,则这台VM的内部IP地址可能会发生变化,这对于迁移到Azure的本地系统而言是一个比较大的挑战,另外,对于一些向其他虚拟机提供服务的系统而言则更为严峻,比如DNS服务器,如果重新启动之后其内部IP地址发生变化的话,无疑会对整个系统造成非常大的影响。
借助最新的 PowerShell 版本,您现在能够定义和配置特定的内部 IP 地址,该地址可以静态分配给部署在虚拟网络中的 IaaS 虚拟机。使用此功能,您可以直接为虚拟机配置内部 IP 地址,即使停止再启动虚拟机该地址也不会改变。您甚至可以删除虚拟机,在几个月后重新进行部署, IP 地址还是可以保持不变。
设置虚机静态地址一般有2种情形:
§ 虚拟机已经创建
§ 新建虚拟机
对于第一种情形,比较简单,命令如下:
Get-AzureVM -ServiceName shnycs01 -name shnyvm01 |Set-AzureStaticVnetip -ipaddress 10.0.0.10 |Update-AzureVM
第二种情形:
提示:在继续之前,虚拟机需要使用的云服务、虚拟网络、存储空间要先创建好。
实现过程
1. 设置当前订阅的存储账号
Set-AzureSubscription -SubscriptionName '[SubscriptionName]' -CurrentStorageAccount '[StorageName]'
2. 设置当前订阅
Select-AzureSubscription -SubscriptionName '[SubscriptionName]' –Current
3. 使用精确或模糊查询,查询到某个虚拟机镜像
$p_w_picpathList = Get-AzureVMImage | where {$_.ImageName -like "*Windows-Server-2012-Datacenter*"}
$p_w_picpath=$p_w_picpathList[0]
4. 根据实际情况,修改下面[]的参数
$ServiceName= "[虚拟机名称]"
$VMSize= "[虚拟机大小]"
$adminusername="[虚拟机登录名]"
$adminpassword="[虚拟机密码]"
$SubnetName="[子网名称]"
$PrivateIP="[内网IP地址]"
$CloudServiceName="[云服务名称]"
$VNetName="[虚拟网络名称]"
$Location="[Azure数据中心]"
New-AzureVMConfig -Name $ServiceName -InstanceSize $VMSize -ImageName $p_w_picpath.ImageName | Add-AzureProvisioningConfig -Windows -AdminUsername $adminusername -Password $adminpassword -TimeZone 'China Standard Time' | Set-AzureSubnet -SubnetNames $SubnetName | Set-AzureStaticVNetIP -IPAddress $PrivateIP | New-AzureVM -ServiceName $CloudServiceName -VNetName $VNetName -Location $Location
注意:VMsize区分大小写。
操作截图:
ISE界面
完整代码如下:
Select-AzureSubscription -SubscriptionName 'MSDN Platforms' -Current
Set-AzureSubscription -SubscriptionName 'MSDN Platforms' -CurrentStorageAccount 'shnysp01'
$p_w_picpathlist=get-azurevmp_w_picpath |where {$_.p_w_picpathname -like "*Windows-Server-2012-Datacenter*"}
$p_w_picpath=$p_w_picpathlist[0]
$ServiceName="shnyvm40"
$vmsize="Medium" //相当于A2
$adminusername="master"
$adminpassword="1234.com"
$subnetname="Subnet-1"
$privateip="172.16.0.40"
$cloudservicename="shnycs01"
$vnetname="shnyvnet01"
$location="east asia"
New-AzureVMConfig -Name $ServiceName -InstanceSize $VMSize -ImageName $p_w_picpath.ImageName ` | Add-AzureProvisioningConfig -Windows -AdminUsername $adminusername -Password $adminpassword -TimeZone 'China Standard Time' |Set-AzureSubnet -SubnetNames $SubnetName | Set-AzureStaticVNetIP -IPAddress $PrivateIP | New-AzureVM -ServiceName $CloudServiceName -VNetName $VNetName -Location $Location
命令完成后,切换到azure门户-云服务-实例
显示Shnyvm04虚拟机正在创建。
另外,如果需要批量创建虚拟机,也可以编辑ISE脚本实现便捷操作。