“使用”より“構築”で学ぶオープンPaaS「OpenShift」:DevOps時代のJavaプログラマのためのオープンクラウド入門(1)(5/5 ページ)
オープンなクラウドで重要性を増すJava。DevOps時代のJavaプログラマはアプリケーション開発者(Dev)もデプロイや運用(Ops)面におけるクラウド/インフラ技術への幅広い理解が必要となる。本連載では、さまざまなオープンクラウド技術を紹介していく。初回は、オープンソースのPaaSであるOpenShiftを紹介。どんな技術を使ってPaaSが実装されているのかを理解しよう
OpenShiftの設定
ワークベンチには[JBoss Central]が表示されます。この中にOpenShiftアプリケーションを作成するためのメニューがあるので、これをクリックします。
接続画面が表示されます。[Password]には「admin」と入れて[Next]をクリックします。[Secure Storage]の画面でも[Password]と[Confirm password]へ「admin」と入れて[OK]をクリックします。providing additional informationを追加するか聞かれますが、これは[No]をクリックします。
[New OpenShift Application]画面では、[Name]へ「hellojboss」、[Type]へ「jbossas-7」、[Gear profile]へ「small」を指定し、[Embeddable Cartridges]の「mysql-5.1」をチェックして[Next]をクリックします。後は画面に従って進み、最後に[Finish]をクリックします。
これで、hellojbossのWebアプリが作成されます。「http://hellojboss-atmark.example.com」をWebブラウザで開くと、「Welcome To OpenShift, JBossAS7 Cartridge」の画面が表示されます。
openshift-java-clientを使ってみよう
JBoss Toolsに含まれるOpenShiftプラグインは、「openshift-java-client」を使っています。これを使うと、OpenShiftのREST APIを利用できるJavaアプリを簡単に実装できます。GitHubで公開されているので、使ってみましょう。
$ cd ~/workspace $ git clone https://github.com/openshift/openshift-java-client.git $ cd openshift-java-client
パッケージを作成します。これにより、targetディレクトリにJARファイルが生成されます。
$ mvn -Dmaven.test.skip=true package
このパッケージについて、「mvn dependency:tree」コマンドを使って、利用しているJARファイルの依存関係を確認しましょう。
$ mvn dependency:tree 略 [INFO] com.openshift:openshift-java-client:jar:2.0.3-SNAPSHOT [INFO] +- org.jboss:jboss-dmr:jar:1.0.0.Final:compile [INFO] +- com.jcraft:jsch:jar:0.1.44-1:compile [INFO] +- junit:junit:jar:4.8.2:test [INFO] +- org.mockito:mockito-core:jar:1.9.0-rc1:test [INFO] | +- org.hamcrest:hamcrest-core:jar:1.1:test [INFO] | \- org.objenesis:objenesis:jar:1.0:test [INFO] +- org.easytesting:fest-assert:jar:1.4:test [INFO] | \- org.easytesting:fest-util:jar:1.1.6:test [INFO] +- commons-io:commons-io:jar:2.1:test [INFO] +- org.slf4j:slf4j-api:jar:1.6.4:compile [INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.4:compile [INFO] \- log4j:log4j:jar:1.2.16:compile 略
Eclipse上で、新規プロジェクトとしてJavaプロジェクトを作成します。ここでは、「simple_rhc」というプロジェクト名とします。「openshift-java-client-2.0.3-SNAPSHOT.jar」と、これが依存するJARファイルを「lib」ディレクトリへ用意します。依存関係は先ほど確認したので、「$HOME/.m2」にある必要なライブラリを次のようにしてコピーします。
$ mkdir ~/workspace/eclipse/simple_rhc/lib $ cd ~/workspace/eclipse/simple_rhc/lib $ cp $HOME/workspace/openshift-java-client/target/openshift-java-client-2.0.3-SNAPSHOT.jar . $ cp $HOME/.m2/repository/org/jboss/jboss-dmr/1.0.0.Final/jboss-dmr-1.0.0.Final.jar . $ cp $HOME/.m2/repository/com/jcraft/jsch/0.1.44-1/jsch-0.1.44-1.jar . $ cp $HOME/.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar . $ cp $HOME/.m2/repository/org/mockito/mockito-core/1.9.0-rc1/mockito-core-1.9.0-rc1.jar . $ cp $HOME/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar . $ cp $HOME/.m2/repository/org/objenesis/objenesis/1.0/objenesis-1.0.jar . $ cp $HOME/.m2/repository/org/easytesting/fest-assert/1.4/fest-assert-1.4.jar . $ cp $HOME/.m2/repository/org/easytesting/fest-util/1.1.6/fest-util-1.1.6.jar . $ cp $HOME/.m2/repository/commons-io/commons-io/2.1/commons-io-2.1.jar . $ cp $HOME/.m2/repository/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar . $ cp $HOME/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar . $ cp $HOME/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar .
これで、openshift-java-clientを使える準備ができました。
Eclipseで、simple_rhcをリフレッシュしてライブラリファイルを反映します。ビルドパスへ、これらのjarファイルをすべて追加したら、「jp.example」パッケージを作成します。最後に、次のRhc.javaを作成します。
package jp.example; import com.openshift.client.IApplication; import com.openshift.client.IDomain; import com.openshift.client.IEmbeddedCartridge; import com.openshift.client.IOpenShiftConnection; import com.openshift.client.IUser; import com.openshift.client.OpenShiftConnectionFactory; import com.openshift.client.configuration.OpenShiftConfiguration; public class Rhc { public static void main(String[] argv) throws Exception { String applicationId = "simple-rhc"; String username = "admin"; String password = "admin"; IOpenShiftConnection connection = new OpenShiftConnectionFactory() .getConnection(applicationId, username, password, new OpenShiftConfiguration().getLibraServer()); IUser user = connection.getUser(); System.out.println("User Info"); IDomain domain = user.getDefaultDomain(); if (domain != null) { System.out.println("\tdomain.getId():\t" + domain.getId()); System.out.println("\tuser.getRhlogin:\t" + user.getRhlogin()); } System.out.println(""); System.out.println("Application Info"); if (domain != null) { for (IApplication app : domain.getApplications()) { System.out.println("\tapp.getName():\t" + app.getName()); System.out.println("\t\tapp.getCartridge().getName():\t" + app.getCartridge().getName()); System.out.println("\t\tapp.getCreationTime():\t" + app.getCreationTime()); System.out.println("\t\tapp.getUUID():\t\t" + app.getUUID()); System.out.println("\t\tapp.getGitUrl():\t" + app.getGitUrl()); System.out.println("\t\tapp.getApplicationUrl():\t" + app.getApplicationUrl() + "\n"); System.out.println("\t\t Embedded:"); for (IEmbeddedCartridge cartridge : app.getEmbeddedCartridges()) { System.out.println("\t\t\t" + cartridge.getName() + " - " + cartridge.getUrl()); } System.out.println(""); } } } }
Rhcクラスについては、openshift-java-clientライブラリの機能の一部を確認しています。使用しているクラス名から大体の機能は分かるはずです。IOpenShiftConnection型のconnection変数を使ってOpenShiftへ接続し、ユーザー情報とカートリッジの情報を取得しています。
EclipseからJavaアプリケーションとして実行すると、結果は次のようになります。
log4j:WARN No appenders could be found for logger (com.openshift.internal.client.RestService). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. User Info domain.getId(): atmark user.getRhlogin: admin Application Info app.getName(): hello app.getCartridge().getName(): php-5.3 app.getCreationTime(): Mon Feb 18 21:21:26 JST 2013 app.getUUID(): 80960c1fac53477a9e4597f948c8a7e3 app.getGitUrl(): ssh://80960c1fac53477a9e4597f948c8a7e3@hello-atmark.example.com/~/git/hello.git/ app.getApplicationUrl(): http://hello-atmark.example.com/ Embedded: php-5.3 - null app.getName(): hellojboss app.getCartridge().getName(): jbossas-7 app.getCreationTime(): Mon Feb 18 21:40:50 JST 2013 app.getUUID(): 419e974cc53640f783fbd3048aedfd2b app.getGitUrl(): ssh://419e974cc53640f783fbd3048aedfd2b@hellojboss-atmark.example.com/~/git/hellojboss.git/ app.getApplicationUrl(): http://hellojboss-atmark.example.com/ Embedded: jbossas-7 - null mysql-5.1 - mysql://127.0.250.129:3306/
時刻やハッシュ値は環境によって変わります。openshift-java-clientを使って、OpenShiftのアプリ情報を取得できていることが分かります。
使うだけではなく、調査することで仕組みを知ろう
以上、簡単ですが、OpenShiftについて解説しました。OpenShiftのサービスを使ってみるだけでも楽しいのですが、こうやってOpenShift Originを用意して、いろいろと調査してみると、どんな技術を使ってPaaSが実装されているのかを理解できます。
今回紹介した内容は、ほんの一部ですが、皆さんもいろいろと調べて楽しんでみてください。
Copyright © ITmedia, Inc. All Rights Reserved.