Erstellen und Verwalten von virtuellen Windows-Computern in Azure mithilfe von Java
Gilt für: ✔️ Windows-VMs
Für einen virtuellen Azure-Computer (VM) sind mehrere unterstützende Azure-Ressourcen erforderlich. In diesem Artikel wird das Erstellen, Verwalten und Löschen virtueller Computerressourcen mithilfe von Java behandelt. Folgendes wird vermittelt:
- Erstellen eines Maven-Projekts
- Hinzufügen von Abhängigkeiten
- Erstellen von Anmeldeinformationen
- Erstellen von Ressourcen
- Ausführen von Verwaltungsaufgaben
- Löschen von Ressourcen
- Ausführen der Anwendung
Die Ausführung dieser Schritte dauert etwa 20 Minuten.
Erstellen eines Maven-Projekts
Installieren Sie Java, falls Sie dies noch nicht getan haben.
Installieren Sie Maven.
Erstellen Sie einen neuen Ordner und das Projekt:
mkdir java-azure-test cd java-azure-test mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=testAzureApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Hinzufügen von Abhängigkeiten
Öffnen Sie im Ordner
testAzureApp
die Dateipom.xml
, und fügen Sie die Buildkonfiguration zu <project> hinzu, um das Erstellen Ihrer Anwendung zu ermöglichen:<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <configuration> <mainClass>com.fabrikam.testAzureApp.App</mainClass> </configuration> </plugin> </plugins> </build>
Fügen Sie die Abhängigkeiten hinzu, die für den Zugriff auf das Azure Java SDK erforderlich sind.
<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>
Speichern Sie die Datei .
Einrichten der Authentifizierung
Weitere Informationen zum Einrichten der Authentifizierung.
Erstellen des Verwaltungsclients
Öffnen Sie die Datei
App.java
insrc\main\java\com\fabrikam
, und stellen Sie sicher, dass sich diese Paketanweisung ganz oben befindet:package com.fabrikam.testAzureApp;
AzureResourceManager erstellen:
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();
Erstellen von Ressourcen
Ressourcengruppe erstellen
Alle Ressourcen müssen in einer Ressourcengruppe enthalten sein.
Um Werte für die Anwendung anzugeben und die Ressourcengruppe zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Creating resource group...");
ResourceGroup resourceGroup = azure.resourceGroups()
.define("myResourceGroup")
.withRegion(Region.US_EAST)
.create();
Erstellen der Verfügbarkeitsgruppe
Verfügbarkeitsgruppen erleichtern die Verwaltung der virtuellen Computer, die von Ihrer Anwendung verwendet werden.
Um die Verfügbarkeitsgruppe zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Creating availability set...");
AvailabilitySet availabilitySet = azure.availabilitySets()
.define("myAvailabilitySet")
.withRegion(Region.US_EAST)
.withExistingResourceGroup("myResourceGroup")
.create();
Erstellen der öffentlichen IP-Adresse
Eine öffentliche IP-Adresse ist für die Kommunikation mit dem virtuellen Computer erforderlich.
Um die öffentliche IP-Adresse für den virtuellen Computer zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Creating public IP address...");
PublicIpAddress publicIPAddress = azure.publicIpAddresses()
.define("myPublicIP")
.withRegion(Region.US_EAST)
.withExistingResourceGroup("myResourceGroup")
.withDynamicIP()
.create();
Erstellen des virtuellen Netzwerks
Ein virtueller Computer muss in einem Subnetz eines virtuellen Netzwerks enthalten sein.
Um ein Subnetz und ein virtuelles Netzwerk zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
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();
Erstellen der Netzwerkschnittstelle
Ein virtueller Computer benötigt eine Netzwerkschnittstelle, um in dem virtuellen Netzwerk kommunizieren zu können.
Um eine Netzwerkschnittstelle zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
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();
Erstellen des virtuellen Computers
Nachdem Sie nun alle benötigten Ressourcen erstellt haben, können Sie einen virtuellen Computer erstellen.
Um den virtuellen Computer zu erstellen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
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();
Hinweis
In diesem Tutorial wird eine virtuelle Maschine erstellt, auf dem eine Version des Windows Server-Betriebssystems ausgeführt wird. Weitere Informationen zur Auswahl von anderen Images finden Sie unter Navigieren zu und Auswählen von Images virtueller Linux-Computer in Azure mithilfe der Befehlszeilenschnittstelle oder PowerShell.
Wenn Sie einen vorhandenen Datenträger anstelle eines Marketplace-Images verwenden möchten, verwenden Sie diesen 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();
Ausführen von Verwaltungsaufgaben
Während der Lebensdauer eines virtuellen Computers können Sie Verwaltungsaufgaben wie das Starten, Beenden oder Löschen eines virtuellen Computers ausführen. Darüber hinaus empfiehlt es sich, Code zum Automatisieren von wiederkehrenden oder komplexen Aufgaben zu erstellen.
Wenn Sie mit dem virtuellen Computer Aufgaben ausführen müssen, benötigen Sie eine Instanz des Computers. Fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
VirtualMachine vm = azure.virtualMachines().getByResourceGroup("myResourceGroup", "myVM");
Abrufen von Informationen zur VM
Um Informationen zum virtuellen Computer abzurufen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
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();
Beenden des virtuellen Computers
Sie können einen virtuellen Computer beenden und sämtliche Einstellungen beibehalten – dafür werden allerdings weiterhin Gebühren berechnet –, oder Sie können einen virtuellen Computer beenden und die Zuordnung aufheben. Wenn die Zuordnung eines virtuellen Computers aufgehoben wird, wird auch die Zuordnung aller mit diesem Computer verknüpften Ressourcen aufgehoben, und die Abrechnung wird beendet.
Um den virtuellen Computer zu beenden, ohne seine Zuordnung aufzuheben, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Stopping vm...");
vm.powerOff();
System.out.println("Press enter to continue...");
input.nextLine();
Wenn Sie die Zuordnung des virtuellen Computers aufheben möchten, ändern Sie den Aufruf zum Herunterfahren in folgenden Code:
vm.deallocate();
Starten der VM
Um den virtuellen Computer zu starten, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Starting vm...");
vm.start();
System.out.println("Press enter to continue...");
input.nextLine();
Ändern der Größe der VM
Viele Aspekte der Bereitstellung müssen berücksichtigt werden, wenn Sie die Größe für den virtuellen Computer festlegen. Weitere Informationen finden Sie unter VM-Größen.
Um die Größe des virtuellen Computers zu ändern, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Resizing vm...");
vm.update()
.withSize(VirtualMachineSizeTypes.STANDARD_DS2)
.apply();
System.out.println("Press enter to continue...");
input.nextLine();
Hinzufügen eines Datenträgers zur VM
Um dem virtuellen Computer einen 2 GB großen Datenträger hinzuzufügen, der die LUN 0 und den Cachetyp „ReadWrite“ aufweist, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
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();
Löschen von Ressourcen
Da in Azure die genutzten Ressourcen in Rechnung gestellt werden, empfiehlt es sich grundsätzlich, nicht mehr benötigte Ressourcen zu löschen. Um den virtuellen Computer und alle unterstützenden Ressourcen zu löschen, müssen Sie lediglich die Ressourcengruppe löschen.
Um die Ressourcengruppe zu löschen, fügen Sie dem try-Block in der main-Methode folgenden Code hinzu:
System.out.println("Deleting resources..."); azure.resourceGroups().deleteByName("myResourceGroup");
Speichern Sie die Datei „App.java“.
Ausführen der Anwendung
Die vollständige Ausführung dieser Konsolenanwendung sollte etwa fünf Minuten dauern.
Um die Anwendung auszuführen, verwenden Sie folgenden Maven-Befehl:
mvn compile exec:java
Bevor Sie die EINGABETASTE drücken, um das Löschen der Ressourcen zu starten, können Sie sich ein paar Minuten Zeit nehmen, um die Erstellung der Ressourcen im Azure-Portal zu überprüfen. Klicken Sie auf den Bereitstellungsstatus, um Informationen zur Bereitstellung anzuzeigen.
Nächste Schritte
- Erfahren Sie mehr zur Verwendung der Azure-Bibliotheken für Java.