以前に Windows Azure SDK for .NET の Management Library を利用して Webサイト を動的に作成してみる を記載したが、今回は Java の SDK で Management API を操作する。
証明書の準備
まず、 C:\Program Files (x86)\Windows Kits\8.1\bin\x86 以下に存在する makecert コマンドを利用して cer ファイルを作成する。以下のコマンドを利用したので、ファイル名等は適宜変更してほしい。
>makecert -r -pe -a sha1 -n "CN=For Java SDK Certification" -ss my -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 ManagementJavaSDK.cer
次に、作成した *.cer ファイルをダブルクリックし、証明書のエクスポートを実施して *.pfx ファイル(今回は ManagementJavaSDK.pfx )を作成する。
更に、以下のコマンドにて Java で利用する keystore の *.jks ファイル(今回は ManagementJavaSDK.jks )を作成する。
>keytool -importkeystore -srckeystore c:\Temp\ManagementJavaSDK.pfx -dest keystore ManagementJavaSDK.jks -srcstoretype pkcs12 -deststoretype JKS
最後に、作成した *.cer ファイルを管理ポータルに以下の様にアップロードしておく(設定 - 管理証明書 以下に配置する点に注意)。
Java アプリケーションの作成
こちらはシンプルに Maven プロジェクトを作成すれば対応可能だ。それぞれコードを記載する。
- pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>HelloAzureSDK</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-management-network</artifactId> <version>0.7.0</version> </dependency> </dependencies> </project>
- Main.java
package com.mycompany; import java.io.IOException; import java.net.InetAddress; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import com.microsoft.windowsazure.Configuration; import com.microsoft.windowsazure.core.utils.KeyStoreType; import com.microsoft.windowsazure.exception.ServiceException; import com.microsoft.windowsazure.management.configuration.ManagementConfiguration; import com.microsoft.windowsazure.management.network.NetworkManagementClient; import com.microsoft.windowsazure.management.network.NetworkManagementService; import com.microsoft.windowsazure.management.network.StaticIPOperations; public class Main { public static void main(String args[]) throws IOException, URISyntaxException, ServiceException, ParserConfigurationException, SAXException { // キーストア等々もろもろ String subscriptionId = "120a0546-b790-4979-84da-09d671c0c376"; String keyStorePath = "C:\\Temp\\ManagementJavaSDK.jks"; String keyStorePassword = "P@ssw0rd00"; Configuration config = ManagementConfiguration.configure(null, subscriptionId, // keyStorePath, // keyStorePassword, // KeyStoreType.fromString("jks")); NetworkManagementClient networkManagementClient = NetworkManagementService .create(config); // 仮想ネットワーク内の静的IP利用チェック StaticIPOperations so = networkManagementClient .getStaticIPsOperations(); List<String> ipList = new ArrayList<String>(); ipList.add("10.0.0.21"); // 利用可能な IP ipList.add("10.20.0.21"); // サブネット範囲外の IP String vnetName = "vnet-alwayson"; for (String ip : ipList) { try { boolean isAvailable = so.check(vnetName, InetAddress.getByName(ip)).isAvailable(); System.out.println(ip + " is " + isAvailable + " on " + vnetName); } catch (ServiceException ex) { System.out.println(ip + " is false on " + vnetName); ex.printStackTrace(); } } } }
上記の実行結果は以下な感じ。
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 10.0.0.1 is false on vnet-alwayson 10.20.0.21 is false on vnet-alwayson com.microsoft.windowsazure.exception.ServiceException: BadRequest: The address 10.20.0.21 is not contained in any of the subnets in the virtual network. at com.microsoft.windowsazure.exception.ServiceException.createFromXml(ServiceException.java:216) at com.microsoft.windowsazure.management.network.StaticIPOperationsImpl.check(StaticIPOperationsImpl.java:165) at com.mycompany.Main.main(Main.java:52)