VM-rollen gebruiken in Windows Azure Pack met Java
Van toepassing op: Windows Azure Pack
In deze handleiding ziet u enkele basistaken die een tenantontwikkelaar kan uitvoeren met virtuele-machinerollen (VM-rollen), waaronder het maken, bijwerken en schalen van een EXEMPLAAR van een VM-rol. De codevoorbeelden zijn geschreven in Java en zijn gemaakt met behulp van de Eclipse IDE. Omdat de voorbeelden in deze handleiding gebruikmaken van de HTTP REST-service van de Service Management-API, kunt u deze voorbeelden wijzigen om te werken met elke andere taal die HTTP-bewerkingsaanvragen kan verzenden. Zie het cheatsheet voor URL's voor VM-rollen [SPFSDK][VMROLE] voor een handleiding voor alle URL's die beschikbaar zijn voor VM-rollen.
VM-rollen kunnen een of meer virtuele machines vertegenwoordigen die zijn toegewezen aan een specifieke bewerking, zoals een webserver of webwerkrol. Serviceproviders kunnen tenants een selfservice-ervaring bieden voor het inrichten van virtuele machines via een gecureerde galerie met virtuele-machinerollen. Tenants kunnen VM-rollen inrichten vanuit de galerie met behulp van de gebruikersinterface van de tenantportal of de HTTP REST-service. VM-rollen verschillen van het traditionele model van het inrichten van virtuele machines, omdat ze een schaalbewerking bieden waarmee u het aantal en de versie van virtuele machines eenvoudig kunt aanpassen. Zie Virtual Machine Management met Java voor een handleiding voor het gebruik van virtuele machines met WAP en Java met het traditionele inrichtingsmodel. De mogelijkheden die worden geboden met VM-rollen kunnen helpen bij het snel inrichten en ongedaan maken van de inrichting van uw toepassingen wanneer u het aantal en de versie van uw virtuele machines moet aanpassen.
Service Provider Foundation en Windows Azure Pack voor Windows Server maken een uitbreidbare service beschikbaar waarmee serviceproviders portals met meerdere tenants kunnen bouwen. Een tenant is een selfserviceklant van de serviceprovider. De serviceprovider koppelt het account van de tenant aan een abonnements-id en biedt een openbare sleutel aan een beveiligingscertificaat dat wordt gebruikt om de tenant te verifiëren. Vereiste voor het uitvoeren van de voorbeelden in deze handleiding moet u een abonnement hebben met een serviceprovider die een VM-rollengalerie, een cloudservice in het abonnement biedt om de VM-rol te hosten en een virtueel netwerk in het abonnement om virtuele machines te plaatsen. Als uw serviceprovider u een gebruikersnaam en wachtwoord heeft gegeven, kunt u zich aanmelden bij de gebruikersinterface van de tenantportal en daar uw abonnements-id vinden. Terwijl u bent aangemeld bij de portal, kunt u een certificaat uploaden waarmee de host u als vertrouwde gebruiker kan verifiëren en kunt u een virtueel netwerk maken dat u kunt gebruiken om virtuele machines te plaatsen.
Nadat u de voorbeelden in deze handleiding hebt uitgevoerd, moet u de volgende taken kunnen uitvoeren met Java-code.
Een cloudservice maken om VM-rollen te hosten
Een lijst met VM-rollen ophalen uit de galerie
Een verwijzing naar een galerie-item met VM-rollen ophalen
Een nieuw VM-rolexemplaren maken
Een VM-rol schalen
Startmenu, stoppen, opnieuw opstarten, afsluiten of verwijderen van een virtuele machine
Een VM-rol bijwerken of verwijderen
Een cloudservice maken om VM-rollen te hosten
U moet een cloudservice in uw abonnement hebben om VM-rollen te hosten. Als u een lijst met alle cloudservices wilt weergeven, verzendt u een HTTP GET-bewerkingsaanvraag naar de volgende URL voor CloudServices. Wanneer u een URL gebruikt met de galerie met VM-rollen of cloudservices, moet u ook de querytekenreeks api-version=2013-03 toevoegen. De querytekenreeks begint altijd met de ? teken na de URL.
https://server:port/subscription-id/CloudServices?api-version=2013-03
Het volgende Java-codevoorbeeld, Get_list, kan alle cloudservices in uw abonnement retourneren. De voorbeelden in deze handleiding vertegenwoordigen uw abonnements-id door de tekenreeks: 222aa22-22a2-2a22-2a22-2aaaaa2aaaaa. Over het algemeen kunt u de header x-ms-principal-id instellen op het e-mailadres van de tenant die is gekoppeld aan het huidige abonnement.
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();
}
}
Als het waardeveld in het HTTP-antwoord leeg is, betekent dit dat u geen cloudservices in uw abonnement hebt en dat u er een moet maken voordat u een VM-rol inricht. U kunt een cloudservice maken door een HTTP POST-bewerkingsaanvraag te verzenden naar dezelfde URL voor CloudServices, maar in de aanvraagbody moet u een naam en label opgeven voor de nieuwe cloudservice. Voor de voorbeelden in deze handleiding kan de OData die is toegevoegd aan de hoofdtekst van een HTTP-aanvraag, worden opgeslagen in een tekstbestand op uw computer met de naam odata.txt. Het verzenden van de volgende odata.txt kan bijvoorbeeld worden gebruikt om een cloudservice te maken met de naam TestingCloudService799.
{
"Name": "TestingCloudService799",
"Label": "TestingCloudService799"
}
Alle Java-codevoorbeelden lezen odata.txt met behulp van de volgende methode 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;}
}
Het Java-codevoorbeeld, Create_cs, maakt een nieuwe cloudservice met de naam TestingCloudService799. Het leest odata.txt, streamt deze informatie naar een HTTP-hoofdtekst, stelt de headers in en verzendt vervolgens een POST-bewerkingsaanvraag naar het Cloudservices-eindpunt.
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();
}
}
Een lijst met VM-rollen ophalen uit de galerie
Serviceproviders kunnen tenants een selfservicegalerie met virtuele-machinerollen aanbieden. De tenant kan vervolgens een VM-rol maken op basis van een van de items in de galerie met VM-rollen. U kunt een query uitvoeren op alle VM-rollen die aan uw abonnement worden aangeboden door een HTTP GET-bewerkingsaanvraag te verzenden naar de volgende URL voor de galerie met VM-rollen. U kunt bijvoorbeeld de volgende URL en Get_list gebruiken om de VM-rollen op te halen die aan uw abonnement worden aangeboden.
https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/Gallery/GalleryItems/$/MicrosoftCompute.VMRoleGalleryItem?api-version=2013-03
Hier volgt een voorbeeld van het HTTP-antwoord met de verzameling items in de VM-rolgalerie.
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"}]}
Dit antwoord geeft aan dat er één VM-rol wordt aangeboden door de serviceprovider: een CentOS 6 virtuele-machinerol waarop Apache, MySQL en PHP al zijn geïnstalleerd. Andere items kunnen in de galerie worden weergegeven, afhankelijk van welke VM-rollen worden aangeboden aan uw abonnement. Noteer de tekenreeks in het antwoord dat de eigenschap ContentUrl voor het item geeft. U moet deze waarde gebruiken om een verwijzing naar het specifieke item op te halen.
"ContentUrl":"Gallery/GalleryItems(Name%3d%27CentOS6LAMP%27,Version%3d%271.0.0.0%27,Publisher%3d%27Microsoft%27)"
Een verwijzing naar een galerie-item met VM-rollen ophalen
Nadat u een VM-rolitem hebt geselecteerd in de galerie, haalt u de resourcedefinitie voor dat item op en bepaalt u welke resourceparameters u moet opgeven. De resourcedefinitie is een JSON-bestand dat de hardware- en instantiëringsbeperkingen van de virtuele machine beschrijft. Zie de sectie ResourceDefinition [SPFSDK][VMROLE] voor meer informatie over de resourcedefinitie.
Gebruik Get_list om een GET-bewerkingsaanvraag te verzenden naar de URL voor het galerie-item dat u hebt geselecteerd.
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
Voor dit voorbeeld bevat dit HTTP-antwoord het ResourceDefinition-object voor de CentOS-VM-rol.
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"}
Houd er rekening mee dat de eigenschap ResourceParameters parameters bevat. Hoewel niet elke VM-rol vereist is om parameters te hebben, moet u, als er parameters worden vermeld in de eigenschap ResourceParameters van het Object ResourceDefinition, een waarde opgeven voor elk van deze. U kunt de parameters en de bijbehorende waarden opgeven door ze in een JSON-gecodeerde tekenreeks in te pakken met behulp van de volgende indeling.
{ "parameter1 name" : "parameter1 value", "parameter2 name" : "parameter2 value", ... }
Nadat u de ParameterValues hebt verzameld, kunt u een ResourceConfiguration-object bouwen met de ParameterValues en de versie van de parameterwaarden. In deze handleiding gebruikt het voorbeeldobject ResourceConfiguration de volgende parameterwaarden.
"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"
}
Het virtuele netwerk met de naam VMNetwork1 moet al bestaan in het abonnement van de tenant. Er moet een virtueel netwerk worden opgegeven om virtuele machines te plaatsen. U kunt een virtueel netwerk maken met behulp van de gebruikersinterfaceportal van uw abonnement.
Een nieuw VM-rolexemplaren maken
Bouw een nieuw VirtualMachineRole-object door het ResourceDefinition-object te combineren dat is opgehaald uit de galerie met VM-rollen en het ResourceConfiguration-object dat u in de vorige stap hebt gebouwd. Verzend vervolgens het hele VirtualMachineRole-object als de hoofdtekst van een HTTP POST-bewerkingsaanvraag naar de URL voor VMRoles.
https://server:port/subscription-id/CloudServices/cloudservice-name/Resources/MicrosoftCompute/VMRoles?api-version=2013-03
De odata.txt kan bijvoorbeeld het volgende VitualMachineRole-object bevatten.
{
"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
}
U kunt de volgende Java-code, Create_vmr en het virtualMachine-voorbeeldobject, gebruiken om een nieuwe VM-rol te maken met de naam 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();
}
}
Omdat initialInstanceCount 1 is, is één virtuele machine TestVMRole, met de naam LAMP0001, op VMNetwork1 geplaatst en gestart. U kunt de id voor deze nieuwe virtuele machine verkrijgen door een HTTP GET-bewerkingsaanvraag te verzenden naar de URL voor de VM's van TestVMRole.
https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs?api-version=2013-03
De unieke id voor de vm wordt weergegeven in deze handleiding door de tekenreeks 6e66eee6e-6e6e-6666-ee66-e666e666e.
Een VM-rol schalen
U kunt aanpassen hoeveel virtuele machines worden uitgevoerd in een exemplaar van een VM-rol door een HTTP POST-bewerkingsaanvraag te verzenden naar de URL voor de VM-rol en het eindpunt schalen. Het aantal exemplaren mag niet kleiner zijn dan het minimum, of meer dan het maximumaantal exemplaren dat u hebt opgegeven in het object VitualMachineRole. U gebruikt bijvoorbeeld de volgende URL om de schaal van de rol TestVMRole aan te passen.
https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/Scale?api-version=2013-03
De hoofdtekst van de POST-bewerkingsaanvraag moet het aantal virtuele machines opgeven dat moet worden geïnstantieerd voor de VM-rol als InstanceCount. Als u de volgende odata.txt verzendt, wordt het aantal virtuele machines dat in TestVMRole wordt uitgevoerd, verhoogd naar twee.
{
"InstanceCount": 2
}
Als u een lijst wilt ophalen van alle virtuele machines die zich momenteel in de rol TestVMRole bevinden, verzendt u een HTTP GET-bewerkingsaanvraag naar de URL voor de VM's.
https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole/VMs?api-version=2013-03
Het HTTP-voorbeeldantwoord ziet er als volgt uit.
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}]}]}
Het HTTP-antwoord laat zien dat een tweede virtuele machine van de rol TestVMRole met de naam LAMP0002 en vertegenwoordigd door 77ff7777-7777-7777-777f-ff7f7f77f7 wordt uitgevoerd.
Houd er rekening mee dat als de VM-rol wordt geschaald naar een aantal exemplaren dat kleiner is dan het huidige aantal virtuele machines, sommige vm's worden verwijderd, ongeacht of ze worden uitgevoerd. Als u een specifieke virtuele machine in een VM-rol wilt verwijderen, raadpleegt u de volgende sectie Startmenu, stoppen, opnieuw opstarten, afsluiten of verwijderen van een virtuele machine.
Startmenu, stoppen, opnieuw opstarten, afsluiten of verwijderen van een virtuele machine
U kunt de virtuele machine stoppen door een HTTP POST-bewerkingsaanvraag naar de volgende URL te verzenden met een lege hoofdtekst. Het volgende Voorbeeld van Java-code stopt LAMP002, met ID=77ff7777-7777-7777-7777-ff7f-f7f7f7777f77f7.
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();
}
}
U kunt ook deze Java-voorbeeldcode gebruiken om een HTTP POST-bewerkingsaanvraag in te dienen om een VIRTUELE machine te starten, opnieuw op te starten of af te sluiten. Gebruik de volgende URL om de gestopte LAMP0002 te starten.
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
Gebruik de volgende URL om de actieve LAMP0002 opnieuw op te starten.
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
Gebruik de volgende URL om de actieve LAMP0002 af te sluiten.
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
U kunt een specifieke virtuele machine verwijderen door een HTTP DELETE-bewerkingsaanvraag te verzenden naar het eindpunt voor de VIRTUELE machine met een lege nettolading. U moet de VIRTUELE machine stoppen voordat u deze verwijdert. In het voorbeeld wordt de header X-HTTP-Method gebruikt om de POST-bewerking te overschrijven met DELETE. Met de volgende Java-code, Delete_vm, wordt bijvoorbeeld de VM verwijderd met id=77ff7777-7777-7777-ff7f-f7f7f7f777f7f7.
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();
}
}
Houd er rekening mee dat hiermee specifiek LAMP0002 van de virtuele machine wordt verwijderd. Als testVMRole wordt teruggeschaald van 2 tot 1 exemplaren, wordt de virtuele machine LAMP0001 verwijderd, zelfs als LAMP0002 eerder is gestopt.
Een VM-rol bijwerken of verwijderen
U kunt een VM-rolinstantie bijwerken naar een nieuwe versie terwijl virtuele machines van eerdere versies blijven worden uitgevoerd. Als u nieuwe virtuele machines toevoegt door de VM-rol uit te schalen, krijgen de nieuwe virtuele machines de bijgewerkte versie van de VM-rol. Virtuele machines op basis van beide versies kunnen tegelijkertijd worden uitgevoerd. Mogelijk moet u deze specifieke virtuele machines stoppen of verwijderen op basis van de eerdere versie.
U kunt een VM-rol bijwerken door een HTTP MERGE-bewerkingsaanvraag naar de URL voor de VM-rol te verzenden. De hoofdtekst bevat de bijgewerkte informatie die moet worden samengevoegd met de VirtualMachineRole.
https://server:30006/2222aa22-22a2-2a22-2a22-2aaaaa2aaaaa/CloudServices/TestingCloudService799/Resources/MicrosoftCompute/VMRoles/TestVMRole?api-version=2013-03
De volgende odata.txt bijvoorbeeld de rol TestVMRole bijwerkt van versie 1.0.0.0 naar versie 1.0.0.1. Terwijl versie 1.0.0.0 virtuele machines op VMNetwork1 heeft geplaatst, plaatst het voorbeeldversie 1.0.0.1 virtuele machines op 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"
}
}
In het volgende Java-codevoorbeeld kan de TestVMRole-versie worden bijgewerkt. In het voorbeeld wordt de X-HTTP-Method-header gebruikt om de POST-bewerking te overschrijven met 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();
}
}
Als er na het uitvoeren van deze code nieuwe TestVMRole-VM's worden gemaakt, is dit versie 1.0.0.1. Bestaande vm's van versie 1.0.0.0 blijven worden uitgevoerd. Verhoog bijvoorbeeld de schaal van TestVMRole van 1 tot en met 2. De nieuwe virtuele machine gebruikt de nieuwe versie en wordt uitgevoerd op VMNetwork2. De virtuele machine die wordt uitgevoerd op VMNetwork1, wordt nog steeds uitgevoerd op VMNetwork1. U kunt het aantal exemplaren verminderen of de oudere virtuele machine verwijderen om alle exemplaren van de vorige VM-rolversie bij te werken.
Als u een VM-rol en alle virtuele machines in de rol wilt verwijderen, stopt u de virtuele machines en verzendt u een HTTP DELETE-bewerkingsaanvraag naar de URL voor de VM-rol met een lege hoofdtekst. Gebruik de header X-HTTP-Method om de POST-bewerking te overschrijven met DELETE.
Zie ook
Virtual Machine Management met Java
Tenantservice voor VM-rollen [SPFSDK][VMROLE]
JSON-verwijzing voor VM-rol [SPFSDK][VMROLE]