Aracılığıyla paylaş


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

  1. Henüz yapmadıysanız Java'yı yükleyin.

  2. Maven'ı yükleyin.

  3. 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

  1. Klasörünün testAzureApp altında dosyasını açın ve uygulamanızın pom.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>
    
  2. 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>
    
  3. Dosyayı kaydedin.

Kimlik doğrulaması kurulumu

Kimlik doğrulamasını ayarlamayı öğrenin.

Yönetim istemcisini oluşturma

  1. 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;
    
  2. 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.

  1. Kaynak grubunu silmek için bu kodu ana yöntemdeki try bloğuna ekleyin:

    System.out.println("Deleting resources...");
    azure.resourceGroups().deleteByName("myResourceGroup");
    
  2. 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.

  1. Uygulamayı çalıştırmak için şu Maven komutunu kullanın:

    mvn compile exec:java
    
  2. 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