公開鍵と証明書のセットアップ
クライアント作成の次のステップは、公開鍵と証明書のセットアップです。そのためには、まず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のクライアント側セキュリティと、その使用方法を説明しました。クライアントを完成させれば、スタブの他のメソッドを使用できます。
