Java kullanarak Azure'da Windows VM'leri oluşturma ve yönetme
Şunlar için geçerlidir: ✔️ Windows VM'leri
Bir Azure Sanal Makinesi 'nin (VM) birkaç destekleyici Azure kaynağına ihtiyacı vardır. Bu makalede Java kullanarak VM kaynaklarını oluşturma, yönetme ve silme işlemleri yer alır. Şunları yapmayı öğreneceksiniz:
- Maven projesi oluşturma
- Bağımlılık ekleme
- Kimlik bilgileri oluşturma
- Kaynak oluşturma
- Yönetim görevlerini gerçekleştirme
- Kaynakları silme
- Uygulamayı çalıştırma
Bu adımların gerçekılması yaklaşık 20 dakika sürer.
Maven projesi oluşturma
Henüz yapmadıysanız Java'yı yükleyin.
Maven'ı yükleyin.
Yeni bir klasör ve proje oluşturun:
mkdir java-azure-test cd java-azure-test mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=testAzureApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Bağımlılık ekleme
Klasörünün
testAzureApp
altında dosyasını açın ve uygulamanızınpom.xml
oluşturulmasını etkinleştirmek için <derleme yapılandırmasını projeye> ekleyin:<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <configuration> <mainClass>com.fabrikam.testAzureApp.App</mainClass> </configuration> </plugin> </plugins> </build>
Azure Java SDK'sına erişmek için gereken bağımlılıkları ekleyin.
<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>
Dosyayı kaydedin.
Kimlik doğrulaması kurulumu
Kimlik doğrulamasını ayarlamayı öğrenin.
Yönetim istemcisini oluşturma
dosyasını altında
App.java
src\main\java\com\fabrikam
açın ve bu paket deyiminin en üstte olduğundan emin olun:package com.fabrikam.testAzureApp;
AzureResourceManager oluşturma:
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();
Kaynak oluşturma
Bir kaynak grubu oluştur
Tüm kaynaklar bir Kaynak grubunda yer almalıdır.
Uygulamanın değerlerini belirtmek ve kaynak grubunu oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Creating resource group...");
ResourceGroup resourceGroup = azure.resourceGroups()
.define("myResourceGroup")
.withRegion(Region.US_EAST)
.create();
Kullanılabilirlik kümesini oluşturma
Kullanılabilirlik kümeleri , uygulamanız tarafından kullanılan sanal makineleri korumanızı kolaylaştırır.
Kullanılabilirlik kümesini oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Creating availability set...");
AvailabilitySet availabilitySet = azure.availabilitySets()
.define("myAvailabilitySet")
.withRegion(Region.US_EAST)
.withExistingResourceGroup("myResourceGroup")
.create();
Genel IP adresini oluşturma
Sanal makineyle iletişim kurmak için Genel IP adresi gerekir.
Sanal makinenin genel IP adresini oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Creating public IP address...");
PublicIpAddress publicIPAddress = azure.publicIpAddresses()
.define("myPublicIP")
.withRegion(Region.US_EAST)
.withExistingResourceGroup("myResourceGroup")
.withDynamicIP()
.create();
Sanal ağı oluşturma
Sanal makine bir Sanal ağın alt ağında olmalıdır.
Bir alt ağ ve sanal ağ oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
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();
Ağ arabirimini oluşturma
Sanal makine, sanal ağ üzerinde iletişim kurmak için bir ağ arabirimine ihtiyaç duyar.
Ağ arabirimi oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
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();
Sanal makineyi oluşturma
Artık tüm destekleyici kaynakları oluşturduğunuza göre bir sanal makine oluşturabilirsiniz.
Sanal makineyi oluşturmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
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();
Not
Bu öğretici, Windows Server işletim sisteminin bir sürümünü çalıştıran bir sanal makine oluşturur. Diğer görüntüleri seçme hakkında daha fazla bilgi edinmek için bkz . Windows PowerShell ve Azure CLI ile Azure sanal makine görüntülerine gitme ve bu görüntüleri seçme.
Market görüntüsü yerine var olan bir diski kullanmak istiyorsanız şu kodu kullanın:
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();
Yönetim görevlerini gerçekleştirme
Bir sanal makinenin yaşam döngüsü boyunca, sanal makineyi başlatmak, durdurmak veya silmek gibi yönetim görevleri gerçekleştirmek isteyebilirsiniz. Ayrıca, yinelenen veya karmaşık görevleri otomatikleştirmek için kod oluşturmak isteyebilirsiniz.
VM ile herhangi bir işlem yapmanız gerektiğinde bunun bir örneğini almanız gerekir. Bu kodu ana yöntemin try bloğuna ekleyin:
VirtualMachine vm = azure.virtualMachines().getByResourceGroup("myResourceGroup", "myVM");
VM hakkında bilgi alma
Sanal makine hakkında bilgi almak için bu kodu ana yöntemdeki try bloğuna ekleyin:
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();
VM’yi durdurma
Bir sanal makineyi durdurabilir ve tüm ayarlarını koruyabilir, ancak bunun için ücretlendirilmeye devam edebilir veya bir sanal makineyi durdurup serbest bırakabilirsiniz. Bir sanal makine serbest bırakıldığında, onunla ilişkili tüm kaynaklar da serbest bırakılır ve faturalama sona erer.
Sanal makineyi serbest bırakmadan durdurmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Stopping vm...");
vm.powerOff();
System.out.println("Press enter to continue...");
input.nextLine();
Sanal makineyi serbest bırakmak istiyorsanız PowerOff çağrısını şu kodla değiştirin:
vm.deallocate();
VM’yi başlatma
Sanal makineyi başlatmak için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Starting vm...");
vm.start();
System.out.println("Press enter to continue...");
input.nextLine();
Sanal makineyi yeniden boyutlandırma
Sanal makineniz için bir boyuta karar verirken dağıtımın birçok yönü dikkate alınmalıdır. Daha fazla bilgi için bkz . VM boyutları.
Sanal makinenin boyutunu değiştirmek için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Resizing vm...");
vm.update()
.withSize(VirtualMachineSizeTypes.STANDARD_DS2)
.apply();
System.out.println("Press enter to continue...");
input.nextLine();
VM’ye veri diski ekleme
Boyutu 2 GB olan, LUN değeri 0 olan ve önbelleğe alma türü ReadWrite olan bir veri diski eklemek için bu kodu ana yöntemdeki try bloğuna ekleyin:
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();
Kaynakları silme
Azure'da kullanılan kaynaklar için ücretlendirildiğinizden, artık gerekli olmayan kaynakları silmek her zaman iyi bir uygulamadır. Sanal makineleri ve tüm destekleyici kaynakları silmek istiyorsanız tek yapmanız gereken kaynak grubunu silmektir.
Kaynak grubunu silmek için bu kodu ana yöntemdeki try bloğuna ekleyin:
System.out.println("Deleting resources..."); azure.resourceGroups().deleteByName("myResourceGroup");
App.java dosyasını kaydedin.
Uygulamayı çalıştırma
Bu konsol uygulamasının baştan sona tamamen çalışması yaklaşık beş dakika sürmelidir.
Uygulamayı çalıştırmak için şu Maven komutunu kullanın:
mvn compile exec:java
Kaynakları silmeye başlamak için Enter tuşuna basmadan önce, Azure portalında kaynakların oluşturulmasını doğrulamanız birkaç dakika sürebilir. Dağıtım hakkındaki bilgileri görmek için dağıtım durumuna tıklayın.
Sonraki adımlar
- Java için Azure kitaplıklarını kullanma hakkında daha fazla bilgi edinin.