SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Axis2でクラウド用のWebサービスクライアントを作成する

Amazon EC2のWSDL、Axis2クライアント側セキュリティの使用方法

公開鍵と証明書のセットアップ

 クライアント作成の次のステップは、公開鍵と証明書のセットアップです。そのためには、まずEC2アカウントが必要です。持っていない場合は、アカウントを作成し、EC2ツールを使用して公開鍵と証明書を生成します。これら2つの鍵の作成については、最後の「参考資料」セクションを参照ください。

クライアントの作成

 くどいようですが、Amazon EC2を使用するにはWSセキュリティを使用する必要があり、クライアントに必要なセキュリティをセットアップする必要があります。そのために行わなければならない重要なことの1つは、必要なモジュールをクラスパスに追加することです。この例では、Axis2のセキュリティモジュールをクラスパスに置く必要があります。そうしないと、これから作成するコードは動きません。そこで、Axis2のセキュリティモジュール(Apache Rampart)をダウンロードして、それをクラスパスに配置します。

 スタブのインスタンスを作成するにはいくつかの方法があり、どれを使用しても呼び出しに対する直接的な影響はありません。ここでは、次に示すように、クライアントのコンストラクタの内部で、スタブのインスタンスを作成します。

ConfigurationContext configCtx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);

Create an instance of the stub.

              stub = new AmazonEC2Stub(configCtx);

 最初に構成コンテキストを作成します。大抵の場合、これは必要ありません。ただし、状況によってはAxis2のカスタム構成ファイルと独自のリポジトリを使用してConfigurationContextを作成する必要があり、その場合にはこのステップが必要です。

 次に、必要なパラメータを初期化します。例えば、キーストアに格納したり、セキュリティハンドラを設定したりします。必要なコードを次に示します。前に説明したように、この処理には付属するutils.jarを使用します。このライブラリファイルには、必要なメソッドとクラスがすべて含まれています。

ec2PrivateKey = EC2Utils.pem2der(ec2PrivateKey);
ec2Cert = EC2Utils.pem2der(ec2Cert);
File jks = new File(EC2_JKS);
if (jks.exists()) {
     jks.delete();
}
SecurityHandler.password = EC2_KS_PASSWORD;
EC2Utils.doImport(EC2_JKS, ec2PrivateKey, ec2Cert, EC2_USER, EC2_KS_PASSWORD);

 クライアントのセットアップに必要なことはすべて済んだので、Amazon EC2を呼び出すコードの作成に取り掛かりましょう。スタブの中の1つのメソッド(RunInstances)についてだけ説明します。1つのメソッドの使い方が分かれば、他のメソッドも同様の手順で使用できます。

 Amazonには複数のインスタンスタイプがあるので、それに対応するためのコードを作成する必要があります。次に示すコードがそれです。

if (instanceType == null) {
    instanceType = InstanceType.SMALL;
}

 EC2でインスタンスを開始するには、必要な要求パラメータを渡す必要があります。次に示すコードセグメントでは、この処理を行っています。コードは非常に簡単なので、逐一説明するほどのこともありません。

RunInstances req = new RunInstances();
RunInstancesType params = new RunInstancesType();
params.setInstanceType(instanceType.getType());
params.setImageId(amiID);
params.setKeyName(keyName);
params.setMaxCount(numberOfInstances);
params.setMinCount(numberOfInstances);

if (groupName == null) {
    groupName = "default";
}
GroupSetType gst = new GroupSetType();
GroupItemType git = new GroupItemType();
git.setGroupId(groupName);
gst.setItem(new GroupItemType[]{git});
params.setGroupSet(gst);

req.setRunInstances(params);

 呼び出しごとにセキュリティパラメータを構成する必要があり、次に示すのがそのコードです。このコードでは、メソッドの正しいセキュリティポリシーをセットアップしています。

enableSecurity("RunInstances");

 必要なものはすべてそろったので、サービスを呼び出しましょう。サービスを呼び出すには次のようなコードを使います。

RunInstancesResponse respone = stub.RunInstances(req);

 そして応答を処理します。

RunInstancesResponseType resType = respone.getRunInstancesResponse();
RunningInstancesSetType instances = resType.getInstancesSet();
RunningInstancesItemType[] items = instances.getItem();
ArrayList instanceIds = new ArrayList();
for (int i = 0; i < items.length; i++) {
    RunningInstancesItemType item = items[i];
    instanceIds.add(item.getInstanceId());
    System.out.println("InstanceID " + item.getInstanceId());
}

 RunInstancesを呼び出す完全なクライアントについては、下記の「参考資料」セクションを参照ください。このコードを実行すると、EC2のインスタンスが自動的に開始します。前に説明したように、Amazon EC2のアカウントを作成し、さらに鍵ファイルとAmazon Machine Image(AMI)を作成する必要があります。これらがない場合は、この記事の説明に従って進めるのは難しいかもしれません。ただし、考え方は同じなので、他のサービスを呼び出す場合も同じ手順を使用できます。

 クライアントを実行するには、公開鍵の場所、証明書の場所、そしてAMIの名前を渡す必要があります。下記の「参考資料」セクションでサンプルのクライアントを紹介しているので、それを編集して実行してください。

まとめ

 この記事では、Axis2ツールを使用してクライアント側コードを生成し、生成されたクライアントを使用してサービスを呼び出す方法を説明しました。近頃最もよく使用されているクラウドAPIの1つはAmazon EC2なので、サービスの生成と呼び出しにはAmazon EC2のWSDLを使用しました。さらに、Axis2のクライアント側セキュリティと、その使用方法を説明しました。クライアントを完成させれば、スタブの他のメソッドを使用できます。

参考資料

  1. utils.jar
  2. AWSClient.java
  3. SecurityHandler.java
  4. Amazon Elastic Compute Cloud

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Deepal Jayasinghe(Deepal Jayasinghe)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4053 2009/07/01 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー