2017-03-21 2 views
1

Ich habe die Richtlinien auf how to manage virtual machines using C# befolgt und könnte ein Beispielprogramm basierend darauf erstellen.Wie klonen und verwalten Sie eine virtuelle Maschine in Azure mit C# und Azure .Net SDK?

Allerdings habe ich einen Anwendungsfall, in dem wir mehrere virtuelle Maschinen klonen und remote mit einem in C# geschriebenen Konsolenprogramm verwalten möchten. Ich könnte die Wege zu eine VM über Power Shell finden, aber ich konnte nirgendwo finden, wie ich einen Klon erstellen und schließlich die geklonte VM auf Azure verwalten kann.

Kann mir bitte jemand eine Anweisung geben, wie ich .Net SDK verwenden kann, um diesen Anwendungsfall zu erreichen?

Dank

+0

Werfen Sie einen Blick auf Microsoft.WindowsAzure.Management.Berechnen Sie https://msdn.microsoft.com/en-us/library/dn722415.aspx https://www.nuget.org/packages/Microsoft.WindowsAzure.Management.Compute/ – Lanorkin

Antwort

1

können wir tun, mit Microsoft.Azure.Management.Fluent und WindowsAzure.Storage.

Ich erstelle eine Demo für sie und es funktioniert für mich richtig. Das Folgende ist meine Detailschritte.

Wie Sie erwähnten link. Zuerst müssen wir die VM freigeben. Vorher müssen wir die Authentifizierung für die Betriebsressource in Azure anfordern.

1.Get Azure-Objekt mit einer Authentifizierungsdatei, wie Sie eine Authentifizierungsdatei erstellen, finden Sie unter document. Vorher müssen wir eine Azure AD-Anwendung registrieren und die entsprechende Rolle zuweisen, weitere Details finden Sie unter document. Dann können wir die Client-ID, den Schlüssel (geheimen Schlüssel) und den Mandanten von der Azure AD-App abrufen. Das Dateiformat wie folgt

subscription=########-####-####-####-############ 
client=########-####-####-####-############ 
key=XXXXXXXXXXXXXXXX 
tenant=########-####-####-####-############ 
managementURI=https\://management.core.windows.net/ 
baseURL=https\://management.azure.com/ 
authURL=https\://login.windows.net/ 
graphURL=https\://graph.windows.net/ 

das Objekt zu erstellen

var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"path of authentication file"); 

var azure = Azure 

       .Configure() 

       .WithLogLevel(HttpLoggingDelegatingHandler.Level.BASIC) 

       .Authenticate(credentials) 

       .WithDefaultSubscription() 

2.Deallocate die VM mit C# -Code.

azure.VirtualMachines.PowerOff(resourcegroup,vmName); //shutdown the VM 
azure.VirtualMachines.Deallocate(resourcegroup, vmName); //deallocate the VM 

3.Get der VM Disk-Vhd uri Info mit Code

var vm = azure.VirtualMachines.GetByGroup(resourcegroup, vmName); 
string vhdUri= vm.StorageProfile.OsDisk.Vhd.Uri; //result : https://storageaccountname.blob.core.windows.net/vhds/blob.vhd 

4.Von die vhduri dann können wirSpeicherkonto und blobname bekommen.

5.Starten Sie, um den Blob in den Zielcontainer zu kopieren. Weitere Informationen zur Verwendung von Blob finden Sie im Dokument.

 var account = azure.StorageAccounts.GetByGroup(resourcegroup,storageaccount); 

     var key = account.GetKeys()[0]; 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connectionstring"); 
     // Create a CloudFileClient object for credentialed access to File storage. 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     CloudBlobContainer container = blobClient.GetContainerReference("tomvhds"); 
     CloudBlobContainer sourceBlobContainer = blobClient.GetContainerReference("vhds"); 
     container.CreateIfNotExists(); 
     CloudPageBlob destBlob = container.GetPageBlobReference(destinationBlob); 
     CloudPageBlob sourcePageBlob = sourceBlobContainer.GetPageBlobReference(sourceblob); 
     destBlob.StartCopy(sourcePageBlob); 
     copyVhdurl = destBlob.Uri.ToString(); 

6.Create die Scheibe für vm Erstellen

var disk = azure.Disks.Define("diskname") 
       .WithRegion(location) 
       .WithExistingResourceGroup(resourcegroup) 
       .WithWindowsFromVhd(copyvhduri) 
       .Create(); 

7.Create die VM und aus dem Azure-Portal

var windowsVm = azure.VirtualMachines.Define(machinename) 

        .WithRegion(location) //eastasia 

        .WithNewResourceGroup(resourcegroupName) 

        .WithNewPrimaryNetwork("10.0.0.0/28") 

        .WithPrimaryPrivateIpAddressDynamic() 

        .WithNewPrimaryPublicIpAddress("dnslab") 

        .WithSpecializedOsDisk(disk, OperatingSystemTypes.Windows) 

        .WithSize(VirtualMachineSizeTypes.StandardA0) 

        .Create(); 

enter image description here

enter image description here

überprüfen 0

packages.config Datei

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.AppService.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Batch.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Cdn.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Compute.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Dns.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Graph.RBAC.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.KeyVault.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Network.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Redis.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.ResourceManager.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Sql.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.Storage.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Azure.Management.TrafficManager.Fluent" version="1.0.0-beta50" targetFramework="net452" /> 
    <package id="Microsoft.Data.Edm" version="5.8.2" targetFramework="net452" /> 
    <package id="Microsoft.Data.OData" version="5.8.2" targetFramework="net452" /> 
    <package id="Microsoft.Data.Services.Client" version="5.8.2" targetFramework="net452" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime" version="2.3.5" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.5" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.2.10" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" /> 
    <package id="System.ComponentModel.EventBasedAsync" version="4.0.11" targetFramework="net452" /> 
    <package id="System.Dynamic.Runtime" version="4.0.0" targetFramework="net452" /> 
    <package id="System.Linq.Queryable" version="4.0.0" targetFramework="net452" /> 
    <package id="System.Net.Requests" version="4.0.11" targetFramework="net452" /> 
    <package id="System.Spatial" version="5.8.2" targetFramework="net452" /> 
    <package id="WindowsAzure.Storage" version="8.1.1" targetFramework="net452" /> 
</packages> 
+0

wow ..thanks viel, gestern ich könnte all dies über PowerShell tun und ich werde dies heute per Code anhand Ihres Beispiels versuchen. Allerdings war ich anfänglich ein wenig anfällig für fließende api, weil es vielleicht noch nicht vollständig entwickelt ist? Ich benutzte den Code, der in der Verbindung verwendet wurde, und das scheint nicht fließend zu sein. Würden Sie mir jedoch vorschlagen, fließend zu verwenden, um vms in meinem Code zu verwalten? – k2ibegin

+1

Wie du bereits erwähnt hast, handelt es sich um eine Beta-Version SDK. Aber es ist einfach zu verwalten vms wie Poweroff, Start, Neustart und etc. Wenn Sie ein Problem darüber finden, könnten Sie Ihr Feedback dafür geben. Wenn Sie sehr anfällig für die Beta-Version sind, beachten Sie bitte die veröffentlichte Version. –

+0

OK vielen Dank, ich sollte es folgen und Sie wissen lassen! – k2ibegin

Verwandte Themen