Java アプリによる Azure 仮想ネットワークの作成と管理Create and manage Azure virtual networks from your Java apps

このサンプルでは、管理対象となるネットワーク セグメントに対し、Azure リソースを分離する仮想ネットワークを作成します。This sample creates a virtual network to isolate your Azure resources on network segment you control.

サンプルを実行する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/network-java-manage-virtual-network.git
cd network-java-manage-virtual-network
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.

インターネット トラフィックをブロックするネットワーク セキュリティ グループの作成Create a network security group to block Internet traffic

// this NSG definition block traffic to and from the public Internet
NetworkSecurityGroup backEndSubnetNsg = azure.networkSecurityGroups()
              .define(vnet1BackEndSubnetNsgName)
                    .withRegion(Region.US_EAST)
                    .withNewResourceGroup(rgName)
                    .defineRule("DenyInternetInComing")
                        .denyInbound()
                        .fromAddress("INTERNET")
                        .fromAnyPort()
                        .toAnyAddress()
                        .toAnyPort()
                        .withAnyProtocol()
                        .attach()
                    .defineRule("DenyInternetOutGoing")
                        .denyOutbound()
                        .fromAnyAddress()
                        .fromAnyPort()
                        .toAddress("INTERNET")
                        .toAnyPort()
                        .withAnyProtocol()
                        .attach()
                    .create();

このネットワーク セキュリティ規則は、受信方向と送信方向のパブリック インターネット トラフィックをどちらもブロックします。This network security rule blocks both inbound and outbound public Internet traffic. このネットワーク セキュリティ グループは、仮想ネットワーク内のサブネットに適用するまで作用しません。This network security group will not have an effect until applied to a subnet in your virtual network.

2 つのサブネットから成る仮想ネットワークの作成Create a virtual network with two subnets

// create the a virtual network with two subnets
// assign the backend subnet a rule blocking public internet traffic
Network virtualNetwork1 = azure.networks().define(vnetName1)
                    .withRegion(Region.US_EAST)
                    .withExistingResourceGroup(rgName)
                    .withAddressSpace("192.168.0.0/16")
                    .withSubnet(vnet1FrontEndSubnetName, "192.168.1.0/24")
                    .defineSubnet(vnet1BackEndSubnetName)
                        .withAddressPrefix("192.168.2.0/24")
                        .withExistingNetworkSecurityGroup(backEndSubnetNsg)
                        .attach()
                    .create();

バックエンド サブネットは、ネットワーク セキュリティ グループに設定された規則に従ってインターネット アクセスを拒否します。The backend subnet denies Internet access usingfollowing the rules set in the network security group. フロント エンド サブネットには、インターネットへの送信トラフィックを許可する既定の規則が使用されます。The front end subnet uses the default rules which allow outbound traffic to the Internet.

受信方向の HTTP トラフィックを許可するネットワーク セキュリティ グループの作成Create a network security group to allow inbound HTTP traffic

// create a rule that allows inbound HTTP and blocks outbound Internet traffic
NetworkSecurityGroup frontEndSubnetNsg = azure.networkSecurityGroups()
               .define(vnet1FrontEndSubnetNsgName)
                    .withRegion(Region.US_EAST)
                    .withExistingResourceGroup(rgName)
                    .defineRule("AllowHttpInComing")
                        .allowInbound()
                        .fromAddress("INTERNET")
                        .fromAnyPort()
                        .toAnyAddress()
                        .toPort(80)
                        .withProtocol(SecurityRuleProtocol.TCP)
                        .attach()
                    .defineRule("DenyInternetOutGoing")
                        .denyOutbound()
                        .fromAnyAddress()
                        .fromAnyPort()
                        .toAddress("INTERNET")
                        .toAnyPort()
                        .withAnyProtocol()
                        .attach()
                    .create();

このネットワーク セキュリティ規則は、パブリック インターネットからの受信トラフィックをポート 80 で開放し、ネットワーク内からパブリック インターネットに向かう送信方向のトラフィックはすべてブロックします。This network security rule opens up inbound traffic on port 80 from the public Internet, and blocks all outbound traffic from inside the network to the public Internet.

仮想ネットワークの更新Update a virtual network

// update the front end subnet to use the rules in the new network security group
virtualNetwork1.update()
          .updateSubnet(vnet1FrontEndSubnetName)
          .withExistingNetworkSecurityGroup(frontEndSubnetNsg)
          .parent()
          .apply();

前の手順で作成したネットワーク セキュリティ規則を使用し、受信方向の HTTP トラフィックを許可するようにフロント エンド サブネットを更新します。Update the front end subnet to allow inbound HTTP traffic using the network security rule created in the previous step.

サブネットへの仮想マシンの作成Create a virtual machine on a subnet

// attach the new VM to the front end subnet on the virtual network
VirtualMachine frontEndVM = azure.virtualMachines().define(frontEndVmName)
                    .withRegion(Region.US_EAST)
                    .withExistingResourceGroup(rgName)
                    .withExistingPrimaryNetwork(virtualNetwork1) 
                    .withSubnet(vnet1FrontEndSubnetName)
                    .withPrimaryPrivateIpAddressDynamic()
                    .withNewPrimaryPublicIpAddress(publicIpAddressLeafDnsForFrontEndVm)
                    .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
                    .withRootUsername(userName)
                    .withSsh(sshKey)
                    .withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
                    .create();

withExistingPrimaryNetwork()withSubnet() では、前の手順で作成した仮想ネットワークのフロントエンド サブネットを使用するように仮想マシンを構成しています。withExistingPrimaryNetwork() and withSubnet() configure the virtual machine to use the front-end subnet on the virtual network created in the previous steps.

リソース グループに存在する仮想ネットワークの列挙List virtual networks in a resource group

// iterate over every virtual network in the resource group 
for (Network virtualNetwork : azure.networks().listByResourceGroup(rgName)) {
    // for each subnet on the virtual network, log the network address prefix 
    for (Map.Entry<String, Subnet> entry : virtualNetwork.subnets().entrySet()) {
        String subnetName = entry.getKey();
        Subnet subnet = entry.getValue();
        System.out.println("Address prefix for subnet " + subnetName + 
             " is " + subnet.addressPrefix());
    }
}

外側のコレクションを使って Network オブジェクトを列挙しながら調べるか、この例のように for-each ループを入れ子にして、ネットワークごとにそれぞれの子リソースを反復処理することができます。You can list and inspect Network object using the outer collection or iterate through each child resource for each network using the nested for-each loop as seen in this example.

仮想ネットワークの削除Delete a virtual network

// if you already have the virtual network object it is easiest to delete by ID
azure.networks().deleteById(virtualNetwork1.id());

// Delete by resource group and name if you don't have the VirtualMachine object
azure.networks().deleteByResourceGroup(rgName,vnetName1);

仮想ネットワークを削除すると、そのネットワーク上のサブネットも削除されます。ただし、そのサブネットに適用されていたネットワーク セキュリティ グループの規則は削除されません。Removing a virtual network deletes the subnets on the network but does not delete the network security group rules applied to the subnets. その定義を他のサブネットに再度適用することができます。Those definitions can be reapplied to other subnets.

サンプルの説明Sample explanation

このサンプルでは、それぞれ 1 つの仮想マシンを含んだ 2 つのサブネットから成る仮想ネットワークを作成します。This sample creates a virtual network with two subnets and with one virtual machine on each subnet. バック サブネットは、パブリック インターネットから切り離します。The back subnet is cut off from the public Internet. 外部に公開されたフロント サブネットは、インターネットからの受信方向の HTTP トラフィックを受け入れます。The front-facing subnet accepts inbound HTTP traffic from the Internet. 仮想ネットワーク内の 2 つの仮想マシンは、既定のネットワーク セキュリティ グループの規則に従って互いに通信を行います。Both virtual machines in the virtual network communicate with each other through the default network security group rules.

サンプルで使われているクラスClass used in sample メモNotes
ネットワークNetwork azure.networks().define()...create() から作成された仮想ネットワークのローカル オブジェクトを表します。Local object representation of the virtual network created from azure.networks().define()...create() . update()...apply() という fluent チェーンを使用して、既存の仮想ネットワークを更新します。Use the update()...apply() fluent chain to update an existing virtual network.
サブネットSubnet 仮想ネットワーク上のサブネットは、そのネットワークを定義または更新するときに、withSubnet() を使って作成します。Create subnets on the virtual network when defining or updating the network using withSubnet(). サブネットのオブジェクト表現は、Network.subnets().get() または Network.subnets().entrySet() から取得します。Get object representations of a subnet from Network.subnets().get() or Network.subnets().entrySet(). これらのオブジェクトには、サブネットのプロパティを照会するためのメソッドが用意されています。These objects have methods to query subnet properties.
NetworkSecurityGroupNetworkSecurityGroup azure.networkSecurityGroups().define()...create() という fluent チェーンを使って作成され、仮想ネットワーク内のサブネットを更新または作成するときにサブネットに適用されます。Created using the azure.networkSecurityGroups().define()...create() fluent chain and then applied to subnets through the updating or creating subnets in a virtual network.

次の手順Next steps

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