Java調用ARM模板執行Azure Rest建立VM過程
阿新 • • 發佈:2017-11-25
sna string happy data- 交互 disk view manual name
Azure Resource Manager 提供一致的管理層,用於管理通過 Azure PowerShell、Azure CLI、Azure 門戶、REST API 和開發工具執行的任務,所有工具使用一組通用操作,這就意味著Resource Manager 提供了一種新方法來部署和管理解決方案。下圖顯示各種工具如何與同一 Azure 資源管理器 API 交互, API 將請求傳遞給 Resource Manager 服務,後者對請求進行身份驗證和授權,隨後將請求路由到相應的資源提供程序。
本文以創建虛擬機為例,主要描述了通過Java調用ARM API來創建虛擬機的過程。
1. 創建以下資源:
- 資源組:IaaSUserManualDemo
- 虛擬網絡:ContosoVNet(10.1.0.0/22)
- 子網:Web-Subnet(10.1.1.0/24)和App-Subnet(10.1.2.0/24)
- 安全組:Web-NSG和App-NSG
- 可用集:Web-availSet和App-availSet
2. 創建虛擬機(這裏以用資源管理器部署的方式創建完整的虛擬機)
創建結果:創建虛擬機ContosoWeb01,自動分配動態publicIP和privateIP, 指定配置到ContosoVNet和Web-Subnet和Web-availSet和App-NSG,自動創建網絡接口contosoWeb01-nic1
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2017-08-01 例子: https://management.chinacloudapi.cn/subscriptions/d0a61681-0f6a-4e42-a7c4-739bd7b821f7/resourcegroups/IaaSUserManualDemo/providers/Microsoft.Resources/deployments/vmCreation20171125-001?api-version=2017-08-01 Headers: Content-Type: application/json Authorization: Bearer {獲取到的令牌}
以下是請求的Body部分:(在當前資源組下申請新的虛擬機,您只需要更改JSON尾部標黃的部分,這部分對應了您在門戶中創建虛擬機時提供的相關參數)。
{ "properties": { "template": { "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string" }, "virtualMachineName": { "type": "string" }, "virtualMachineSize": { "type": "string" }, "adminUsername": { "type": "string" }, "virtualNetworkName": { "type": "string" }, "networkInterfaceName": { "type": "string" }, "networkSecurityGroupName": { "type": "string" }, "adminPassword": { "type": "securestring" }, "availabilitySetName": { "type": "string" }, "diagnosticsStorageAccountName": { "type": "string" }, "diagnosticsStorageAccountId": { "type": "string" }, "diagnosticsStorageAccountType": { "type": "string" }, "subnetName": { "type": "string" }, "publicIpAddressName": { "type": "string" }, "publicIpAddressType": { "type": "string" }, "publicIpAddressSku": { "type": "string" } }, "variables": { "vnetId": "[resourceId(‘IaaSUserManualDemo‘,‘Microsoft.Network/virtualNetworks‘, parameters(‘virtualNetworkName‘))]", "subnetRef": "[concat(variables(‘vnetId‘), ‘/subnets/‘, parameters(‘subnetName‘))]" }, "resources": [ { "name": "[parameters(‘virtualMachineName‘)]", "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2016-04-30-preview", "location": "[parameters(‘location‘)]", "dependsOn": [ "[concat(‘Microsoft.Network/networkInterfaces/‘, parameters(‘networkInterfaceName‘))]", "[concat(‘Microsoft.Storage/storageAccounts/‘, parameters(‘diagnosticsStorageAccountName‘))]" ], "properties": { "osProfile": { "computerName": "[parameters(‘virtualMachineName‘)]", "adminUsername": "[parameters(‘adminUsername‘)]", "adminPassword": "[parameters(‘adminPassword‘)]", "windowsConfiguration": { "provisionVmAgent": "true" } }, "hardwareProfile": { "vmSize": "[parameters(‘virtualMachineSize‘)]" }, "storageProfile": { "imageReference": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "2016-Datacenter", "version": "latest" }, "osDisk": { "createOption": "fromImage", "managedDisk": { "storageAccountType": "Standard_LRS" } }, "dataDisks": [] }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId(‘Microsoft.Network/networkInterfaces‘, parameters(‘networkInterfaceName‘))]" } ] }, "diagnosticsProfile": { "bootDiagnostics": { "enabled": true, "storageUri": "[reference(resourceId(‘IaaSUserManualDemo‘, ‘Microsoft.Storage/storageAccounts‘, parameters(‘diagnosticsStorageAccountName‘)), ‘2015-06-15‘).primaryEndpoints[‘blob‘]]" } }, "availabilitySet": { "id": "[resourceId(‘Microsoft.Compute/availabilitySets‘, parameters(‘availabilitySetName‘))]" } } }, { "name": "[parameters(‘diagnosticsStorageAccountName‘)]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2015-06-15", "location": "[parameters(‘location‘)]", "properties": { "accountType": "[parameters(‘diagnosticsStorageAccountType‘)]" } }, { "name": "[parameters(‘networkInterfaceName‘)]", "type": "Microsoft.Network/networkInterfaces", "apiVersion": "2016-09-01", "location": "[parameters(‘location‘)]", "dependsOn": [ "[concat(‘Microsoft.Network/publicIpAddresses/‘, parameters(‘publicIpAddressName‘))]" ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "subnet": { "id": "[variables(‘subnetRef‘)]" }, "privateIPAllocationMethod": "Dynamic", "publicIpAddress": { "id": "[resourceId(‘IaaSUserManualDemo‘,‘Microsoft.Network/publicIpAddresses‘, parameters(‘publicIpAddressName‘))]" } } } ], "networkSecurityGroup": { "id": "[resourceId(‘IaaSUserManualDemo‘, ‘Microsoft.Network/networkSecurityGroups‘, parameters(‘networkSecurityGroupName‘))]" } } }, { "name": "[parameters(‘publicIpAddressName‘)]", "type": "Microsoft.Network/publicIpAddresses", "apiVersion": "2017-08-01", "location": "[parameters(‘location‘)]", "properties": { "publicIpAllocationMethod": "[parameters(‘publicIpAddressType‘)]" }, "sku": { "name": "[parameters(‘publicIpAddressSku‘)]" } } ], "outputs": { "adminUsername": { "type": "string", "value": "[parameters(‘adminUsername‘)]" } } }, "parameters": { "location": { "value": "chinanorth" }, "virtualMachineName": { "value": "ContosoWeb01" }, "virtualMachineSize": { "value": "Standard_A1_v2" }, "adminUsername": { "value": "wangfeng" }, "virtualNetworkName": { "value": "ContosoVNet" }, "networkInterfaceName": { "value": "contosoWeb01-nic1" }, "networkSecurityGroupName": { "value": "Web-NSG" }, "adminPassword": { "value": "Happywangfeng1234" }, "availabilitySetName": { "value": "Web-AvailSet" }, "diagnosticsStorageAccountName": { "value": "iaasusermanualdemo393" }, "diagnosticsStorageAccountType": { "value": "Standard_LRS" }, "diagnosticsStorageAccountId": { "value": "Microsoft.Storage/storageAccounts/iaasusermanualdemo393" }, "subnetName": { "value": "Web-Subnet" }, "publicIpAddressName": { "value": "ContosoAD02-ip" }, "publicIpAddressType": { "value": "Dynamic" }, "publicIpAddressSku": { "value": "Basic" } }, "mode": "Incremental" } }
返回結果如圖所示:獲取操作狀態的URL在返回的頭部,圖中以紅框標出
查詢執行結果狀態:執行配置中
查詢執行結果狀態:執行成功
Java調用ARM模板執行Azure Rest建立VM過程