問題描述
在Azure 門戶創建 ARM 虛擬機時,我們直接可以選擇虛擬機的磁盤類型,但是在Azure Management Libraries for Java的 API 中我們無法找到直接設置磁盤類型的 API.默認創建的磁盤類型是 HDD,如何通過 API 設置磁盤類型?
問題分析
系統磁盤或數據磁盤的類型取決于使用的存儲賬戶類型,如果是基于普通存儲賬戶創建的磁盤,則磁盤類型為 HDD;如果是基于高級存儲創建的磁盤,則磁盤類型為 SDD。更多信息參考:
關于 Azure Windows VM 的磁盤和 VHD(磁盤類型小節)
解決方法
認證憑據
在使用 Azure Management Libraries for Java 時,我們需要通過 AD Application 進行授權認證。建議使用最新版 Powershell 按以下腳本操作:
復制
# 1.在 PowerShell 中,登錄 Azure 賬戶
Login-AzureRmAccount -EnvironmentName AzureChinaCloud
# 2.選擇當前訂閱 ID
Set-AzureRmContext -SubscriptionId "訂閱 ID"
# 3.創建 AD Application
$azureAdApplication = New-AzureRmADApplication -DisplayName "georgeapp" -HomePage "https://www.georgeapp.org" -IdentifierUris "https://www.georgeapp.org/example" -Password "1QAZxsw2"
$azureAdApplication
# 4.為你的 AD 應用創建服務憑證
New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId
# 5.為服務憑證授權。如果想了解更多內容,請參考:https://azure.microsoft.com/en-us/documentation/articles/role-based-access-control-what-is/
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId
執行上述操作后,就可以獲取可用的認證憑據信息:
tentant-id:第二步執行完成后返回
application-id:第三步執行完成后返回
application-password:第三步中設置的 Password
代碼實現
復制
public void createWindows(
String resourceGroupName,
String vmName,
String vmStorageAccountName,
String vmUserName,
String vmPassword,
KnownWindowsVirtualMachineImage vmImage,
Region vmRegion,
VirtualMachineSizeTypes vmSize) throws Exception {
if (azure == null) {
return;
}
StorageAccount storageAccount =azure
.storageAccounts()
.getByGroup(resourceGroupName, vmStorageAccountName);
VirtualMachine windowsVM = azure
.virtualMachines()
.define(vmName)
.withRegion(vmRegion)
.withNewResourceGroup(resourceGroupName)
.withNewPrimaryNetwork("10.0.0.0/28")
.withPrimaryPrivateIpAddressDynamic()
.withoutPrimaryPublicIpAddress()
.withPopularWindowsImage(vmImage)
.withAdminUserName(vmUserName)
.withPassword(vmPassword)
.withNewDataDisk(10)
.withExistingStorageAccount(storageAccount)
.withSize(vmSize).create();
}
@org.junit.Test
public void test() throws Exception {
VmOperation vmOp = new VmOperation(
"tentant-id",
"application-id",
"application-password",
"subId");
vmOp.createWindows(
"資源組",
"虛擬機名稱",
"存儲賬戶名稱",
"虛擬機 RDP 用戶名",
"虛擬機 RDP 密碼",
"虛擬機 Image",
"虛擬機 Region",
"虛擬機 Size");
測試結果
設定為普通存儲賬戶
設定為高級存儲賬戶? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 立即訪問http://market.azure.cn