Partilhar via


Use papéis VM em Windows Azure Pack com Java

 

Aplica-se a: Windows Azure Pack

Este guia demonstra algumas tarefas básicas que um inquilino desenvolvedor pode fazer com funções de máquina virtual (funções VM), incluindo criar, atualizar e escalar uma instância de função VM. Os exemplos de código são escritos em Java e foram criados usando o Eclipse IDE. Uma vez que os exemplos neste guia utilizam o serviço HTTP REST da API de Gestão de Serviços, pode modificar estes exemplos para trabalhar com qualquer outro idioma capaz de enviar pedidos de operação HTTP. Para obter um guia de todos os URLs que estão disponíveis para funções VM, consulte a Url Cheat Sheet for VM Roles [SPFSDK][VMROLE].

As funções VM podem representar uma ou mais máquinas virtuais dedicadas a uma operação específica, como um servidor web ou um trabalhador web. Os prestadores de serviços podem oferecer aos inquilinos uma experiência de self-service para o fornecimento de máquinas virtuais através de uma galeria com curadoria de funções de máquinas virtuais. Os inquilinos podem providenciar funções VM da galeria utilizando o portal de inquilinos UI ou o serviço baseado em REST HTTP. As funções VM diferem da modelo tradicional de atear máquinas virtuais porque fornecem uma operação de escala que permite ajustar facilmente o número e a versão das máquinas virtuais. Para um guia para utilizar máquinas virtuais com WAP e Java com o modelo tradicional, consulte a Gestão virtual de máquinas com a Java. As capacidades oferecidas com funções VM podem ajudar no fornecimento rápido e desavisionamento das suas aplicações quando precisa de ajustar o número e a versão das suas máquinas virtuais.

A Service Provider Foundation e Windows Azure Pack for Windows Server expõem um serviço extensível que permite aos prestadores de serviços construir portais multi-inquilinos. Um inquilino é um cliente de autosserviço do prestador de serviços. O prestador de serviços associa a conta do arrendatário a um id de subscrição, e fornece uma chave pública para um certificado de segurança usado para verificar o inquilino. Pré-requisito para executar os exemplos neste guia, você precisará ter uma subscrição com um prestador de serviços que ofereça uma galeria de funções VM, um serviço de nuvem na subscrição para hospedar o papel VM, e uma rede virtual na subscrição para colocar máquinas virtuais. Se o seu fornecedor de serviços lhe tiver dado um nome de utilizador e senha, pode iniciar sessão no portal do arrendatário UI e aí encontra o seu id de subscrição. Enquanto inicia sessão no portal, pode fazer o upload de um certificado que permite ao anfitrião verificar o seu uso como um utilizador de confiança e pode criar uma rede virtual que pode utilizar para colocar máquinas virtuais.

Depois de executar as amostras neste guia, deverá ser capaz de fazer as seguintes tarefas com o código Java.

  • Criar um serviço de nuvem para hospedar funções VM

  • Obtenha uma lista de Papéis VM da galeria

  • Obtenha uma referência a um item de galeria de papel VM

  • Criar uma nova instância de função VM

  • Escalar um papel VM

  • Iniciar, parar, reiniciar, desligar ou apagar uma máquina virtual

  • Atualizar ou eliminar uma função VM

Criar um serviço de nuvem para hospedar funções VM

Você deve ter um serviço de nuvem na sua subscrição para hospedar funções VM. Para listar todos os serviços na nuvem, envie um pedido de operação HTTP GET para o seguinte URL para CloudServices. Note que sempre que utilizar um URL com a galeria de funções VM ou serviços em nuvem, também deve anexar a cadeia de consultas api-version=2013-03. A cadeia de consulta começa sempre com o? personagem após a URL.

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

O seguinte exemplo de código Java, Get_list, pode devolver todos os serviços em nuvem na sua subscrição. Os exemplos deste guia representarão o seu id de subscrição pela cadeia: 2222aa22-22a2-2a22-2a22-2aaa Em geral, pode definir o cabeçalho x-ms-principal-id para o e-mail do inquilino associado à subscrição atual.

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

Se o campo de valor na resposta HTTP estiver vazio, isto significa que não tem serviços na nuvem na sua subscrição e terá de criar um antes de apresentando uma função VM. Pode criar um serviço de cloud enviando um pedido de operação HTTP POST para o mesmo URL CloudServices, mas no organismo de pedidos deve especificar um Nome e Etiqueta para o novo serviço na nuvem. Para os exemplos deste guia, o OData adicionado ao corpo de um pedido HTTP pode ser guardado num ficheiro de texto no seu computador denominado odata.txt. Por exemplo, o envio do seguinte odata.txt pode ser usado para criar um serviço de cloud chamado TestingCloudService799.

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

Todos os exemplos de código Java odata.txt utilizando o seguinte método 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;}
 }

O exemplo de código Java, Create_cs, cria um novo serviço de cloud chamado TestingCloudService799. Lê odata.txt, transmite esta informação para um corpo HTTP, define os cabeçalhos e, em seguida, envia um pedido de operação POST para o ponto final dos 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();
   }
}   

Os prestadores de serviços podem oferecer aos inquilinos uma galeria de self-service de funções de máquinas virtuais. O inquilino pode então criar um papel VM a partir de um dos itens da galeria VM Role. Pode consultar todas as funções VM oferecidas à sua subscrição enviando um pedido de operação HTTP GET para o seguinte URL para a galeria de funções VM. Por exemplo, pode utilizar o seguinte URL e Get_list para obter as funções VM oferecidas à sua subscrição.

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

Aqui está um exemplo da resposta HTTP contendo a coleção de artigos de galeria de papel VM.

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

Esta resposta indica que existe uma função VM oferecida pelo prestador de serviços: uma função de máquina virtual CentOS 6 com Apache, MySQL e PHP já instalada. Outros itens podem aparecer na galeria dependendo das funções VM oferecidas à sua subscrição. Note a cadeia na resposta que dá a propriedade ContentUrl para o item. Terá de utilizar este valor para obter uma referência ao item específico.

"ContentUrl":"Galeria/GalleryItems (Nome%3d%27CentOS6LAMP%27,Versão%3d%271.0.0.0.0%27.Publisher%3d%27Microsoft%27)"

Depois de selecionar um item VM Role na galeria, obtenha a definição de recurso para esse item e determine quais os parâmetros de recursos que precisará fornecer. A definição de recurso é um ficheiro JSON que descreve as restrições de hardware e instantiação da máquina virtual. Para obter mais informações sobre a definição de recursos, consulte a secção ResourceDefinition [SPFSDK][VMROLE ].

Utilize Get_list para enviar um pedido de operação GET ao URL para o artigo de galeria que selecionou.

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

Para este exemplo, esta resposta HTTP inclui o objeto ResourceDefinition para a função CentOS VM.

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

Note que a propriedade ResourceParameters lista parâmetros. Embora nem todas as funções VM sejam necessárias para ter parâmetros, se quaisquer parâmetros estiverem listados na propriedade dos ResourceParameters do objeto ResourceDefinition, deve fornecer um valor para cada um destes. Pode fornecer os parâmetros e os seus valores embalando-os numa cadeia codificada por JSON utilizando o seguinte formato.

{ "nome de parâmetro1" : "valor de parâmetro1", "nome de parâmetro2" : "parâmetro2 valor", ... } }

Depois de ter recolhido os Parâmetros Valores, pode construir um objeto de Configuração de Recursos contendo os Parâmetros Valores e a versão dos valores dos parâmetros. Neste guia, o exemplo Do objeto DeConfiguration de Recursos utiliza os seguintes valores de parâmetro.

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

Note que a rede virtual chamada VMNetwork1 já deve existir na subscrição do arrendatário. Uma rede virtual deve ser especificada para colocar máquinas virtuais. Pode criar uma rede virtual utilizando o portal UI do inquilino da sua subscrição.

Criar uma nova instância de função VM

Construa um novo objeto VirtualMachineRole combinando o objeto ResourceDefinition recuperado da galeria de funções VM e o objeto de configuração de recursos que construiu no passo anterior. Em seguida, envie todo o objeto VirtualMachineRole como o corpo de um pedido de operação HTTP POST para o URL para VMRoles.

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

Por exemplo, o odata.txt pode conter o seguinte objeto 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
}

Pode utilizar o seguinte código Java, Create_vmr e o exemplo VirtualMachine, para criar uma nova função VM chamada 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();
   }
}  

Como o InitialInstanceCount é 1, uma máquina virtual TestVMRole, chamada LAMP0001, está no VMNetwork1 e iniciada. Pode obter o ID para esta nova máquina virtual enviando um pedido de operação HTTP GET para o URL para os VMs do TestVMRole.

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

O ID único para o vm é representado neste guia pela cadeia 6e66ee6e-6e6e-6666-ee66-e66666666e.

Escalar um papel VM

Pode ajustar quantas máquinas virtuais estão a funcionar numa instância VM Role enviando um pedido de operação HTTP POST para o URL para a função VM e o ponto final de escala. O número de ocorrências não pode ser inferior ao mínimo, ou superior ao número máximo de ocorrências especificadas no objeto VitualMachineRole. Por exemplo, utiliza o seguinte URL para ajustar a escala da função TestVMRole.

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

O corpo do pedido de operação POST deve especificar o número de máquinas virtuais a serem instantâneas para a função VM como InstanceCount. Enviar o seguinte odata.txt aumenta para dois o número de máquinas virtuais em funcionamento no TestVMRole.

{
    "InstanceCount": 2
}

Para obter uma lista de todas as máquinas virtuais atualmente na função TestVMRole, envie um pedido de operação HTTP GET para o URL para os VMs.

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

O exemplo http resposta parece o seguinte.

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

A resposta HTTP mostra que uma segunda máquina virtual da função TestVMRole chamada LAMP0002 e representada por 77ff77777-7777-7777-ff7f-f7f7f7777777f7f7 está agora em funcionamento.

Note que se a função VM for dimensionada para uma contagem de instâncias inferior ao número atual de máquinas virtuais, alguns dos VMs são eliminados quer estejam ou não a funcionar. Se pretender eliminar uma máquina virtual específica numa função VM, consulte a seguinte secção Iniciar, parar, reiniciar, desligar ou eliminar uma máquina virtual.

Iniciar, parar, reiniciar, desligar ou apagar uma máquina virtual

Pode parar a máquina virtual enviando um pedido de operação HTTP POST para o seguinte URL com um corpo vazio. Por exemplo, o seguinte exemplo de código Java para LAMP002, que tem ID=77ff77777-7777-7777-7777-ff7f7f7f777777f7.

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

Também pode utilizar este código Java de exemplo para fazer um pedido de operação HTTP POST para iniciar, reiniciar ou desligar um VM. Utilize o seguinte URL para iniciar a lâmpada stop0002.

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

Utilize o seguinte URL para reiniciar o lampoeiro de funcionamento0002.

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

Utilize o seguinte URL para desligar o lampoeiro de funcionamento0002.

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

Pode eliminar uma máquina virtual específica enviando um pedido de operação HTTP DELETE para o ponto final do VM com uma carga útil vazia. Devia parar o VM antes de o apagar. Note que o exemplo utiliza o cabeçalho método X-HTTP para anular a operação POST com DELETE. Por exemplo, o seguinte código Java, Delete_vm, elimina o VM que tem ID=77ff77777-7777-7777-7777-ff7f-f7f7f777777f7f7.

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

Note que isto elimina especificamente a máquina virtual LAMP0002. Se o TestVMRole for reduzido de 2 para 1 instâncias, a máquina virtual LAMP0001 é eliminada, mesmo que a LAMP0002 tenha sido interrompida anteriormente.

Atualizar ou eliminar uma função VM

Pode atualizar uma instância VM Role para uma nova versão enquanto as máquinas virtuais de versões anteriores continuam a funcionar. Se adicionar novas máquinas virtuais ao escalonar o VM Role, as novas máquinas virtuais obtêm a versão atualizada da função VM. As máquinas virtuais baseadas em ambas as versões podem ser executadas ao mesmo tempo. Pode ser necessário parar ou eliminar as máquinas virtuais específicas com base na versão anterior.

Pode atualizar uma função VM enviando um pedido de operação HTTP MERGE para o URL para a função VM. O corpo contém a informação atualizada para se fundir no VirtualMachineRole.

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

Por exemplo, o odata.txt seguinte atualiza a função TestVMRole da versão 1.0.0.0 para a versão 1.0.0.1. Enquanto a versão 1.0.0.0 colocou máquinas virtuais em VMNetwork1, a versão exemplo 1.0.0.1 coloca máquinas virtuais em 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"
    }
}  

O exemplo de código Java a seguir pode atualizar a versão TestVMRole. Note que o exemplo utiliza o cabeçalho método X-HTTP para anular a operação POST com 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();
   }
}  

Depois de executar este código, se forem criados novos VMs TestVMRole estes serão a versão 1.0.0.1. A versão atual 1.0.0.0 VMs continua a funcionar. Por exemplo, aumente a escala de TestVMRole de 1 para 2. A nova máquina virtual utiliza a nova versão e funciona no VMNetwork2. A máquina virtual em funcionamento na VMNetwork1 continua a funcionar na VMNetwork1. Pode reduzir o número de casos, ou eliminar a máquina virtual mais antiga, para atualizar todas as instâncias da versão VM Role anterior.

Para eliminar uma função VM e todas as máquinas virtuais na função, pare as máquinas virtuais e envie um pedido de operação HTTP DELETE para o URL para a função VM com um corpo vazio. Utilize o cabeçalho método X-HTTP para anular a operação POST com DELETE.

Consulte também

Gestão virtual de máquinas com Java
VM Roles Tenant Service [SPFSDK][VMROLE]
VM Role JSON Reference [SPFSDK][VMROLE]