Java 用 Azure 管理ライブラリの利用開始

このポストは、9 月 15 日に投稿された Getting Started with Azure Management Libraries for Java の翻訳です。

Microsoft Azure SDK for Java のバージョン 0.5.0 のリリースに併せて、Java SDK でのサービス管理機能が新たにサポートされました。サービス管理に関しては既に Azure SDK for .NET (英語)Azure SDK for Node.js (英語) でリッチな機能が提供されていますが、Java SDK としては新機能となります。.NET や Node.js の SDK およびストレージ チームの Java SDK (英語) と同様に、サービス管理用の Java SDK も GitHub のオープン ソース (英語) コードです。この記事では、Java 用の管理ライブラリを紹介すると共に、Eclipse プロジェクトを作成してお客様自身の Azure サブスクリプションを拡張し、サブスクリプションやリソースの作成および管理に使用する手順について説明します。

Java 用管理ライブラリの概要

このライブラリは、簡単に言うと、Azure のリソースのセットアップ、切断、プロビジョニング、日常的な管理タスクを Java アプリケーションで自動化するためのものです。開発チームの目標は非常に明確で、開発者が Azure サブスクリプションに対して管理ポータルから行う必要のある操作を、コードで実行できるようにするというものでした。このライブラリは、Azure のリソース管理の自動化を実現します (実際に、マイクロソフトのライブラリによって PowerShell および XPlat CLI (英語) のエクスペリエンスが実現されています)。この管理ライブラリを使用すると、次のようなことが可能です。

  • WebSites、SQL Database、Cloud Services、Scheduler のジョブ コレクション、Virtual Machines、Storage などのリソースの作成、削除、設定の更新
  • WebSites のサービスの開始と停止
  • Storage アカウントへのデータベースのバックアップ
  • Virtual Machines の作成の自動化

Java 用管理ライブラリは Maven で使用可能であるため、現行のほとんどの Java 開発ツールで簡単に使用できます。この記事では、Eclipse を使用して開発を行う場合について説明します。

Eclipse および Maven でプロジェクトを作成する

ここからは、Eclipse で Maven と Azure ライブラリを使用して開発を行った経験があまりない、またはまったくない方に向けて、ゼロから開発を進める方法について非常に基本的なレベルの説明を行います。Java、Maven、Eclipse を使用した開発の経験がある方には、この内容は簡単すぎるかもしれません。私は長い間 .NET で開発を行っていたので Java にはそれほど慣れていませんが、Azure SDK の拡張機能を使用するというきっかけのおかげでこの言語に再度触れる機会が得られました。このため、私はこの分野の入門用記事の執筆者として適役でした。

それでは、最初にチュートリアルを収集するためのワークスペースを作成します。次の場所にフォルダーを新規作成します。

ワークスペースの作成が完了し、Eclipse IDE をお好みに応じてセットアップしたら、次に Maven のプロジェクトを新規作成します。

archetype プラグインを選択する必要はないため、この手順は省略して「簡単なプロジェクト」の手法で進めます。

これから Eclipse と Maven を使用するプロジェクトを実際に作成しますが (Azure Maven パッケージを取得可能であれば、必要に応じてあらゆる種類のプロジェクトを作成できます)、リポジトリに発行したときに自分のパッケージがどのような処理を行っているかをユーザーが確認できるように、自分のアプリの情報を提供する必要があります。ここではいくつかの基本情報を入力し、デモ用のコードであることをユーザーに示します。

これで、Maven パッケージをサポートしている Eclipse プロジェクトのセットアップが完了しました。次に、Azure パッケージを検索してインストールします。

Maven を使用して管理ライブラリをインストールする

pom.xml をクリックすると、プロジェクトに既にインストールされているパッケージのリストが表示されます。今回は新規プロジェクトであるため、ここには何も表示されません。[Add] ボタンをクリックして、プロジェクトに Maven パッケージを追加します。

これは Maven と Eclipse に馴染みがある方には当然のことと思われるかも知れませんが、Maven に存在する自分で名前を付けたパッケージを検索してもここでは見つからず、自分自身のワークスペースでのみプロジェクトを検索できました。

オンラインのリポジトリでパッケージを検索する際に発生するこの不具合は、ローカルの開発ワークステーションに存在するメインの Maven リポジトリのインデックスを再構築すると修正されます。これを行うには、Eclipse のインスタンスが検索を実行できるように、Maven リポジトリのリストを検索する必要があります。Eclipse で [Maven Repositories] ビューを開きます。

[Maven Repositories] ビューが開いたら、リストからメインの Maven リポジトリを選択します。このアイテムのコンテキスト メニューで [Rebuild Index] をクリックして、ローカルのインデックスを構築します。Maven には検索対象およびダウンロード対象のパッケージが多数存在するため、この処理には数分程度の時間がかかります。

インデックスの再構築が完了したら、メインの Maven リポジトリで Microsoft Azure のパッケージが表示されるようになります。

これで、Azure の Maven パッケージを正常に検索できるようになります。探していたパッケージを確認できたので、次の手順に進みます。基本管理パッケージを選択します。

これで、Azure の基本管理パッケージが依存関係として選択されました。

この後は、新しい Java クラス ファイルをプロジェクトに追加します。最初に作成するコードは、Azure API を呼び出して、コードをデプロイ可能なリージョンのリストを取得し、そのリージョン名をコンソールに出力するだけの、簡単なものです。大したコードではありませんが、この手順を実施することによって、自作のコードを Azure API に適切に接続できることを確認します。

Azure API にアクセスする Java コードを作成する

ここまでの手順で Azure SDK を参照できるようになったので、次にコードを作成します。まず、新しい Java クラス ファイルを自分のプロジェクトに追加します。

新しいクラスのダイアログが開いたら、[static void main] チェックボックスをオンにして、自分の Java クラスに main メソッドを追加します。これにより、作成するアプリケーションにエントリ ポイントが追加されます (繰り返しになりますが、これは非常に簡単でわかりやすく、適切に Azure API の認証および接続が行われていることが確実に把握できます)。

下記の import 文をファイルに追加し、必要な機能で使用する適切な名前空間をすべて取得します。取得した名前空間を使用すると、管理ライブラリのクラスへのアクセスが可能になり、Azure API のエンドポイントを使用できるようになります。

 import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import javax.print.event.PrintJobAttributeEvent;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.microsoft.windowsazure.core.utils.KeyStoreType;
import com.microsoft.windowsazure.exception.ServiceException;
import com.microsoft.windowsazure.management.*;
import com.microsoft.windowsazure.Configuration;
import com.microsoft.windowsazure.management.configuration.ManagementConfiguration;
import com.microsoft.windowsazure.management.models.LocationsListResponse;
import com.microsoft.windowsazure.management.models.LocationsListResponse.Location;

これで、名前空間がすべて適切に追加されました。次は、API 経由で管理ライブラリの認証を受ける際に使用する、サブスクリプションの管理証明書をセットアップします。

証明書を使用して Azure API の認証を受ける

Java SDK を使用すると、非常に簡単に API を呼び出すことができます。自分のサブスクリプションに対して API を使用するには、いくつかの情報を提供する必要があります。その API に提供する必要がある属性の 1 つが、管理証明書です。下に示すポータルのスクリーンショットでは、既に CER ファイルが Azure サブスクリプションにアップロードされています。

また、ローカルの開発ワークステーションでクライアントの証明書として使用される PFX も取得済みです。PFX ファイルは、Java が証明書を認証するときに使用できるように、JKS ファイルに変換する必要があります。JDK がインストールされているコンピューターで次のコマンドを実行して、この変換を行います。

 c:\java\bin\keytool.exe -importkeystore -srckeystore c:\certificates\AzureJavaDemo.pfx -destkeystore c:\certificates\AzureJavaDemo.jks -srcstoretype pkcs12 -deststoretype JKS

JKS ファイルをデスクトップに置いた後は、このコード内のファイル パスを使用できるようになります。このパスは、管理ライブラリから Azure API に接続する際に使用します。下記は、その定型コードを示したものです。コメント箇所は、私が作成した JKS ファイル固有の部分を示しています。この部分は実際に使用する前に他の変数に変更します。

 public class Program {
  static String uri = "https://management.core.windows.net/";
  static String subscriptionId = "";
  static String keyStoreLocation = "c:\\certificates\\AzureJavaDemo.jks";
  static String keyStorePassword = "my-cert-password";

  public static void main(String[] args) 
    throws IOException, URISyntaxException, ServiceException, ParserConfigurationException, SAXException {
    Configuration config = ManagementConfiguration.configure(
      new URI(uri), 
        subscriptionId,
        keyStoreLocation, // the file path to the JKS
        keyStorePassword, // the password for the JKS
        KeyStoreType.jks // flags that I'm using a JKS keystore
    );
  }
}

これで、Java SDK で管理証明書を使用して Azure API の認証を行えるようになりました。現在、開発チームでは今後のリリースで Java SDK から Active Directory 認証を使用できるようにする準備を Azure Active Directory チームと共同で進めています。Java SDK のリリース 0.6.0 では、認証メソッドに管理証明書が使用される予定です。

Azure API を呼び出してリージョンのリストを取得する

次に、コード内で subscriptionId フィールドの値を設定するコードを追加し、実際に Azure への API を呼び出して地理的なリージョンのリストを取得するための Java コードを作成します。また、このリストを取得した後に、リージョンの名前をコンソールに出力します。このサンプルは、Azure Management API に対する認証を正常に行い、なんらかの処理を実行する様子を示すことを目的としています。

 public class Program {
  static String uri = "https://management.core.windows.net/";
  static String subscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
  static String keyStoreLocation = "c:\\certificates\\AzureJavaDemo.jks";
  static String keyStorePassword = "my-cert-password";

  public static void main(String[] args) throws IOException, URISyntaxException, ServiceException, ParserConfigurationException, SAXException {
    Configuration config = ManagementConfiguration.configure(
      new URI(uri), 
      subscriptionId,
      keyStoreLocation, // the file path to the JKS
      keyStorePassword, // the password for the JKS
      KeyStoreType.jks // flags that I'm using a JKS keystore
    );

    // create a management client to call the API
    ManagementClient client = ManagementService.create(config);

    // get the list of regions
    LocationsListResponse response = client.getLocationsOperations().list();
    ArrayList locations = response.getLocations();

    // write them out
    for( int i=0; i<locations.size(); i++){
      System.out.println(locations.get(i).getDisplayName());
    }
  }
}

Eclipse でコードをデバッグすると、本来の出力をシミュレーションしたものが得られるため、すべての処理が適切に動作しているかどうか、および設計どおりに機能しているかどうかを確認できます。この手順で、自分のサブスクリプションから JKS 形式に変換済みの管理証明書を正常に取得し、アプリケーションのランタイムに読み込んで、API を呼び出すときにこの管理証明書が使用されたことが証明されました。

まとめと次のステップ

今回の記事では、Maven から Java SDK を取得し、Azure の API の認証に使用して、簡単な処理を行うまでの手順を簡単に実施できることをご説明しました。SDK では、リージョンのリストを取得する以外にもさまざまなことが可能で、Cloud Services を作成して Eclipse の Java 用ツールキットでコードをデプロイしたり、Virtual Machines を開発ワークステーションや自分で保守を行うサーバーとして使用したり、自作の Java コードを実行する WebSites を作成したり、Storage アカウントにすべてのファイルやデータなどを格納したりできます。今後、他の Java SDK のオプションについて調査した結果をいくつか Azure ブログで発表する予定ですので、こちらにもぜひご期待ください。SDK リリース 0.6.0 では、Azure サービスの自動化とプロビジョニングに役立つ新機能が大量に導入されます。

Storage SDK for Java や Azure のホーム ページで使用可能な他の SDK も含めて、Azure で Java を開発する機会が今後さらに増加していくことは間違いありません。ぜひこれらの新しいツールや SDK をお試しになり、ご意見をお聞かせください。

皆様の開発にお役立ていただけますと幸いです。