从现有的VHD创建虚拟机:预览门户 [英] Create VM from existing VHD: Preview portal

查看:99
本文介绍了从现有的VHD创建虚拟机:预览门户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

现在有人在新的Azure门户中如何从现有VHD创建VM吗?

Does anyone now how to create a VM from an existing VHD in the new azure portal ?

我可以在manage.windowsazure.com中找到很多有关如何执行此操作的信息,但在portal.azure.com中对此功能一无所知.

I can find lots of info on how to do this in manage.windowsazure.com, but nothing on this functionality in portal.azure.com.

推荐答案

这不能从字面上在门户中完成.您将不得不使用powershell.

It can't be done literally in the portal. You will have to use powershell.

  1. 创建一个存储帐户.例如在门户网站中.

  1. Create a storageaccount. For example in the portal.

将VHD上载到天蓝色.为此,请在使用Login-AzureRmAccount登录后在powershell中运行以下行(在<>和硬盘上的vhd路径之间更改参数):

Upload the VHD to azure. To do this, run the following line in powershell after logging in with Login-AzureRmAccount (change the parameters between <> and the path to the vhd on your harddisk):

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

  • 创建一个ARM模板. 多种可能性您可以做什么. 例如,从 Azure快速入门模板中选择模板,例如

  • Create an ARM template. Multiple possiblities what you can do. For example choose a template from the Azure Quickstart templates, for example 101

    我所做的是:

    • 在Visual Studio 2015中创建了一个新项目.
    • 选择以下项目:Cloud-> Azure资源组
    • 选择以下模板:Windows虚拟机

    • Created a new project in Visual Studio 2015.
    • Choose the following project: Cloud->Azure Resource Group
    • Choose the following template: Windows Virtual Machine

    更改了一些参数,并删除了所有不必要的内容. 现在要做的是:使用上载的vhd作为硬盘创建Windows虚拟机. 它现在正在使用参数json文件,并且还必须在WindowsVirtualMachine.json中设置一些变量 这当然可以重构.但现在它会做所需的事情.

    Changed some parameters and removed all stuff that is not necessary. What it does now is: Create a Windows Virtual Machine using the uploaded vhd as harddisk. It's using a parameters json file now, and also some variables have to be set in the WindowsVirtualMachine.json This could be refactored ofcourse. but for now it will do what's needed.

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

    For this sample you have to have the following directory structure (just like Visual Studio creates it)

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

    Deploy-AzureResourceGroup.ps1

    Deploy-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

    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

    WindowsVirtualMachine.parameters.json

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {       
            "dnsNameForPublicIP": {
                "value": "<someUniqueNameForYourDnsName>"
            }
        }
    }
    

    1. 执行powershell脚本 打开Powershell命令并执行ps1脚本.您只需传递想要创建虚拟机的位置,例如:(您应该已经使用Login-AzureRmAccount登录)

    1. Execute the powershell script Open up a Powershell command and execute the ps1 script. You only have to pass the location where you want the vm to be created like: (you should already be logged in with Login-AzureRmAccount)

    在运行之前,请更改两个json文件中的参数!
    .\Deploy-AzureResourceGroup.ps1 "West Europe"

    日志记录应该告诉您虚拟机创建成功.

    The logging should tell you that the VM is created successfully.

    这篇关于从现有的VHD创建虚拟机:预览门户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆