Sdílet prostřednictvím


Použití rolí virtuálních počítačů v Windows Azure Packu s Javou

 

Platí pro: Windows Azure Pack

Tato příručka ukazuje některé základní úlohy, které může vývojář tenanta provádět s rolemi virtuálních počítačů (rolemi virtuálních počítačů), včetně vytváření, aktualizace a škálování instance role virtuálního počítače. Příklady kódu jsou napsané v Javě a byly vytvořeny pomocí integrovaného vývojového prostředí Eclipse. Vzhledem k tomu, že příklady v této příručce používají službu HTTP REST rozhraní API pro správu služeb, můžete tyto příklady upravit tak, aby fungovaly s jakýmkoli jiným jazykem, který dokáže odesílat požadavky na operace HTTP. Průvodce všemi adresami URL, které jsou dostupné pro role virtuálních počítačů, najdete v taháku URL pro role virtuálních počítačů [SPFSDK][VMROLE].

Role virtuálních počítačů můžou představovat jeden nebo více virtuálních počítačů vyhrazených pro konkrétní operaci, jako je webový server nebo webový pracovní proces. Poskytovatelé služeb můžou klientům nabídnout samoobslužné prostředí pro zřizování virtuálních počítačů prostřednictvím kurátorované galerie rolí virtuálních počítačů. Tenanti můžou z galerie zřizovat role virtuálních počítačů pomocí uživatelského rozhraní portálu tenanta nebo služby založené na rozhraní HTTP REST. Role virtuálních počítačů se liší od tradičního modelu zřizování virtuálních počítačů, protože poskytují operaci škálování, která umožňuje snadno upravit počet a verzi virtuálních počítačů. Průvodce používáním virtuálních počítačů s WAP a Javou s tradičním modelem zřizování najdete v tématu Správa virtuálních počítačů pomocí Javy. Možnosti nabízené s rolemi virtuálních počítačů vám můžou pomoct rychle zřizovat a zřizovat aplikace, když potřebujete upravit počet a verzi virtuálních počítačů.

Služba Service Provider Foundation a Windows Azure Pack pro Windows Server zveřejňuje rozšiřitelnou službu, která poskytovatelům služeb umožňuje vytvářet portály s více tenanty. Tenant je samoobslužný zákazník poskytovatele služeb. Poskytovatel služeb přidruží účet tenanta k ID předplatného a poskytne veřejný klíč certifikátu zabezpečení použitému k ověření tenanta. Předpoklad pro spuštění příkladů v této příručce budete muset mít předplatné s poskytovatelem služeb, který nabízí galerii rolí virtuálních počítačů, cloudovou službu v předplatném pro hostování role virtuálního počítače a virtuální síť v předplatném pro umístění virtuálních počítačů. Pokud vám poskytovatel služeb udělil uživatelské jméno a heslo, můžete se přihlásit k uživatelskému rozhraní portálu tenanta a najít ID předplatného. Když jste přihlášeni k portálu, můžete nahrát certifikát, který hostiteli umožní ověřit vás jako důvěryhodný uživatel a můžete vytvořit virtuální síť, kterou můžete použít k umístění virtuálních počítačů.

Po spuštění ukázek v této příručce byste měli být schopni provádět následující úlohy s kódem Java.

  • Vytvoření cloudové služby pro hostování rolí virtuálních počítačů

  • Získání seznamu rolí virtuálních počítačů z galerie

  • Získání odkazu na položku galerie rolí virtuálního počítače

  • Vytvoření nové instance role virtuálního počítače

  • Škálování role virtuálního počítače

  • Spuštění, zastavení, restartování, vypnutí nebo odstranění virtuálního počítače

  • Aktualizace nebo odstranění role virtuálního počítače

Vytvoření cloudové služby pro hostování rolí virtuálních počítačů

Abyste mohli hostovat role virtuálních počítačů, musíte mít ve svém předplatném cloudovou službu. Pokud chcete zobrazit seznam všech cloudových služeb, odešlete požadavek operace HTTP GET na následující adresu URL pro CloudServices. Mějte na paměti, že kdykoli použijete adresu URL s galerií rolí virtuálního počítače nebo cloudovými službami, musíte také připojit řetězec dotazu api-version=2013-03. Řetězec dotazu vždy začíná řetězcem ? znak za adresou URL.

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

Následující příklad kódu Java, Get_list, může vrátit všechny cloudové služby ve vašem předplatném. Příklady v této příručce představují id vašeho předplatného řetězcem: 2222aaa22-22a2-2a22-2a22-2aaaaa. Obecně platí, že hlavičku x-ms-principal-id můžete nastavit na e-mail tenanta přidruženého k aktuálnímu předplatnému.

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();
   }
}

Pokud je pole hodnoty v odpovědi HTTP prázdné, znamená to, že ve svém předplatném nemáte žádné cloudové služby a před zřízením role virtuálního počítače ho budete muset vytvořit. Cloudovou službu můžete vytvořit odesláním požadavku operace HTTP POST na stejnou adresu URL CloudServices, ale v textu požadavku byste měli zadat název a popisek nové cloudové služby. V příkladech v této příručce je možné data OData přidaná do textu požadavku HTTP uložit do textového souboru na vašem počítači s názvem odata.txt. Odesláním následujícího odata.txt můžete například vytvořit cloudovou službu s názvem TestingCloudService799.

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

Všechny příklady kódu v Javě čtou odata.txt pomocí následující metody getpayload().

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;}
 }

Příklad kódu Java, Create_cs, vytvoří novou cloudovou službu s názvem TestingCloudService799. Načte odata.txt, streamuje tyto informace do textu PROTOKOLU HTTP, nastaví hlavičky a pak odešle požadavek operace POST do koncového bodu Cloudservices.

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();
   }
}   

Poskytovatelé služeb můžou klientům nabídnout samoobslužnou galerii rolí virtuálních počítačů. Tenant pak může vytvořit roli virtuálního počítače z jedné z položek galerie rolí virtuálního počítače. Můžete se dotazovat na všechny role virtuálních počítačů nabízených vašemu předplatnému odesláním požadavku operace HTTP GET na následující adresu URL galerie rolí virtuálního počítače. Můžete například použít následující adresu URL a Get_list k získání rolí virtuálních počítačů nabízených vašemu předplatnému.

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

Tady je příklad odpovědi HTTP obsahující kolekci položek galerie rolí virtuálního počítače.

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"}]}

Tato odpověď označuje, že poskytovatel služeb nabízí jednu roli virtuálního počítače: roli virtuálního počítače CentOS 6 s již nainstalovaným Apachem, MySQL a PHP. V galerii se můžou zobrazovat další položky v závislosti na tom, jaké role virtuálních počítačů se nabízejí vašemu předplatnému. Všimněte si řetězce v odpovědi, která dává ContentUrl vlastnost pro položku. Tuto hodnotu budete muset použít k získání odkazu na konkrétní položku.

"ContentUrl":"Galerie/GalerieItems(Název%3d%27CentOS6LAMP%27;Verze%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)"

Po výběru položky role virtuálního počítače z galerie získejte definici prostředku pro danou položku a určete, jaké parametry prostředku budete muset zadat. Definice prostředku je soubor JSON, který popisuje omezení hardwaru a instance virtuálních počítačů. Další informace o definici prostředku najdete v části ResourceDefinition [SPFSDK][VMROLE].

Pomocí Get_list odešlete požadavek operace GET na adresu URL položky galerie, kterou jste vybrali.

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

V tomto příkladu obsahuje tato odpověď HTTP objekt ResourceDefinition pro roli virtuálního počítače CentOS.

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"}

Všimněte si, že vlastnost ResourceParameters obsahuje parametry. I když není nutné, aby každá role virtuálního počítače měla parametry, pokud jsou některé parametry uvedené ve vlastnosti ResourceParameters objektu ResourceDefinition, je nutné zadat hodnotu pro každý z nich. Parametry a jejich hodnoty můžete zadat tak, že je zabalíte do řetězce s kódováním JSON pomocí následujícího formátu.

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

Po shromáždění ParametrValues můžete vytvořit objekt ResourceConfiguration obsahující parametrValues a verzi hodnot parametrů. V této příručce používá ukázkový objekt ResourceConfiguration následující hodnoty parametrů.

"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"
}

Všimněte si, že virtuální síť s názvem VMNetwork1 už musí existovat v předplatném tenanta. Aby bylo možné umístit virtuální počítače, musí být zadána virtuální síť. Virtuální síť můžete vytvořit pomocí portálu uživatelského rozhraní tenanta vašeho předplatného.

Vytvoření nové instance role virtuálního počítače

Vytvořte nový objekt VirtualMachineRole kombinací objektu ResourceDefinition načteného z galerie rolí virtuálního počítače a objektu ResourceConfiguration, který jste vytvořili v předchozím kroku. Pak odešlete celý objekt VirtualMachineRole jako tělo požadavku operace HTTP POST na adresu URL pro VMRoles.

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

Například odata.txt může obsahovat následující objekt VitualMachineRole.

{
    "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
}

Pomocí následujícího kódu Java, Create_vmr a ukázkového objektu VirtualMachine můžete vytvořit novou roli virtuálního počítače s názvem 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();
   }
}  

Vzhledem k tomu, že InitialInstanceCount je 1, jeden virtuální počítač TestVMRole s názvem LAMP0001 se umístí na virtuální počítač VMNetwork1 a spustí se. ID tohoto nového virtuálního počítače můžete získat odesláním požadavku operace HTTP GET na adresu URL pro virtuální počítače TestVMRole.

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

Jedinečné ID virtuálního počítače je znázorněno v této příručce řetězcem 6e66ee6e-6e6e-6666-ee66-e666e66e.

Škálování role virtuálního počítače

Počet virtuálních počítačů spuštěných v instanci role virtuálního počítače můžete upravit odesláním požadavku operace HTTP POST na adresu URL role virtuálního počítače a koncového bodu škálování. Počet instancí nesmí být menší než minimum nebo více než maximální počet instancí, které jste zadali v objektu VitualMachineRole. Například pomocí následující adresy URL upravíte měřítko role TestVMRole.

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

Text požadavku na operaci POST by měl určit počet virtuálních počítačů, které se mají vytvořit instance pro roli virtuálního počítače jako InstanceCount. Odesláním následujícího odata.txt se zvýší počet virtuálních počítačů spuštěných v nástroji TestVMRole na dvě.

{
    "InstanceCount": 2
}

Pokud chcete získat seznam všech virtuálních počítačů aktuálně v roli TestVMRole, odešlete požadavek operace HTTP GET na adresu URL pro virtuální počítače.

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

Příklad odpovědi HTTP vypadá následovně.

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}]}]}

Odpověď HTTP ukazuje, že druhý virtuální počítač role TestVMRole s názvem LAMP0002 a reprezentovaný 77ff7777-7777-7777-ff7f-f7f7777f7 je nyní spuštěn.

Všimněte si, že pokud se role virtuálního počítače škáluje na počet instancí, který je menší než aktuální počet virtuálních počítačů, některé virtuální počítače se odstraní bez ohledu na to, jestli jsou spuštěné. Pokud chcete odstranit konkrétní virtuální počítač v roli virtuálního počítače, přečtěte si následující část Spuštění, zastavení, restartování, vypnutí nebo odstranění virtuálního počítače.

Spuštění, zastavení, restartování, vypnutí nebo odstranění virtuálního počítače

Virtuální počítač můžete zastavit odesláním požadavku operace HTTP POST na následující adresu URL s prázdným textem. Například následující příklad kódu Java zastaví LAMP002, který má ID=77ff77777-7777-ff777-f7f-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();
   }
}   

Pomocí tohoto ukázkového kódu Java můžete také vytvořit požadavek na operaci HTTP POST pro spuštění, restartování nebo vypnutí virtuálního počítače. Pomocí následující adresy URL spusťte zastavenou funkci 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

Pomocí následující adresy URL restartujte spuštěnou lampu LAMP0002.

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

Pomocí následující adresy URL vypněte spuštěnou LAMP0002.

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

Konkrétní virtuální počítač můžete odstranit odesláním požadavku operace HTTP DELETE do koncového bodu virtuálního počítače s prázdnou datovou částí. Před odstraněním byste měli virtuální počítač zastavit. Všimněte si, že příklad používá hlavičku X-HTTP-Method k přepsání operace POST s DELETE. Například následující kód Java, Delete_vm, odstraní virtuální počítač s ID=77ff77777-7777-7777-ff7f-f7f7f77777f7.

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();
   }
}

Všimněte si, že tím se odstraní konkrétně virtuální počítač LAMP0002. Pokud se testVMRole škáluje zpět z 2 na 1 instance, virtuální počítač LAMP0001 se odstraní, i když byl lamp0002 dříve zastavený.

Aktualizace nebo odstranění role virtuálního počítače

Instanci role virtuálního počítače můžete aktualizovat na novou verzi, zatímco virtuální počítače předchozích verzí se budou dál spouštět. Pokud přidáte nové virtuální počítače horizontálním navýšením kapacity role virtuálního počítače, nové virtuální počítače získají aktualizovanou verzi role virtuálního počítače. Virtuální počítače založené na obou verzích se můžou spouštět současně. Možná budete muset tyto konkrétní virtuální počítače zastavit nebo odstranit na základě starší verze.

Roli virtuálního počítače můžete aktualizovat odesláním požadavku operace HTTP MERGE na adresu URL role virtuálního počítače. Tělo obsahuje aktualizované informace, které se mají sloučit do virtualMachineRole.

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

Například následující odata.txt aktualizuje roli Role TestVMRole z verze 1.0.0.0 na verzi 1.0.0.0.1. Zatímco verze 1.0.0.0 umístila virtuální počítače na virtuální počítač VMNetwork1, příklad verze 1.0.0.1 umístí virtuální počítače na 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"
    }
}  

Následující příklad kódu Java může aktualizovat verzi TestVMRole. Všimněte si, že příklad používá hlavičku X-HTTP-Method k přepsání operace POST s 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();
   }
}  

Po spuštění tohoto kódu budou vytvořeny nové virtuální počítače TestVMRole verze 1.0.0.1. Stávající verze 1.0.0.0 virtuální počítače se budou dál spouštět. Zvyšte například měřítko testVMRole z 1 na 2. Nový virtuální počítač používá novou verzi a běží na VMNetwork2. Virtuální počítač spuštěný na virtuálním počítači VMNetwork1 nadále běží na VMNetwork1. Můžete snížit počet instancí nebo odstranit starší virtuální počítač, abyste aktualizovali všechny instance předchozí verze role virtuálního počítače.

Pokud chcete odstranit roli virtuálního počítače a všechny virtuální počítače v této roli, zastavte virtuální počítače a odešlete požadavek operace HTTP DELETE na adresu URL role virtuálního počítače s prázdným textem. K přepsání operace POST pomocí hlavičky X-HTTP-Method použijte příkaz DELETE.

Viz také

Správa virtuálních počítačů pomocí Javy
Služba tenanta rolí virtuálního počítače [SPFSDK][VMROLE]
Referenční dokumentace JSON role virtuálního počítače [SPFSDK][VMROLE]