有关Azure上的存储服务在之前的博文中有提起过(传送门:http://maomaostyle.blog.51cto.com/2220531/1349156),其实对于Azure存储最必要的是搞明白存储账户、容器以及Blob之间的关系和作用。那么接下来可能有的用户希望可以在Azure上创建基于客户端版操作系统的VM,比如Win7或者Win8之类的,但显然在Azure的库中并没有提供包含这些OS版本的可用实例,那么此时就需要用户自行上传VHD来实现诸如此类的需求了,但遗憾的是Azure图形化UI上并没能找到上传VHD的入口 :( 不过不用不愁,凡事一定有路子可走,微软也不会没有考虑到用户这方面的使用场景,其实我们可以通过PowerShell的方式来实现。

####################################################################

首先要想利用PowerShell来管理Azure上的订阅,我们需要单独下载Azure PowerShell的module,链接如下图所示,随便网上一搜很容易找到:

上传VHD到Azure并创建虚拟机_第1张图片

下载后的安装文件如下图所示:

上传VHD到Azure并创建虚拟机_第2张图片

同样和WAP一样也是利用Web平台安装程序来进行在线下载并安装的:

上传VHD到Azure并创建虚拟机_第3张图片

安装成功之后,可以在PowerShell里验证是否有效,如下图所示我们可以看到Azure PowerSehll module的安装路径:

上传VHD到Azure并创建虚拟机_第4张图片

#####################################################################

接下来就准备在我们的本地计算机,或者说是私有云(也可称为本地环境on-premise)下来管理我们Azure上的订阅,在管理之前首先要建立一个连接,也可以理解成要使双方彼此认识一下,通过下方的Get-AzurePublishsettingFile可以调出一个页面并提示用户输入Azure上的用户名及密码,验证通过之后将会下载一个包含所有订阅信息的文件。

上传VHD到Azure并创建虚拟机_第5张图片

那么在使用get-azurepublishsettingfile时要特别留意一个参数,也就是-environment,我们可以手动制定environment的值为“azurechinacloud”,这个特别代表了由世纪互联运营的大陆版Azure。

上传VHD到Azure并创建虚拟机_第6张图片

如下图执行该命令:

上传VHD到Azure并创建虚拟机_第7张图片

输入相应的Azure凭据之后,会下载一个配置文件,里面包含了该凭据下所有权限范围内的订阅信息。

上传VHD到Azure并创建虚拟机_第8张图片

接下来就是把这个配置文件导入到本地计算机内,这样就相当于让本地计算机识别到了Azure上的内容,然后通过网络再加以远程调用和管理等许多动作;利用import-azurepublishsettingfile就可以导入配置文件。

上传VHD到Azure并创建虚拟机_第9张图片

在导入的时候需要指定-publishsettingfile的具体路径,导入成功后会像下图中显示出该文件内包含的订阅信息。

上传VHD到Azure并创建虚拟机_第10张图片

接着在本地计算机通过get-azuresubscription就可以直接看到这些订阅信息了。像下图中我所导入的配置文件中就包含了两个订阅,一个叫“IN_WITEST”,另一个叫“IN-WICRESOFT”,此外我们还注意到每个订阅中都有IsDefault和IsCurrent属性,也就是说如果本地计算机已经识别了多个订阅的话,那么它会默认有一个当前选择,你后续所做的操作如果没有特殊指明的话,将会对这个默认选择的订阅生效,而不会影响到其他订阅里的内容。

上传VHD到Azure并创建虚拟机_第11张图片

那么如果我想对另外一个非default订阅做操作怎么办,就需要使用select-azuresubscription来手动选择订阅了,而且可以指定-current来讲该选中的订阅变更为当前做指定的订阅,这样后续的操作和变更将会仅对这个“当前选中”的订阅生效。

上传VHD到Azure并创建虚拟机_第12张图片

在下图中我就将IN_WITEST选择成了当前订阅,然后再使用add-azurevhd命令来上传VHD文件,特别要说明的是,add-azurevhd只支持*.VHD 格式,不支持VHDX(毕竟大小容量是个问题。。。),而对于要上传的VHD是否为固定大小磁盘(fixed)并没有强制要求,只是一旦上传成功后,在Azure那端该VHD将自动变成为固定大小(fixed)。如下图所示命令,使用add-azurevhd并附加-destination和-localfilepath来指定目标Blod地址和本地源文件路径。此外上传的快慢和稳定性则完全取决于链路带宽质量了。

上传VHD到Azure并创建虚拟机_第13张图片

经过了漫长的等待(屌丝环境)之后,上传成功了~,在Azure的Blod里可以看到名为WIN7.vhd的文件。

上传VHD到Azure并创建虚拟机_第14张图片

那么我们在Azure一旦有了自定义的VHD文件后,就可以创建自己的映像了,说白了也就是自己的VM模板。如下图所示在Azure虚拟机服务中点击“创建映像”。

上传VHD到Azure并创建虚拟机_第15张图片

选择刚才上传成功的WIN7.vhd,如下图所示:

上传VHD到Azure并创建虚拟机_第16张图片

此外输入该映像的名称、说明以及操作系统平台和是否已经做了Sysprep封装。

上传VHD到Azure并创建虚拟机_第17张图片

映像创建是一个非常迅速的过程,很快就可以使用了。

上传VHD到Azure并创建虚拟机_第18张图片

接下来试一试用刚才创建的映像来生成一台VM;如下图所示,选择从库中创建虚拟机。

上传VHD到Azure并创建虚拟机_第19张图片

在“我的映像”了可以看到刚才自己创建的名为WIN7_x64的映像(自己动手丰衣足食)。

上传VHD到Azure并创建虚拟机_第20张图片

接下来就和普通创建虚机没什么区别,按照需要走完向导。

上传VHD到Azure并创建虚拟机_第21张图片

选择要放置的云服务以及开放哪些端口(“终结点”这翻译实在是太迷惑人了。。。)。

上传VHD到Azure并创建虚拟机_第22张图片

最后确认安装了VM代理(VM代理还是很有必要的,日后再说说有它的好处)。

上传VHD到Azure并创建虚拟机_第23张图片

创建虚拟机也是非常迅速的,刚才通过自定义映像而创建的Windows7这台虚机已经可以使用了。

上传VHD到Azure并创建虚拟机_第24张图片

可以看到监控服务也有数据产生了,接下来就通过RDP直接远程登录看一看。

上传VHD到Azure并创建虚拟机_第25张图片

恩,操作系统是Windows7没错,看来使用上也都没什么问题,这样就实现了最初的需求。

上传VHD到Azure并创建虚拟机_第26张图片

######################################################################

总结一下,通过Azure PowerShell就可以上传自己的VHD到公有云之上,并创建相对应的虚拟机资源,这样用户的可选择性就不仅局限在Azure本身提供的那些OS版本了,遗憾的是格式方面还仅支持VHD,现在大部分用户默认创建可能都不会特意的去修改,所以基本上生成的是VHDX格式,那么就还需要进行额外的转换工作,另外在上传过程中对于网络的质量也是要求挺高的,当然了如果不着急就这么慢慢挂着也是可以的。