2017-02-18 18 views
0

У меня есть приложение, которое развертывает VM с учетной записью и дисками хранения, я хочу преобразовать ее в использование управляемых дисков - так как это будущее Azure-хранилища. Я смотрю API REST - и мне не хватает двух вещей: 1. Как я могу создать форму моментального снимка существующего управляемого диска, существует API для создания моментального снимка, но он пуст или из старого неуправляемого 2. Может ли я выбрать лун, на котором создан диск?Azure - управляемые диски, как создать моментальный снимок

ответ

2
  1. как я могу создать форму снимки существующей управляемый диск, есть API для создания снимки, но он пуст или из старых неуправляемого

Согласно вашему описание, я создал тестовую демонстрацию для создания моментального снимка существующего управляемого диска (диска ОС), он работает хорошо. Я создаю виртуальную машину Windows и использую управляемый диск в качестве диска ОС, затем создаю другой управляемый диск и добавлю его в виртуальную машину.

В результате, как показано ниже: enter image description here Если вы хотите создать снимок существующего управляемого диска (имеют данные), то я предлагаю вам могут послать запрос ниже ссылки.

Url: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/snapshots/{snapshotName}?api-version={api-version} 

Method: PUT 

Parameter: 
subscriptionId The identifier of your subscription where the snapshot is being created. 
resourceGroup The name of the resource group that will contain the snapshot. 
snapshotName The name of the snapshot that is being created. The name can’t be changed after the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9 and _. The max name length is 80 characters. 
api-version The version of the API to use. The current version is 2016-04-30-preview. 

Request content: 
{ 
    "properties": { 
    "creationData": { 
     "createOption": "Copy", 
     "sourceUri": "/subscriptions/{subscriptionId}/resourceGroups/{YourResourceGroup}/providers/Microsoft.Compute/disks/{YourManagedDiskName}" 
    } 
    }, 
    "location": "eastasia" 
} 

Более подробную информацию, Вы можете обратиться следовать C# коды:

json.txt:

{ 
    "properties": { 
    "creationData": { 
     "createOption": "Copy", 
     "sourceUri": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/BrandoSecondTest/providers/Microsoft.Compute/disks/BrandoTestVM" 
    } 
    }, 
    "location": "eastasia" 
} 

Код:

static void Main(string[] args) 
     { 
      string body = File.ReadAllText(@"D:\json.txt"); 
      // Display the file contents to the console. Variable text is a string. 
      string tenantId = "xxxxxxxxxxxxxxxxxxxxxxxx"; 
      string clientId = "xxxxxxxxxxxxxxxxxxxxxxxx"; 
      string clientSecret = "xxxxxxxxxxxxxxxxxxxx"; 
      string authContextURL = "https://login.windows.net/" + tenantId; 
      var authenticationContext = new AuthenticationContext(authContextURL); 
      var credential = new ClientCredential(clientId, clientSecret); 
      var result = authenticationContext.AcquireTokenAsync(resource: "https://management.azure.com/", clientCredential: credential).Result; 
      if (result == null) 
      { 
       throw new InvalidOperationException("Failed to obtain the JWT token"); 
      } 
      string token = result.AccessToken; 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/xxxxxxxxxxxxxxxx/providers/Microsoft.Compute/snapshots/BrandoTestVM_snapshot2?api-version=2016-04-30-preview"); 
      request.Method = "PUT"; 
      request.Headers["Authorization"] = "Bearer " + token; 
      request.ContentType = "application/json"; 

      try 
      { 
       using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
       { 
        streamWriter.Write(body); 
        streamWriter.Flush(); 
        streamWriter.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      //Get the response 
      var httpResponse = (HttpWebResponse)request.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       Console.WriteLine(streamReader.ReadToEnd()); 
      } 

      Console.ReadLine(); 
     } 

Результат: enter image description here

  1. Могу ли я выбрать лун, на котором создан диск?

ли вы имеете в виду вы хотите использовать azuredeploy для выбора LUN диска?

Если это ваше мнение, я предлагаю вам обратиться к следующему примеру json, чтобы узнать, как создать развёрнутый контент VM и выбрать его LUN.

Более подробную информацию, Вы можете обратиться к ниже deploymentTemplate Json (частично):

"diskArray": [ 
    { 
    "name": "datadisk1", 
    "lun": 0, 
    "vhd": { 
    "uri": "[concat('http://', variables('storageAccountName'),'.blob.core.windows.net/vhds/', 'datadisk1.vhd')]" 
    }, 
    "createOption": "Empty", 
    "caching": "[variables('diskCaching')]", 
    "diskSizeGB": "[variables('sizeOfDataDisksInGB')]" 
    }, 
    ] 

Более подробную информацию, Вы можете обратиться следовать ссылке: 201-vm-dynamic-data-disks-selection/azuredeploy.json