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> 這兩個屬性。