Windows-VM's maken en beheren in Azure met java

Van toepassing op: ✔️ Windows-VM's

Een virtuele Azure-machine (VM) heeft verschillende ondersteunende Azure-resources nodig. In dit artikel wordt beschreven hoe u VM-resources maakt, beheert en verwijdert met behulp van Java. U leert het volgende:

  • Een Maven-project maken
  • Afhankelijkheden toevoegen
  • Referenties maken
  • Resources maken
  • Beheertaken uitvoeren
  • Bronnen verwijderen
  • De toepassing uitvoeren

Het duurt ongeveer 20 minuten om deze stappen uit te voeren.

Een Maven-project maken

  1. Als u dit nog niet hebt gedaan, installeert u Java.

  2. Maven installeren.

  3. Maak een nieuwe map en het project:

    mkdir java-azure-test
    cd java-azure-test
    
    mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=testAzureApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    

Afhankelijkheden toevoegen

  1. Open het pom.xml bestand onder de testAzureApp map en voeg de buildconfiguratie toe aan <het project> om het bouwen van uw toepassing mogelijk te maken:

    <build>
      <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.fabrikam.testAzureApp.App</mainClass>
            </configuration>
        </plugin>
      </plugins>
    </build>
    
  2. Voeg de afhankelijkheden toe die nodig zijn voor toegang tot de Azure Java SDK.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.3.6</version>
    </dependency>
    <dependency>
      <groupId>com.azure.resourcemanager</groupId>
      <artifactId>azure-resourcemanager</artifactId>
      <version>2.8.0</version>
    </dependency>
    
  3. Sla het bestand op.

Verificatie instellen

Meer informatie over het instellen van verificatie.

De beheerclient maken

  1. Open het App.java bestand onder src\main\java\com\fabrikam en zorg ervoor dat deze pakketinstructie bovenaan staat:

    package com.fabrikam.testAzureApp;
    
  2. AzureResourceManager maken:

    TokenCredential credential = new EnvironmentCredentialBuilder()
                .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                .build();
    
    // Please finish 'Set up authentication' step first to set the four environment variables: AZURE_SUBSCRIPTION_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID
    AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
    
    AzureResourceManager azureResourceManager = AzureResourceManager.configure()
            .withLogLevel(HttpLogDetailLevel.BASIC)
            .authenticate(credential, profile)
            .withDefaultSubscription();
    

Resources maken

Maak de resourcegroep aan

Alle resources moeten zijn opgenomen in een resourcegroep.

Als u waarden voor de toepassing wilt opgeven en de resourcegroep wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating resource group...");
ResourceGroup resourceGroup = azure.resourceGroups()
    .define("myResourceGroup")
    .withRegion(Region.US_EAST)
    .create();

De beschikbaarheidsset maken

Met beschikbaarheidssets kunt u de virtuele machines die door uw toepassing worden gebruikt eenvoudiger onderhouden.

Als u de beschikbaarheidsset wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating availability set...");
AvailabilitySet availabilitySet = azure.availabilitySets()
    .define("myAvailabilitySet")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .create();

Het openbare IP-adres maken

Er is een openbaar IP-adres nodig om te communiceren met de virtuele machine.

Als u het openbare IP-adres voor de virtuele machine wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating public IP address...");
PublicIpAddress publicIPAddress = azure.publicIpAddresses()
    .define("myPublicIP")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withDynamicIP()
    .create();

Het virtuele netwerk maken

Een virtuele machine moet zich in een subnet van een virtueel netwerk bevinden.

Als u een subnet en een virtueel netwerk wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating virtual network...");
Network network = azure.networks()
    .define("myVN")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withAddressSpace("10.0.0.0/16")
    .withSubnet("mySubnet", "10.0.0.0/24")
    .create();

De netwerkinterface maken

Een virtuele machine heeft een netwerkinterface nodig om te communiceren in het virtuele netwerk.

Als u een netwerkinterface wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating network interface...");
NetworkInterface networkInterface = azure.networkInterfaces()
    .define("myNIC")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withExistingPrimaryNetwork(network)
    .withSubnet("mySubnet")
    .withPrimaryPrivateIPAddressDynamic()
    .withExistingPrimaryPublicIPAddress(publicIPAddress)
    .create();

De virtuele machine maken

Nu u alle ondersteunende resources hebt gemaakt, kunt u een virtuele machine maken.

Als u de virtuele machine wilt maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Creating virtual machine...");
VirtualMachine virtualMachine = azure.virtualMachines()
    .define("myVM")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withExistingPrimaryNetworkInterface(networkInterface)
    .withLatestWindowsImage("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter")
    .withAdminUsername("azureuser")
    .withAdminPassword("Azure12345678")
    .withComputerName("myVM")
    .withExistingAvailabilitySet(availabilitySet)
    .withSize("Standard_DS1")
    .create();
Scanner input = new Scanner(System.in);
System.out.println("Press enter to get information about the VM...");
input.nextLine();

Opmerking

In deze zelfstudie maakt u een virtuele machine waarop een versie van het Windows Server-besturingssysteem wordt uitgevoerd. Zie Navigeren en installatiekopieën van virtuele Azure-machines selecteren met Windows PowerShell en de Azure CLI voor meer informatie over het selecteren van andere installatiekopieën.

Als u een bestaande schijf wilt gebruiken in plaats van een marketplace-afbeelding, gebruik deze code:

Disk managedDisk = azure.disks().define("myosdisk")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withWindowsFromVhd("https://mystorage.blob.core.windows.net/vhds/myosdisk.vhd")
    .withStorageAccountName("mystorage")
    .withSizeInGB(128)
    .withSku(DiskSkuTypes.PREMIUM_LRS)
    .create();

azure.virtualMachines().define("myVM")
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("myResourceGroup")
    .withExistingPrimaryNetworkInterface(networkInterface)
    .withSpecializedOSDisk(managedDisk, OperatingSystemTypes.WINDOWS)
    .withExistingAvailabilitySet(availabilitySet)
    .withSize(VirtualMachineSizeTypes.STANDARD_DS1)
    .create();

Beheertaken uitvoeren

Tijdens de levenscyclus van een virtuele machine kunt u beheertaken uitvoeren, zoals het starten, stoppen of verwijderen van een virtuele machine. Daarnaast kunt u code maken om terugkerende of complexe taken te automatiseren.

Wanneer u iets met de virtuele machine moet doen, moet u een exemplaar hiervan ophalen. Voeg deze code toe aan het try-blok van de hoofdmethode:

VirtualMachine vm = azure.virtualMachines().getByResourceGroup("myResourceGroup", "myVM");

Informatie over de VM ophalen

Als u informatie over de virtuele machine wilt ophalen, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("hardwareProfile");
System.out.println("    vmSize: " + vm.size());
System.out.println("storageProfile");
System.out.println("  imageReference");
System.out.println("    publisher: " + vm.storageProfile().imageReference().publisher());
System.out.println("    offer: " + vm.storageProfile().imageReference().offer());
System.out.println("    sku: " + vm.storageProfile().imageReference().sku());
System.out.println("    version: " + vm.storageProfile().imageReference().version());
System.out.println("  osDisk");
System.out.println("    osType: " + vm.storageProfile().osDisk().osType());
System.out.println("    name: " + vm.storageProfile().osDisk().name());
System.out.println("    createOption: " + vm.storageProfile().osDisk().createOption());
System.out.println("    caching: " + vm.storageProfile().osDisk().caching());
System.out.println("osProfile");
System.out.println("    computerName: " + vm.osProfile().computerName());
System.out.println("    adminUserName: " + vm.osProfile().adminUsername());
System.out.println("    provisionVMAgent: " + vm.osProfile().windowsConfiguration().provisionVMAgent());
System.out.println(
        "    enableAutomaticUpdates: " + vm.osProfile().windowsConfiguration().enableAutomaticUpdates());
System.out.println("networkProfile");
System.out.println("    networkInterface: " + vm.primaryNetworkInterfaceId());
System.out.println("vmAgent");
System.out.println("  vmAgentVersion: " + vm.instanceView().vmAgent().vmAgentVersion());
System.out.println("    statuses");
for (InstanceViewStatus status : vm.instanceView().vmAgent().statuses()) {
    System.out.println("    code: " + status.code());
    System.out.println("    displayStatus: " + status.displayStatus());
    System.out.println("    message: " + status.message());
    System.out.println("    time: " + status.time());
}
System.out.println("disks");
for (DiskInstanceView disk : vm.instanceView().disks()) {
    System.out.println("  name: " + disk.name());
    System.out.println("  statuses");
    for (InstanceViewStatus status : disk.statuses()) {
        System.out.println("    code: " + status.code());
        System.out.println("    displayStatus: " + status.displayStatus());
        System.out.println("    time: " + status.time());
    }
}
System.out.println("VM general status");
System.out.println("  provisioningStatus: " + vm.provisioningState());
System.out.println("  id: " + vm.id());
System.out.println("  name: " + vm.name());
System.out.println("  type: " + vm.type());
System.out.println("VM instance status");
for (InstanceViewStatus status : vm.instanceView().statuses()) {
    System.out.println("  code: " + status.code());
    System.out.println("  displayStatus: " + status.displayStatus());
}
System.out.println("Press enter to continue...");
input.nextLine();

De virtuele machine stoppen

U kunt een virtuele machine stoppen en alle instellingen ervan behouden, maar hiervoor nog steeds kosten in rekening worden gebracht, of u kunt een virtuele machine stoppen en de toewijzing ervan ongedaan maken. Wanneer een virtuele machine wordt uitgeschakeld, worden alle bijbehorende resources ook uitgeschakeld en eindigt de facturering voor deze machine.

Als u de virtuele machine wilt stoppen zonder de toewijzing ervan ongedaan te maken, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Stopping vm...");
vm.powerOff();
System.out.println("Press enter to continue...");
input.nextLine();

Als u de toewijzing van de virtuele machine ongedaan wilt maken, wijzigt u de PowerOff-aanroep in deze code:

vm.deallocate();

De VIRTUELE machine starten

Als u de virtuele machine wilt starten, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Starting vm...");
vm.start();
System.out.println("Press enter to continue...");
input.nextLine();

Het formaat van de VM wijzigen

Veel aspecten van de implementatie moeten worden overwogen bij het bepalen van een grootte voor uw virtuele machine. Voor meer informatie, zie VM-grootten.

Als u de grootte van de virtuele machine wilt wijzigen, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Resizing vm...");
vm.update()
    .withSize(VirtualMachineSizeTypes.STANDARD_DS2)
    .apply();
System.out.println("Press enter to continue...");
input.nextLine();

Een gegevensschijf toevoegen aan de virtuele machine

Als u een gegevensschijf wilt toevoegen aan de virtuele machine die 2 GB groot is, een LUN van 0 heeft en een cachetype ReadWrite, voegt u deze code toe aan het try-blok in de hoofdmethode:

System.out.println("Adding data disk...");
vm.update()
    .withNewDataDisk(2, 0, CachingTypes.READ_WRITE)
    .apply();
System.out.println("Press enter to delete resources...");
input.nextLine();

Bronnen verwijderen

Omdat er kosten in rekening worden gebracht voor resources die worden gebruikt in Azure, is het altijd raadzaam om resources te verwijderen die niet meer nodig zijn. Als u de virtuele machines en alle ondersteunende resources wilt verwijderen, hoeft u alleen de resourcegroep te verwijderen.

  1. Als u de resourcegroep wilt verwijderen, voegt u deze code toe aan het try-blok in de hoofdmethode:

    System.out.println("Deleting resources...");
    azure.resourceGroups().deleteByName("myResourceGroup");
    
  2. Sla het bestand App.java op.

De toepassing uitvoeren

Het duurt ongeveer vijf minuten voordat deze consoletoepassing volledig van begin tot eind wordt uitgevoerd.

  1. Gebruik deze Maven-opdracht om de toepassing uit te voeren:

    mvn compile exec:java
    
  2. Voordat u op Enter drukt om resources te verwijderen, kan het enkele minuten duren voordat u het maken van de resources in Azure Portal controleert. Klik op de implementatiestatus om informatie over de implementatie te bekijken.

Volgende stappen