Azure 仮想マシンを Java アプリケーションから管理するManage Azure virtual machines from your Java applications

このサンプルでは、Azure Management Libraries for Java を使って Azure 仮想マシンの作成と操作を行います。This sample uses the Azure management libraries for Java to create and work with Azure virtual machines.

サンプルを実行するRun the sample

認証ファイルを作成し、そのファイルのコンピューター上における完全なパスを保持する環境変数 AZURE_AUTH_LOCATION を設定します。Create an authentication file and set an environment variable AZURE_AUTH_LOCATION with the full path to the file on your computer. 次に、以下を実行します。Then run:

git clone https://github.com/Azure-Samples/compute-java-manage-vm.git
cd compute-java-manage-vm
mvn clean compile exec:java

完全なコード サンプルについては GitHub を参照してください。View the complete code sample on GitHub.

Azure での認証Authenticate with Azure

認証ファイルを作成し、環境変数 AZURE_AUTH_LOCATION と認証ファイルの完全なパスをコマンド ラインでエクスポートします。Create an authentication file and export an environment variable AZURE_AUTH_LOCATION on the command line with the full path to the file.

export AZURE_AUTH_LOCATION=/Users/raisa/azure.auth

Azure リソースを定義、作成、構成するために管理ライブラリで使用されるエントリ ポイント Azure オブジェクトを構成するために、この認証ファイルが使用されます。The authentication file is used to configure the entry point Azure object used by the management libraries to define, create, and configure Azure resources.

// pull in the location of the security file from the environment 
final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));

Azure azure = Azure
        .configure()
        .withLogLevel(LogLevel.NONE)
        .authenticate(credFile)
        .withDefaultSubscription();

Azure Management Libraries for Java を使用する際の認証オプションの詳細については、こちらを参照してください。Learn more about authentication options when using the Azure management libraries for Java.

Windows 仮想マシンの作成Create a Windows virtual machine

// Prepare a data disk for VM
Disk dataDisk = azure.disks().define(SdkContext.randomResourceName("dsk", 30))
            .withRegion(region)
            .withNewResourceGroup(rgName)
            .withData()
            .withSizeInGB(50)
            .create();

// create the windows virtual machine with the data disk            
VirtualMachine windowsVM = azure.virtualMachines().define(windowsVmName)
            .withRegion(region)
            .withNewResourceGroup(rgName)
            .withNewPrimaryNetwork("10.0.0.0/28")
            .withPrimaryPrivateIpAddressDynamic()
            .withoutPrimaryPublicIpAddress()
            .withPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_R2_DATACENTER)
            .withAdminUsername(userName)
            .withAdminPassword(password)
            .withNewDataDisk(10)
            .withNewDataDisk(dataDiskCreatable)
            .withExistingDataDisk(dataDisk)
            .withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
            .create();

このコードは次のことを行っています。This code:

  1. 仮想マシンで使用する、50 GB のサイズの Disk Creatable をランダムな名前で定義します。Defines a Disk Creatable with a 50GB size and random name for use with a virtual machine.
  2. azure.virtualMachines().define()..create() チェーンを使って、Windows Server 2012 仮想マシンを作成します。Uses the azure.virtualMachines().define()..create() chain to create the Windows Server 2012 virtual machine. この API によって、前の手順で定義した Disk が仮想マシンと同時に作成されます。The API creates the Disk defined in the previous step the same time as the virtual machine. 仮想マシンには、withNewDataDisk(10) を通じて 10 GB のデータ ディスクがアタッチされます。A 10GB data disk is also attached to the virtual machine through withNewDataDisk(10).

Creatable オブジェクトを使うと、リソースのローカルな表現を定義しておいて、実際に他の Azure リソースから必要とされたタイミングで作成することができます。詳細については、リンク先のページを参照してください。Learn more about using Creatable objects to define local representations of resources and create them just as other Azure resources need them.

仮想マシンの停止、開始、再起動Stop, start, and restart a virtual machine

// look up a virtual machine by its ID and then restart, stop, and start it
azureVM = azure.getVirtualMachine.getById(windowsVM.id());

azureVM.restart();
azureVM.powerOff();
azureVM.start();

powerOff() は、仮想マシン オペレーティング システムを停止するだけで、そのリソースの割り当ては解除しません。powerOff() stops the virtual machine operating system but does not deallocate its resources.

既存のネットワークへの仮想マシンの追加Add a virtual machine to an existing network

// Get the virtual network the current virtual machine is using
Network network = windowsVM.getPrimaryNetworkInterface().primaryIPConfiguration().getNetwork();

// Create a Linux VM in the same subnet
VirtualMachine linuxVM = azure.virtualMachines().define(linuxVmName)
           .withRegion(region)
           .withExistingResourceGroup(rgName)
           .withExistingPrimaryNetwork(network)
           .withSubnet("subnet1") // default subnet name when no name specified at creation
           .withPrimaryPrivateIPAddressDynamic()
           .withoutPrimaryPublicIPAddress()
           .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
           .withRootUsername(userName)
           .withRootPassword(password)
           .withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
           .create();

Windows VM ではなく Linux VM を定義するには、withPopularLinuxImage を使用します。Use withPopularLinuxImage to define a Linux VM instead of a Windows one.

仮想マシンの列挙List virtual machines

// get a list of VMs in the same resource group as an existing VM
String resourceGroupName = windowsVM.resourceGroupName();
PagedList<VirtualMachine> resourceGroupVMs = azure.virtualMachines()
        .listByResourceGroup(resourceGroupName); 

// for each vitual machine in the resource group, log their name and plan
for (VirtualMachine virtualMachine : azure.virtualMachines().listByResourceGroup(resourceGroupName)) {
    System.out.println("VM " + virtualMachine.computerName() + 
        " has plan " + virtualMachine.plan());
}

azure.virtualMachines().list() を使ってサブスクリプションのすべての仮想マシンを列挙し、リソース グループごとに、tags() から返された Map を反復処理しながら、タグ付けされた仮想マシンのコレクションを管理します。List all virtual machines for a subscription using azure.virtualMachines().list() and iterate through the Map returned by tags() to manage tagged collections of virtual machines across resource groups.

仮想マシンの更新Update a virtual machine

// add a 10GB data disk to the virtual machine
windowsVM.update()
     .withNewDataDisk(10)
     .apply();

update()...apply() を使用して仮想マシンの構成を更新します。define()...create() で仮想マシンを構成するときに使用したものと同じメソッドを使用しています。Update the virtual machine configuration using update()...apply() and the same methods used to configure the virtual machine when created through define()...create().

仮想マシンの削除Delete a virtual machine

// delete by ID if you already are working with the VM object
azure.virtualMachines().deleteById(windowsVM.id());

// delete by resource group and name
azure.virtualMachines().deleteByResourceGroup(rgName,windowsVmName);

サンプルの説明Sample explanation

サンプル コードでは、50 GB のデータ ディスクを使って Windows 仮想マシンを作成します。The sample code creates a Windows virtual machine with a 50GB data disk. その後、10 GB のデータ ディスクを別途作成し、それをこの Windows 仮想マシンにアタッチします。The sample then creates a second 10GB data disk and attaches it to this Windows virtual machine. そのうえで、この Windows 仮想マシンと同じ仮想ネットワークに Linux 仮想マシンを作成します。Then the sample creates a Linux virtual machine in the same virtual network as the Windows virtual machine.

サンプルでは、この 2 つの仮想マシンについての情報をログに記録します。どちらのログも完了前に削除されます。The sample logs information about both virtual machines and deletes them both before completing.

サンプルで使われているクラスClass used in sample メモNotes
VirtualMachineVirtualMachine 仮想マシンのプロパティを照会したり、仮想マシンの状態を管理したりすることができます。Query properties and manage state of virtual machines. azure.virtualMachines().list() を使ってリスト形式で取得するか、azure.virtualMachines().getByResourceGroup() で名前または ID を使って取得します。Retrieved in list form withazure.virtualMachines().list() or by name or ID azure.virtualMachines().getByResourceGroup()
VirtualMachineSizeTypesVirtualMachineSizeTypes 仮想マシン サイズのオプションに対応した静的な値を保持するクラスです。VM に割り当てるリソースを withSize()メソッドで定義する際に使用します。Class with static values that map to virtual machine size options, used by the withSize() method to define the resources allocated to the VM.
ディスクDisk ディスクを定義する際、データを格納するためのディスクは withData() で作成し、オペレーティング システム イメージを格納するためのディスクは、withLinux または withWindows のどちらか適切なメソッドで作成します。Create a disk to store data using withData() or operating system image using the appropriate withLinux or withWindows method when defining the disk. 仮想マシンへのディスクのアタッチは、作成時に (using withNewDataDisk または withExistingDataDisk) 行うか、作成後に VirtualMachine オブジェクトの update()..apply() で行います。Attach disks to virtual machines either at the time of creation (using withNewDataDisk or withExistingDataDisk) or after creation by update()..apply() on the VirtualMachine object.
DiskSkuTypesDiskSkuTypes Standard または Premium のストレージ プランでディスクを定義するための静的な値を保持するクラスです。Class with static values to define a disk with a standard or premium storage plan.
KnownLinuxVirtualMachineImageKnownLinuxVirtualMachineImage 仮想マシンを定義するときに withPopularLinuxImage() メソッドで使用する一連の Linux 仮想マシン オプションを保持するクラスです。Class with a set of Linux virtual machine options for use with the withPopularLinuxImage() method when defining a virtual machine.
KnownWindowsVirtualMachineImageKnownWindowsVirtualMachineImage 仮想マシンを定義するときに withPopularWindowsImage() メソッドで使用する一連の Windows 仮想マシン イメージ オプションを保持するクラスです。Class with a set of Windows virtual machine image options for use with the withPopularWindowsImage() method when defining a virtual machine.

次の手順Next steps

Azure での Java アプリの作成とデプロイの詳細については、Java デベロッパー センターを参照してください。For more information on creating and deploying Java apps on Azure, visit the Java developer center.