Создание виртуальной машины из существующего виртуального жесткого диска: портал предварительной версии

Кто-нибудь знает, как создать виртуальную машину из существующего виртуального жесткого диска на новом портале Azure?

Я могу найти много информации о том, как это сделать, на manage.windowsazure.com, но ничего об этой функции на portal.azure.com.


person naylormat    schedule 10.02.2016    source источник


Ответы (2)


Это невозможно сделать буквально в портале. Вам придется использовать powershell.

  1. Создайте учетную запись хранения. Например на портале.

  2. Загрузите виртуальный жесткий диск в Azure. Для этого выполните следующую строку в powershell после входа в систему с помощью Login-AzureRmAccount (измените параметры между ‹> и путем к виртуальному жесткому диску):

    Add-AzurermVhd -Destination "https://<StorageAccountName>.blob.core.windows.net/<containerName>/<vhdname>.vhd" -LocalFilePath "D:\Virtual Machines\myharddisk.vhd" -ResourceGroupName "<ResourceGroupName" -Overwrite
    
  3. Создайте шаблон ARM. Несколько возможностей, что вы можете сделать. Например, выберите шаблон из шаблонов Azure Quickstart, например 101

Что я сделал:

  • Создал новый проект в Visual Studio 2015.
  • Выберите следующий проект: Cloud->Azure Resource Group.
  • Выберите следующий шаблон: Виртуальная машина Windows

  • Изменены некоторые параметры и удалено все, что не нужно. Теперь он делает следующее: создает виртуальную машину 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>"
        }
    }
}
  1. Выполнение сценария powershell Откройте команду Powershell и выполните сценарий ps1. Вам нужно только указать место, где вы хотите создать виртуальную машину, например: (вы уже должны войти в систему с Login-AzureRmAccount)

    Перед запуском измените параметры в обоих файлах json!
    .\Deploy-AzureResourceGroup.ps1 "West Europe"

В журнале должно быть указано, что виртуальная машина создана успешно.

person Pascal Naber    schedule 14.02.2016
comment
Господи, создай проект в Visual Studio для развертывания виртуальной машины в лазури, у тебя действительно много свободного времени. - person 4c74356b41; 14.09.2017

Сегодня (октябрь 2016 г.) это все еще невозможно сделать на новом портале.

Но для полноты: вы можете сделать это на старом портале (https://manage.windowsazure.com):

Нажмите «Создать» — «Вычислить» — «Виртуальная машина» — «Из галереи». Слева выберите МОИ ОБРАЗЫ или МОИ ДИСКИ и выберите виртуальный жесткий диск, который хотите использовать. Следуйте инструкциям, как обычно.

person huha    schedule 05.10.2016