首页 文章

从现有VHD创建VM:预览门户

提问于
浏览
5

现在有人如何在新的天蓝色门户中从现有的VHD创建VM?

我可以在manage.windowsazure.com上找到有关如何执行此操作的大量信息,但在portal.azure.com中没有任何关于此功能的信息 .

2 回答

  • 3

    它不能在门户网站上完成 . 您将不得不使用powershell .

    • 创建storageaccount . 例如在门户网站中 .

    • 将VHD上传到azure . 要执行此操作,请在使用 Login-AzureRmAccount 登录后在powershell中运行以下行(更改<>之间的参数和硬盘上vhd的路径):

    Add-AzurermVhd -Destination "https://<StorageAccountName>.blob.core.windows.net/<containerName>/<vhdname>.vhd" -LocalFilePath "D:\Virtual Machines\myharddisk.vhd" -ResourceGroupName "<ResourceGroupName" -Overwrite
    

    我所做的是:

    • 在Visual Studio 2015中创建了一个新项目 .

    • 选择以下项目:Cloud-> Azure Resource Group

    • 选择以下模板:Windows虚拟机

    • 更改了一些参数并删除了所有不必要的东西 . 它现在的作用是:使用上传的vhd作为硬盘创建Windows虚拟机 . 它现在使用参数json文件,并且还必须在WindowsVirtualMachine.json中设置一些变量 . 这可能是重构的 . 但是现在它会做你需要的 .

    对于此示例,您必须具有以下目录结构(就像Visual Studio创建它一样)

    ProjectDirectory/Scripts/Deploy-AzureResourceGroup.ps1
    ProjectDirectory/Templates/WindowsVirtualMachine.json
    ProjectDirectory/Templates/WindowsVirtualMachine.parameters.json
    

    部署-AzureResourceGroup.ps1

    #Requires -Version 3.0
    #Requires -Module AzureRM.Resources
    #Requires -Module Azure.Storage
    
    Param(
        [string] [Parameter(Mandatory=$true)] $ResourceGroupLocation,
        [string] $ResourceGroupName = 'CreateImage',    
        [string] $TemplateFile = '..\Templates\WindowsVirtualMachine.json',
        [string] $TemplateParametersFile = '..\Templates\WindowsVirtualMachine.parameters.json'
    )
    
    Import-Module Azure -ErrorAction SilentlyContinue
    
    try {
        [Microsoft.Azure.Common.Authentication.AzureSession]::ClientFactory.AddUserAgent("VSAzureTools-$UI$($host.name)".replace(" ","_"), "2.8")
    } catch { }
    
    Set-StrictMode -Version 3
    
    $OptionalParameters = New-Object -TypeName Hashtable
    $TemplateFile = [System.IO.Path]::Combine($PSScriptRoot, $TemplateFile)
    $TemplateParametersFile = [System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile)
    
    
    # Create or update the resource group using the specified template file and template parameters file
    New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop 
    
    New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
                                       -ResourceGroupName $ResourceGroupName `
                                       -TemplateFile $TemplateFile `
                                       -TemplateParameterFile $TemplateParametersFile `
                                       @OptionalParameters `
                                       -Force -Verbose
    

    WindowsVirtualMachine.json

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {    
        "dnsNameForPublicIP": {
          "type": "string",
          "minLength": 1,
          "metadata": {
            "description": "Globally unique DNS Name for the Public IP used to access the Virtual Machine."
          }
        }   
      },
      "variables": {
        "OSDiskName": "<vhdNameWithoutExtension>",
        "vhdStorageContainerName": "<containerName>",
        "storageAccountName": "<StorageAccountName>",
        "nicName": "myVMNic",
        "addressPrefix": "10.0.0.0/16",
        "subnetName": "Subnet",
        "subnetPrefix": "10.0.0.0/24",
        "vhdStorageType": "Standard_LRS",
        "publicIPAddressName": "myPublicIP",
        "publicIPAddressType": "Dynamic",
        "vhdStorageName": "[concat('vhdstorage', uniqueString(resourceGroup().id))]",
        "vmName": "MyWindowsVM",
        "vmSize": "Standard_A2",
        "virtualNetworkName": "MyVNET",
        "vnetId": "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
        "subnetRef": "[concat(variables('vnetId'), '/subnets/', variables('subnetName'))]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "name": "[variables('vhdStorageName')]",
          "apiVersion": "2015-06-15",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "StorageAccount"
          },
          "properties": {
            "accountType": "[variables('vhdStorageType')]"
          }
        },
        {
          "apiVersion": "2015-06-15",
          "type": "Microsoft.Network/publicIPAddresses",
          "name": "[variables('publicIPAddressName')]",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "PublicIPAddress"
          },
          "properties": {
            "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
            "dnsSettings": {
              "domainNameLabel": "[parameters('dnsNameForPublicIP')]"
            }
          }
        },
        {
          "apiVersion": "2015-06-15",
          "type": "Microsoft.Network/virtualNetworks",
          "name": "[variables('virtualNetworkName')]",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "VirtualNetwork"
          },
          "properties": {
            "addressSpace": {
              "addressPrefixes": [
                "[variables('addressPrefix')]"
              ]
            },
            "subnets": [
              {
                "name": "[variables('subnetName')]",
                "properties": {
                  "addressPrefix": "[variables('subnetPrefix')]"
                }
              }
            ]
          }
        },
        {
          "apiVersion": "2015-06-15",
          "type": "Microsoft.Network/networkInterfaces",
          "name": "[variables('nicName')]",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "NetworkInterface"
          },
          "dependsOn": [
            "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
            "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
          ],
          "properties": {
            "ipConfigurations": [
              {
                "name": "ipconfig1",
                "properties": {
                  "privateIPAllocationMethod": "Dynamic",
                  "publicIPAddress": {
                    "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]"
                  },
                  "subnet": {
                    "id": "[variables('subnetRef')]"
                  }
                }
              }
            ]
          }
        },
        {
          "apiVersion": "2015-06-15",
          "type": "Microsoft.Compute/virtualMachines",
          "name": "[variables('vmName')]",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "VirtualMachine"
          },
          "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', variables('vhdStorageName'))]",
            "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
          ],
          "properties": {
            "hardwareProfile": {
              "vmSize": "[variables('vmSize')]"
            },       
            "storageProfile": {         
              "osDisk": {
                "name": "osdisk",
                "osType": "Windows",
                "vhd": {
                  "uri": "[concat('http://', variables('storageAccountName'), '.blob.core.windows.net/', variables('vhdStorageContainerName'), '/', variables('OSDiskName'), '.vhd')]"
                },
                "caching": "ReadWrite",
                "createOption": "Attach"
              }
            },
            "networkProfile": {
              "networkInterfaces": [
                {
                  "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
                }
              ]
            }   
          }      
        }
      ]
    }
    

    WindowsVirtualMachine.parameters.json

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {       
            "dnsNameForPublicIP": {
                "value": "<someUniqueNameForYourDnsName>"
            }
        }
    }
    
    • 执行powershell脚本打开Powershell命令并执行ps1脚本 . 您只需要传递您希望创建虚拟机的位置,如:(您应该已经使用 Login-AzureRmAccount 登录)

    Before running change the parameters in both json files!
    .\Deploy-AzureResourceGroup.ps1 "West Europe"

    日志记录应该告诉您VM已成功创建 .

  • 5

    今天(2016年10月)仍然无法在新门户网站上完成 .

    但为了完整性:您可以在旧门户网站(https://manage.windowsazure.com)中执行此操作:

    单击新建 - 计算 - 虚拟机 - 从库中 . 在左侧选择我的图像或我的磁盘并选择您要使用的VHD . 照常按照说明操作 .

相关问题