Dela via


Använda VM-roller i Windows Azure Pack med Java

 

Gäller för: Windows Azure Pack

Den här guiden visar några grundläggande uppgifter som en klientutvecklare kan utföra med roller för virtuella datorer (VM-roller), inklusive att skapa, uppdatera och skala en vm-rollinstans. Kodexemplen är skrivna i Java och skapades med Eclipse IDE. Eftersom exemplen i den här guiden använder DEN HTTP REST-baserade tjänsten för Service Management-API:et kan du ändra dessa exempel så att de fungerar med andra språk som kan skicka HTTP-åtgärdsbegäranden. En guide till alla URL:er som är tillgängliga för VM-roller finns i URL-fuskbladet för VM-roller [SPFSDK][VMROLE].

Vm-roller kan representera en eller flera virtuella datorer som är dedikerade till en specifik åtgärd, till exempel en webbserver eller webbarbetare. Tjänstleverantörer kan erbjuda klientorganisationer en självbetjäningsupplevelse för etablering av virtuella datorer via ett kuraterat galleri med roller för virtuella datorer. Klientorganisationer kan etablera VM-roller från galleriet med hjälp av klientportalens användargränssnitt eller den HTTP REST-baserade tjänsten. Virtuella datorroller skiljer sig från den traditionella modellen för etablering av virtuella datorer eftersom de tillhandahåller en skalningsåtgärd som gör att du enkelt kan justera antalet och versionen av virtuella datorer. En guide till hur du använder virtuella datorer med WAP och Java med den traditionella etableringsmodellen finns i Virtual Machine Management med Java. De funktioner som erbjuds med VM-roller kan underlätta snabb etablering och avetablering av dina program när du behöver justera antalet och versionen av dina virtuella datorer.

Service Provider Foundation och Windows Azure Pack for Windows Server exponerar en utökningsbar tjänst som gör det möjligt för tjänstleverantörer att skapa portaler för flera innehavare. En klientorganisation är självbetjäningskund för tjänstleverantören. Tjänstleverantören associerar klientorganisationens konto med ett prenumerations-ID och tillhandahåller en offentlig nyckel till ett säkerhetscertifikat som används för att verifiera klientorganisationen. För att kunna köra exemplen i den här guiden måste du ha en prenumeration hos en tjänstleverantör som erbjuder ett vm-rollgalleri, en molntjänst i prenumerationen för att vara värd för vm-rollen och ett virtuellt nätverk i prenumerationen för att placera virtuella datorer. Om din tjänstleverantör har gett dig ett användarnamn och lösenord kan du logga in på klientportalens användargränssnitt och där hitta ditt prenumerations-ID. När du är inloggad på portalen kan du ladda upp ett certifikat som gör det möjligt för värden att verifiera dig som en betrodd användare och du kan skapa ett virtuellt nätverk som du kan använda för att placera virtuella datorer.

När du har kört exemplen i den här guiden bör du kunna utföra följande uppgifter med Java-kod.

  • Skapa en molntjänst som värd för vm-roller

  • Hämta en lista över VM-roller från galleriet

  • Hämta en referens till ett vm-rollgalleriobjekt

  • Skapa en ny vm-rollinstans

  • Skala en VM-roll

  • Starta, stoppa, starta om, stänga av eller ta bort en virtuell dator

  • Uppdatera eller ta bort en VM-roll

Skapa en molntjänst som värd för vm-roller

Du måste ha en molntjänst i din prenumeration som värd för VM-roller. Om du vill visa en lista över alla molntjänster skickar du en HTTP GET-åtgärdsbegäran till följande URL för CloudServices. Observera att när du använder en URL med vm-rollgalleriet eller molntjänsterna måste du också lägga till frågesträngen api-version=2013-03. Frågesträngen börjar alltid med ? efter URL:en.

https://server:port/subscription-id/CloudServices?api-version=2013-03

Följande Java-kodexempel, Get_list, kan returnera alla molntjänster i din prenumeration. Exemplen i den här guiden representerar ditt prenumerations-ID med strängen: 2222aa22-22a2-2a22-2a22-2aaaaa2aaaaaa. I allmänhet kan du ange x-ms-principal-id-huvudet till e-postmeddelandet för den klientorganisation som är associerad med den aktuella prenumerationen.

public class Get_list 
{
public static void main(String[] args) throws Exception 
   {
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices?api-version=2013-03";       
   URL url = new URL(u);                       
   HttpURLConnection c = null;        
   c = (HttpsURLConnection)url.openConnection();
   c.setRequestMethod("GET");
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null){System.out.println(decodedString);}
   in.close();
   }
}

Om värdefältet i HTTP-svaret är tomt innebär det att du inte har några molntjänster i din prenumeration och du måste skapa en innan du etablerar en VM-roll. Du kan skapa en molntjänst genom att skicka en HTTP POST-åtgärdsbegäran till samma CloudServices-URL, men i begärandetexten bör du ange ett namn och en etikett för den nya molntjänsten. För exemplen i den här guiden kan OData som lagts till i brödtexten i en HTTP-begäran sparas i en textfil på datorn med namnet odata.txt. Om du till exempel skickar följande odata.txt kan du skapa en molntjänst med namnet TestingCloudService799.

{
    "Name": "TestingCloudService799",
    "Label": "TestingCloudService799"
}

Alla Java-kodexempel läser odata.txt med hjälp av följande getpayload()-metod.

public class Data 
{
private String s;
public Data() 
   {
   String fileName = ("C:"+File.separator+"test"+File.separator+"odata.txt");
   File dataFile = new File(fileName);
   byte[] content = new byte[0];
   {      
   try {FileInputStream dataInputStream = new FileInputStream(dataFile);
      int bytesAvailable = dataInputStream.available();
      content = new byte[bytesAvailable];
      dataInputStream.read(content);
      dataInputStream.close();}       
   catch (FileNotFoundException fnfe) {System.out.println("Couldn't find a file called " + fileName);}       
   catch (IOException ioe) {System.out.println("Couldn't read from a file called " + fileName);}      
   this.s = new String(content);
   }
   }
   public String getpayload(){return s;}
 }

Java-kodexemplet Create_cs skapar en ny molntjänst med namnet TestingCloudService799. Den läser odata.txt, strömmar den här informationen till en HTTP-brödtext, anger rubrikerna och skickar sedan en POST-åtgärdsbegäran till Cloudservices-slutpunkten.

public class Create_cs 
{
public static void main(String[] args) throws Exception 
   {
   Data s = new Data();
   String payload = s.getpayload();
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices?api-version=2013-03";       
   URL url = new URL(u);                        
   HttpURLConnection c = null;       
   c = (HttpsURLConnection)url.openConnection();
   c.setRequestMethod("POST");
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   c.setDoOutput(true);
   OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
   out.write(payload);
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null) 
      {System.out.println(decodedString);}
   in.close();
   }
}   

Tjänstleverantörer kan erbjuda klientorganisationer ett självbetjäningsgalleri med roller för virtuella datorer. Klientorganisationen kan sedan skapa en VM-roll från ett av objekten i vm-rollgalleriet. Du kan fråga efter alla vm-roller som erbjuds till din prenumeration genom att skicka en HTTP GET-åtgärdsbegäran till följande URL för vm-rollgalleriet. Du kan till exempel använda följande URL och Get_list för att få de VM-roller som erbjuds till din prenumeration.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/Gallery/GalleryItems/$/MicrosoftCompute.VMRoleGalleryItem?api-version=2013-03

Här är ett exempel på HTTP-svaret som innehåller samlingen med vm-rollgalleriobjekt.

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 2148
Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8
Content-Language: en-US
Server: Microsoft-IIS/8.5
X-Content-Type-Options: nosniff
DataServiceVersion: 3.0;
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Wed, 05 Feb 2014 20:11:29 GMT

{"odata.metadata":"https://server:port/SC2012R2/VMM/GalleryService.svc/$metadata#GalleryItems/MicrosoftCompute.VMRoleGalleryItem","value":[{"odata.type":"MicrosoftCompute.VMRoleGalleryItem","Name":"CentOS6LAMP","Publisher":"Microsoft","Version":"1.0.0.0","ContentUrl":"Gallery/GalleryItems(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)/Content","Description":"Deploy a CentOS 6 virtual machine role with Apache, MySQL and PHP installed.","IconUrl":null,"Label":"CentOS6 LAMP Role","PublishDate":"2014-01-21T19:09:11.163","PublisherLabel":"Microsoft","ResourceDefinition@odata.mediaContentType":"application/json","ResourceDefinitionUrl":"Gallery/GalleryItems(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)/MicrosoftCompute.ResourceDefinitionGalleryItem/ResourceDefinition","ViewDefinitionUrl":"Gallery/ViewDefinitions(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)/%24value"}]}

Det här svaret anger att det finns en VM-roll som erbjuds av tjänstleverantören: en virtuell CentOS 6-datorroll med Apache, MySQL och PHP redan installerade. Andra objekt kan visas i galleriet beroende på vilka VM-roller som erbjuds till din prenumeration. Observera strängen i svaret som ger egenskapen ContentUrl för objektet. Du måste använda det här värdet för att få en referens till det specifika objektet.

"ContentUrl":"Gallery/GalleryItems(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)"

När du har valt ett VM-rollobjekt från galleriet hämtar du resursdefinitionen för objektet och avgör vilka resursparametrar du behöver ange. Resursdefinitionen är en JSON-fil som beskriver maskinvaru- och instansieringsbegränsningarna för virtuella datorer. Mer information om resursdefinitionen finns i avsnittet ResourceDefinition [SPFSDK][VMROLE] .

Använd Get_list för att skicka en GET-åtgärdsbegäran till URL:en för det galleriobjekt som du har valt.

https://server:port/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/Gallery/GalleryItems(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)/MicrosoftCompute.ResourceDefinitionGalleryItem/ResourceDefinition?api-version=2013-03

I det här exemplet innehåller det här HTTP-svaret ResourceDefinition-objektet för den virtuella CentOS-rollen.

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 2009
Content-Type: application/json
Content-Language: en-US
Server: Microsoft-IIS/8.5
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Thu, 06 Feb 2014 17:03:10 GMT

{"IntrinsicSettings":{"HardwareProfile":{"VMSize":"[Param.VMRoleVMSize]"},"NetworkProfile":{"NetworkAdapters":[{"IPAddresses":[{"AllocationMethod":"Dynamic","ConfigurationName":"IPV4Configuration","Type":"IPV4"}],"Name":"NIC1","NetworkRef":"[Param.VMRoleNetworkRef]"}]},"OperatingSystemProfile":{"AdminCredential":"[Param.VMRoleAdminCredential]","ComputerNamePattern":"[Param.VMRoleComputerNamePattern]","LinuxOperatingSystemProfile":{"DNSDomainName":"[Param.VMRoleDNSDomainName]","SSHPublicKey":"[Param.VMRoleSSHPublicKey]"},"TimeZone":"[Param.VMRoleTimeZone]","WindowsOperatingSystemProfile":null},"ScaleOutSettings":{"InitialInstanceCount":"1","MaximumInstanceCount":"5","MinimumInstanceCount":"1","UpgradeDomainCount":"1"},"StorageProfile":{"OSVirtualHardDiskImage":"[Param.VMRoleOSVirtualHardDiskImage]"}},"Name":"CentOS6LAMP","Publisher":"Microsoft","ResourceExtensionReferences":[{"Name":"CentOS6LAMP","Publisher":"Microsoft","ReferenceName":"CentOS6LAMP","ResourceExtensionParameterValues":"{\"MySQLRootPassword\":\"[Param.CentOS6LAMPMySQLRootPassword]\"}","Version":"1.0.0.0"}],"ResourceParameters":[{"Description":"Computer size","Name":"VMRoleVMSize","Type":"String"},{"Description":"Operating system disk","Name":"VMRoleOSVirtualHardDiskImage","Type":"String"},{"Description":"Network reference","Name":"VMRoleNetworkRef","Type":"String"},{"Description":"Resource Extension CentOS6LAMP. Parameter MySQLRootPassword. Run once command parameter","Name":"CentOS6LAMPMySQLRootPassword","Type":"SecureString"},{"Description":"Compute name pattern","Name":"VMRoleComputerNamePattern","Type":"String"},{"Description":"Time zone","Name":"VMRoleTimeZone","Type":"String"},{"Description":"Administrator credential","Name":"VMRoleAdminCredential","Type":"Credential"},{"Description":"DNS domain name","Name":"VMRoleDNSDomainName","Type":"String"},{"Description":"SSH public key","Name":"VMRoleSSHPublicKey","Type":"String"}],"SchemaVersion":"1.0","Type":"Microsoft.Compute\/VMRole\/1.0","Version":"1.0.0.0"}

Observera att egenskapen ResourceParameters innehåller parametrar. Även om inte alla VM-roller krävs för att ha parametrar, måste du ange ett värde för var och en av dessa om några parametrar anges i egenskapen ResourceParameters för ResourceDefinition-objektet. Du kan ange parametrarna och deras värden genom att paketera dem i en JSON-kodad sträng med följande format.

{ "parameter1 name" : "parameter1 value", "parameter2 name" : "parameter2 value", ... }

När du har samlat in ParameterValues kan du skapa ett ResourceConfiguration-objekt som innehåller ParameterValues och parametervärdenas version. I den här guiden använder resourceconfiguration-exemplet följande parametervärden.

"ResourceConfiguration": 
{
"ParameterValues": "{\"VMRoleVMSize\" : \"ExtraSmall\",\"VMRoleOSVirtualHardDiskImage\" : \"CentOS Linux 6 (64-bit):1.0.0.0\",\"VMRoleNetworkRef\" : \"VMNetwork1\",\"CentOS6LAMPMySQLRootPassword\" : \"!!pass3abc12\",\"VMRoleComputerNamePattern\" : \"LAMP###\",\"VMRoleTimeZone\" : \"Pacific Standard Time\",\"VMRoleAdminCredential\" : \"root:!!pass3abc12\",\"VMRoleDNSDomainName\" : \"mydns\",\"VMRoleSSHPublicKey\" : \"key123\"}",
"Version": "1.0.0.0"
}

Observera att det virtuella nätverket VMNetwork1 redan måste finnas i klientorganisationens prenumeration. Ett virtuellt nätverk måste anges för att placera virtuella datorer. Du kan skapa ett virtuellt nätverk med hjälp av klientgränssnittsportalen för din prenumeration.

Skapa en ny vm-rollinstans

Skapa ett nytt VirtualMachineRole-objekt genom att kombinera ResourceDefinition-objektet som hämtats från vm-rollgalleriet och ResourceConfiguration-objektet som du skapade i föregående steg. Skicka sedan hela VirtualMachineRole-objektet som brödtext för en HTTP POST-åtgärdsbegäran till URL:en för VMRoles.

https://server:port/subscription-id/CloudServices/cloudservice-name/Resources/MicrosoftCompute/VMRoles?api-version=2013-03

Till exempel kan odata.txt innehålla följande VitualMachineRole-objekt.

{
    "InstanceView": null,
    "Label": "My VM Role Instance",
    "Name": "TestVMRole",
    "ProvisioningState": null,
    "ResourceConfiguration": {
        "ParameterValues": "{\"VMRoleVMSize\" : \"ExtraSmall\",\"VMRoleOSVirtualHardDiskImage\" : \"CentOS Linux 6 (64-bit):1.0.0.0\",\"VMRoleNetworkRef\" : \"VMNetwork1\",\"CentOS6LAMPMySQLRootPassword\" : \"!!pass3abc12\",\"VMRoleComputerNamePattern\" : \"LAMP###\",\"VMRoleTimeZone\" : \"Pacific Standard Time\",\"VMRoleAdminCredential\" : \"root:!!pass3abc12\",\"VMRoleDNSDomainName\" : \"mydns\",\"VMRoleSSHPublicKey\" : \"key123\"}",
        "Version": "1.0.0.0"
    },
    "ResourceDefinition": {
        "IntrinsicSettings": {
            "HardwareProfile": { "VMSize": "[Param.VMRoleVMSize]" },
            "NetworkProfile": {
                "NetworkAdapters": [{
                    "IPAddresses": [{
                        "AllocationMethod": "Dynamic",
                        "ConfigurationName": "IPV4Configuration",
                        "LoadBalancerConfigurations": [],
                        "Type": "IPV4"
                    }],
                    "Name": "NIC1",
                    "NetworkRef": "[Param.VMRoleNetworkRef]"
                }]
            },
            "OperatingSystemProfile": {
                "AdminCredential": "[Param.VMRoleAdminCredential]",
                "ComputerNamePattern": "[Param.VMRoleComputerNamePattern]",
                "LinuxOperatingSystemProfile": {
                    "DNSDomainName": "[Param.VMRoleDNSDomainName]",
                    "SSHPublicKey": "[Param.VMRoleSSHPublicKey]"
                },
                "TimeZone": "[Param.VMRoleTimeZone]",
                "WindowsOperatingSystemProfile": null
            },
            "ScaleOutSettings": {
                "InitialInstanceCount": "1",
                "MaximumInstanceCount": "5",
                "MinimumInstanceCount": "1",
                "UpgradeDomainCount": "1"
            },
            "StorageProfile": {
                "DataVirtualHardDisks": [],
                "OSVirtualHardDiskImage": "[Param.VMRoleOSVirtualHardDiskImage]"
            }
        },
        "Name": "CentOS6LAMP",
        "Publisher": "Microsoft",
        "ResourceExtensionReferences": [{
            "Name": "CentOS6LAMP",
            "Publisher": "Microsoft",
            "ReferenceName": "CentOS6LAMP",
            "ResourceExtensionParameterValues": "{\"MySQLRootPassword\":\"[Param.CentOS6LAMPMySQLRootPassword]\"}",
            "Version": "1.0.0.0"
        }],
        "ResourceParameters": [{
            "Description": "Computer size",
            "Name": "VMRoleVMSize",
            "Type": "String"
        },
            {
                "Description": "Operating system disk",
                "Name": "VMRoleOSVirtualHardDiskImage",
                "Type": "String"
            },
            {
                "Description": "Network reference",
                "Name": "VMRoleNetworkRef",
                "Type": "String"
            },
            {
                "Description": "Resource Extension CentOS6LAMP. Parameter MySQLRootPassword. Run conce command parameter",
                "Name": "CentOS6LAMPMySQLRootPassword",
                "Type": "SecureString"
            },
            {
                "Description": "Compute name pattern",
                "Name": "VMRoleComputerNamePattern",
                "Type": "String"
            },
            {
                "Description": "Time zone",
                "Name": "VMRoleTimeZone",
                "Type": "String"
            },
            {
                "Description": "Administrator credential",
                "Name": "VMRoleAdminCredential",
                "Type": "Credential"
            },
            {
                "Description": "DNS domain name",
                "Name": "VMRoleDNSDomainName",
                "Type": "String"
            },
            {
                "Description": "SSH public key",
                "Name": "VMRoleSSHPublicKey",
                "Type": "String"
            }
        ],
        "SchemaVersion": "1.0",
        "Type": "Microsoft.Compute/VMRole/1.0",
        "Version": "1.0.0.0"
    },
    "Substate": null
}

Du kan använda följande Java-kod, Create_vmr och virtualmachine-exempelobjektet, för att skapa en ny VM-roll med namnet TestVMRole.

public class Create_vmr 
{
public static void main(String[] args) throws Exception 
   {
   Data s = new Data();
   String payload = s.getpayload();
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles?api-version=2013-03";       
   URL url = new URL(u);                        
   HttpURLConnection c = null;       
   c = (HttpsURLConnection)url.openConnection();
   c.setRequestMethod("POST");
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   c.setDoOutput(true);
   OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
   out.write(payload);
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null) {System.out.println(decodedString);}
   in.close();
   }
}  

Eftersom InitialInstanceCount är 1 finns en virtuell TestVMRole-dator med namnet LAMP0001 på VMNetwork1 och startad. Du kan hämta ID:t för den nya virtuella datorn genom att skicka en HTTP GET-åtgärdsbegäran till URL:en för de virtuella datorerna i TestVMRole.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs?api-version=2013-03

Det unika ID:t för den virtuella datorn representeras i den här guiden av strängen 6e66ee6e-6e6e-6666-ee66-e666e66666e.

Skala en VM-roll

Du kan justera hur många virtuella datorer som körs i en vm-rollinstans genom att skicka en HTTP POST-åtgärdsbegäran till URL:en för VM-rollen och skala slutpunkten. Antalet instanser får inte vara mindre än det minsta eller fler än det maximala antalet instanser som du har angett i vitualMachineRole-objektet. Du kan till exempel använda följande URL för att justera skalan för rollen TestVMRole.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/Scale?api-version=2013-03

Brödtexten i POST-åtgärdsbegäran bör ange antalet virtuella datorer som ska instansieras för den virtuella datorrollen som InstanceCount. Om du skickar följande odata.txt ökar antalet virtuella datorer som körs i TestVMRole till två.

{
    "InstanceCount": 2
}

Om du vill hämta en lista över alla virtuella datorer som för närvarande har rollen TestVMRole skickar du en HTTP GET-åtgärdsbegäran till URL:en för de virtuella datorerna.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs?api-version=2013-03

Http-exempelsvaret ser ut så här.

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 496
Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8
Server: Microsoft-IIS/8.5
X-Content-Type-Options: nosniff
request-id: d3350337-10af-0000-897f-39d3af10cf01
DataServiceVersion: 3.0;
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Thu, 06 Feb 2014 21:52:56 GMT

{"odata.metadata":"https://server:8090/SC2012R2/VMM/Microsoft.Management.Odata.svc/$metadata#VM","value":[{"Id":"6e66ee6e-6e6e-6666-ee66-e666e666666e","ComputerName":"LAMP001.mydns","RuntimeState":"Running","ConnectToAddresses":[{"IPAddress":"10.0.0.4","NetworkName":"VMNetwork1","Port":3389}]},{"Id":"77ff7777-7777-7777-ff7f-f7f7f77777f7","ComputerName":"LAMP002","RuntimeState":"Running","ConnectToAddresses":[{"IPAddress":"10.0.0.5","NetworkName":"VMNetwork1","Port":3389}]}]}

HTTP-svaret visar att en andra virtuell dator med rollen TestVMRole med namnet LAMP0002 och representeras av 77ff7777-7777-7777-ff7f-f7f7f7777f7 körs nu.

Observera att om vm-rollen skalas till ett antal instanser som är mindre än det aktuella antalet virtuella datorer tas vissa av de virtuella datorerna bort oavsett om de körs eller inte. Om du vill ta bort en specifik virtuell dator i en VM-roll kan du läsa följande avsnitt Starta, stoppa, starta om, stänga av eller ta bort en virtuell dator.

Starta, stoppa, starta om, stänga av eller ta bort en virtuell dator

Du kan stoppa den virtuella datorn genom att skicka en HTTP POST-åtgärdsbegäran till följande URL med en tom brödtext. Följande Java-kodexempel stoppar till exempel LAMP002, som har ID=77ff7777-7777-7777-ff7f-f7f7f7777f7.

public class Start_vmr 
{
public static void main(String[] args) throws Exception 
   {
   String payload ="";
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs/77ff7777-7777-7777-ff7f-f7f7f77777f7/Stop?api-version=2013-03";       
   URL url = new URL(u);                        
   HttpURLConnection c = null;       
   c = (HttpsURLConnection)url.openConnection();
   c.setRequestMethod("POST");
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   c.setDoOutput(true);
   OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
   out.write(payload);
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null) {System.out.println(decodedString);}
   in.close();
   }
}   

Du kan också använda den här Java-exempelkoden för att göra en HTTP POST-åtgärdsbegäran för att starta om, starta om eller stänga av en virtuell dator. Använd följande URL för att starta den stoppade LAMP0002.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs/77ff7777-7777-7777-ff7f-f7f7f77777f7/Start?api-version=2013-03

Använd följande URL för att starta om lamp0002 som körs.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs/77ff7777-7777-7777-ff7f-f7f7f77777f7/Restart?api-version=2013-03

Använd följande URL för att stänga av lamp00002 som körs.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs/77ff7777-7777-7777-ff7f-f7f7f77777f7/Shutdown?api-version=2013-03

Du kan ta bort en specifik virtuell dator genom att skicka en HTTP DELETE-åtgärdsbegäran till slutpunkten för den virtuella datorn med en tom nyttolast. Du bör stoppa den virtuella datorn innan du tar bort den. Observera att I exemplet används X-HTTP-Method-huvudet för att åsidosätta POST-åtgärden med DELETE. Följande Java-kod, Delete_vm, tar till exempel bort den virtuella datorn som har ID=77ff7777-7777-7777-ff7f-f7f7f7777f7.

public class Delete_vm 
{
public static void main(String[] args) throws Exception 
   {
   String payload ="";
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs/77ff7777-7777-7777-ff7f-f7f7f77777f7?api-version=2013-03";       
   URL url = new URL(u);                       
   HttpURLConnection c = null;      
   c = (HttpsURLConnection)url.openConnection();
   TrustModifier.relaxHostChecking(c); // ignore host checking errors 
   c.setRequestMethod("POST");        
   c.setRequestProperty("X-HTTP-Method", "DELETE"); 
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   c.setDoOutput(true);        
   OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
   out.write(payload);
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null){System.out.println(decodedString);}
   in.close();
   }
}

Observera att detta tar bort den virtuella datorn LAMP0002 specifikt. Om TestVMRole skalas tillbaka från 2 till 1 instanser tas den virtuella datorn LAMP0001 bort, även om LAMP0002 har stoppats tidigare.

Uppdatera eller ta bort en VM-roll

Du kan uppdatera en vm-rollinstans till en ny version medan virtuella datorer med tidigare versioner fortsätter att köras. Om du lägger till nya virtuella datorer genom att skala ut vm-rollen får de nya virtuella datorerna den uppdaterade versionen av VM-rollen. Virtuella datorer som baseras på båda versionerna kan köras samtidigt. Du kan behöva stoppa eller ta bort de specifika virtuella datorerna baserat på den tidigare versionen.

Du kan uppdatera en VM-roll genom att skicka en HTTP MERGE-åtgärdsbegäran till URL:en för VM-rollen. Brödtexten innehåller uppdaterad information för sammanslagning till VirtualMachineRole.

https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole?api-version=2013-03

Följande odata.txt till exempel uppdaterar TestVMRole-rollen från version 1.0.0.0 till version 1.0.0.1. Medan version 1.0.0.0 placerade virtuella datorer på VMNetwork1 placerar exempelversion 1.0.0.1 virtuella datorer på VMNetwork2.

{
    "ResourceConfiguration": {
        "ParameterValues": "{\"VMRoleVMSize\" : \"ExtraSmall\",\"VMRoleOSVirtualHardDiskImage\" : \"CentOS Linux 6 (64-bit):1.0.0.0\",\"VMRoleNetworkRef\" : \"VMNetwork2\",\"CentOS6LAMPMySQLRootPassword\" : \"!!pass3abc12\",\"VMRoleComputerNamePattern\" : \"LAMP###\",\"VMRoleTimeZone\" : \"Pacific Standard Time\",\"VMRoleAdminCredential\" : \"root:!!pass3abc12\",\"VMRoleDNSDomainName\" : \"mydns\",\"VMRoleSSHPublicKey\" : \"key123\"}",
        "Version": "1.0.0.1"
    }
}  

Följande Java-kodexempel kan uppdatera TestVMRole-versionen. Observera att exemplet använder X-HTTP-method-huvudet för att åsidosätta POST-åtgärden med MERGE.

public class Update_vmr 
{
public static void main(String[] args) throws Exception 
   {
   Data s = new Data();
   String payload = s.getpayload();
   String u = "https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole?api-version=2013-03";       
   URL url = new URL(u);                        
   HttpURLConnection c = null;       
   c = (HttpsURLConnection)url.openConnection();
   c.setRequestMethod("POST");
   c.setRequestProperty("X-HTTP-Method", "MERGE");
   c.setRequestProperty("Content-Type", "text/plain; charset=\"utf8\"");
   c.setRequestProperty("DataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("MaxDataServiceVersion", "3.0;NetFx");
   c.setRequestProperty("Accept", "application/json;odata=minimalmetadata");
   c.setRequestProperty("Accept-Charset", "UTF-8");
   c.setRequestProperty("DataServiceUrlConventions", "KeyAsSegment");
   c.setRequestProperty("User-Agent", "Microsoft ADO.NET Data Services");
   c.setRequestProperty("x-ms-principal-id", "user@contoso.com");      
   c.setRequestProperty("Content-Type","application/json;odata=minimalmetadata");
   c.setRequestProperty(“Host”, “user@contoso.com”);
   c.setRequestProperty("Expect", "100-continue");
   c.setDoOutput(true);
   OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
   out.write(payload);
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
   String decodedString;
   while ((decodedString = in.readLine()) != null) {System.out.println(decodedString);}
   in.close();
   }
}  

När du har kört den här koden är dessa version 1.0.0.1 om några nya virtuella TestVMRole-datorer skapas. Befintliga virtuella datorer i version 1.0.0.0 fortsätter att köras. Du kan till exempel öka skalan för TestVMRole från 1 till 2. Den nya virtuella datorn använder den nya versionen och körs på VMNetwork2. Den virtuella datorn som körs på VMNetwork1 fortsätter att köras på VMNetwork1. Du kan minska antalet instanser eller ta bort den äldre virtuella datorn för att uppdatera alla instanser av den tidigare vm-rollversionen.

Om du vill ta bort en VM-roll och alla virtuella datorer i rollen stoppar du de virtuella datorerna och skickar en HTTP DELETE-åtgärdsbegäran till URL:en för VM-rollen med en tom brödtext. Använd rubriken X-HTTP-Method för att åsidosätta POST-åtgärden med DELETE.

Se även

Hantering av virtuella datorer med Java
KLIENTTJÄNST för VM-roller [SPFSDK][VMROLE]
JSON-referens för VM-roll [SPFSDK][VMROLE]