使用Azure REST API创建虚拟机
Hollis Yao, Shihao Rong
使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号"。如果没有的话,可以使用Azure管理页面,或Powershell命令行工具,或REST API来创建云服务和存储账号。
https://msdn.microsoft.com/library/gg441304.aspx
https://azure.microsoft.com/zh-cn/documentation/articles/storage-create-storage-account/
另外需要注意的是,由于国内的Azure是独立运营的,因此调用API时,需要将MSDN代码中的https://management.core.windows.net
替换成:
https://management.core.chinacloudapi.cn/
随后需要在调用API的客户端主机上安装证书并上传到Azure Portal。
安装并上传证书。
步骤如下:
1 使用Visual Studio 2013的命令行,输入以下命令:(需要将命令中的<CertificateName>替换成自己的证书名称)
makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
2 在客户端主机上运行certmgr.msc,并在证书管理器中找到"个人"证书,并找到刚才创建的证书。右键点击该证书,选择导出,在之后的导出证书向导中,选择"不要导出私钥",证书格式选择DER X.509。

3 打开Azure管理portal网页,在左边的导航菜单中找到"设置",在设置菜单中点击"管理证书",并选择上载刚才导出的不含私钥的证书。上传成功后会在portal上看到这个证书,并且还列出了订阅ID和指纹。订阅ID和指纹在后面的代码中会用到。

证书上传的工作已经完成,下面就可以进行调用REST API的代码开发工作。
这里使用VS2013新建一个控制台应用程序来做演示。需要配合附件《CreateVM_API.rar》中的代码来阅读此文档。
调用API
在VS2013中打开项目"CreateVM_API",主要会用到三个文件:
Program.cs 这是项目的主要程序文件,其中已包含了读取本地的证书,需要将刚才在Azure Portal上看到的指纹字符串替换掉代码中的"certificateThumbprint"。还需要替换URI字符串中的一些参数,后面会说明。
RequestBody.xml 这是用于新建部署的请求正文
AddVM.xml 这是用于在已有部署中增加虚拟机的请求正文
这里需要补充说明一下,在使用REST API创建虚拟机的时候需要遵守以下步骤:
创建云服务和存储账户
在云服务下创建一个部署槽
在部署槽中添加一台虚拟机
代码中用了两个例子来演示以上步骤,这里对这两个例子做一下解释。
示例1
在未部署虚拟机的云服务中创建部署槽并建立虚拟机
需要调用以下REST API
"https://management.core.chinacloudapi.cn/{0}/services/hostedservices/{1}/deployments
这里也就是Program.cs的Main函数中定义的URI。
用订阅ID替换{0}
用云服务的名称替换{1}
再将刚才在Azure Portal上看到的指纹字符串替换掉代码中的"certificateThumbprint"
随后我们需要对示例代码中的RequestBody.xml进行相应的修改。
<Name>部署槽的名称</Name> 之后向部署中添加虚拟机时会用到 对应下图中红框所示部分
<Label>部署槽标签</Label> 用于标识该部署槽,对应下图蓝框部分

<RoleName>角色名称</RoleName>也就是在Azure Portal中看到的虚拟机的名称
<ComputerName>计算机名称</ComputerName>虚拟机内的操作系统的计算机名称
<AdminPassword>管理员密码</AdminPassword>虚拟机的操作系统的管理员密码,需要遵守所创建的操作系统的默认密码复杂性规则。管理员名称默认为administrator。
然后需要处理一下虚拟机的端口映射,以便远程桌面之类的工具可以访问我们的虚拟机。
<LocalPort>虚拟机的端口</LocalPort>也就是内网端口
<Name>端口映射规则的名称</Name>每个虚拟机端口映射条目都要指定一个名称
<Port>云服务端口</Port>也就是外网端口
<Protocol>协议类型</Protocol>只能输入TCP或UDP
然后需要选择虚拟机的操作系统映像
<SourceImageName>55bc2b193643443bb879a78bda516fc8__Windows-Server-2012-R2-201502.01-zh.cn-127GB.vhd</SourceImageName>
这里的值是由Azure提供的,可以通过REST API或者Powershell命令来获取当前Azure提供的操作系统镜像。
https://msdn.microsoft.com/zh-cn/library/azure/jj157191.aspx
最后选择保存该镜像的路径,需要保存到已存在的存储账户中
<MediaLink>https://{0}.blob.core.chinacloudapi.cn/vhds/{1}.vhd</MediaLink>将{0}替换成存储账户名称,将{1}替换成想要保存的文件名称,尽量只使用小写字幕和数字来设置文件名。
随后即可运行代码。
示例2
在已部署了虚拟机的云服务中建立虚拟机
需要调用以下API:
https://management.core.chinacloudapi.cn/{0}/services/hostedservices/{1}/deployments/{2}/roles
这里也就是Program.cs的Main函数中定义的第二个URI。
用订阅ID替换{0}
用云服务的名称替换{1}
用部署名称替换{2}。部署名称就是RequestBody.xml中的<Name>部署槽的名称</Name>,也可以通过Azure Portal,在云服务的仪表板中找到部署名称。
再将刚才在Azure Portal上看到的指纹字符串替换掉代码中的"certificateThumbprint"
随后我们需要对示例代码中的addVM.xml进行相应的修改就可运行代码。需要修改的内容和RequestBody.xml基本一致,只是不能有<Name>和 <Label> 这两个属性。
使用Azure REST API创建虚拟机的更多相关文章
- C#码农的大数据之路 - 使用Azure Management API创建HDInsight集群
Azure平台提供了几乎全线产品的API,可以使用第三方工具来进行管理.对于.NET更是提供封装好了的库方便使用C#等语言实现Azure的管理. 我们使用创建HDInsight集群为例来介绍使用C#管 ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- Azure xplate cli创建虚拟机
Azure的管理工具多种多样.其中Portal和PowerShell是经常使用的. 但用MAC和Linux的同学最喜欢的还是Bash环境. Azure也提供了跨平台的命令行工具:Azure xplat ...
- Azure ARM (9) 创建ARM模式下的虚拟机网络
<Windows Azure Platform 系列文章目录> 笔者在之前几章内容中,创建了ARM Resource Group,然后在这个ARM Resource Group下创建Azu ...
- Azure ARM (11) ARM模式下,创建虚拟机并配置负载均衡器
<Windows Azure Platform 系列文章目录> 本文内容比较多,请大家仔细阅读,谢谢! 在前几章中,我们做了准备工作: 1.创建ARM Resouce Group,叫Lei ...
- nova创建虚拟机源码分析系列之六 api入口create方法
openstack 版本:Newton 注:博文图片采用了很多大牛博客图片,仅作为总结学习,非商用.该图全面的说明了nova创建虚机的过程,从逻辑的角度清晰的描述了前端请求创建虚拟机之后发生的一系列反 ...
- nova创建虚拟机源码分析系列之一 restful api
开始学习openstack源码,源码文件多,分支不少.按照学习的方法走通一条线是最好的,而网上推荐的最多的就是nova创建虚机的过程.从这一条线入手,能够贯穿openstack核心服务.写博文仅做学习 ...
- 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序
负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...
- Openstack创建虚拟机 Restful api和RPC调用
Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...
随机推荐
- MSSQLServer中组织或分类表的设计及其递归查询
开篇:项目中用到上下级从属关系的太多太多了,如:组织.分类.行政区域,这里不再一一介绍,遇到这种的如何去进行数据库表的设计及其应用的,个人对往期项目中所涉及到的进行了一些总结. 数据库表设计:表字段一 ...
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
本文转载至:http://perfy315.iteye.com/blog/1460226 AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,下面就对Spri ...
- linux指令学习笔记(一)
1. 查看目录下有什么文件/目录 > ls //list列出目录的文件信息 > ls -l 或ll //list -list以“详细信息”查看目录文 ...
- 使用django开发博客过程记录1——数据库设计
1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ...
- 101 LINQ Samples
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
- phpmyadmin #1045 - Access denied for user 'root'@'localhost' (using password: NO)
phpmyadmin访问遇到1045问题 #1045 - Access denied for user 'root'@'localhost' (using password: NO) 解决办法 找到p ...
- centos7 cannot find a valid baseurl for repo base (转载)
centos7 cannot find a valid baseurl for repo base 今天在虚拟机下安装centosmini版本,安装后第一件事就是yum update 但是有错 ...
- Altium Designer 的entry sheet ,offsheet和port作用(转载)
1.图纸结构 图纸包括两种结构关系: 一种是层次式图纸,该连接关系是纵向的,也就是某一层次的图纸只能和相邻的上级或下级有关系: 另一种是扁平式图纸,该连接关系是横向的,任何两张图纸之间都可以建立信号连 ...
- java从基础知识(九)I/O
java中的流可以从不同的角度进行分类 按流的方向:输入流.输出流(注意这里的输入(read).输出是相对于程序而言的(writer),个人认为从读.写角度理解更为直观) 按处理数据单位:字节流.字符 ...
- 金字塔Lucas-Kanande光流算法实现
// Lucas-Kanade method Optical Flow in OpenCV // BJTShang, 2016-12-13 #include <cv.h> #include ...