Apache jcloudsとはなんなのか?
今回は、Apache jclouds。今回も以下のツールを使って対象プロジェクトを決めました!
※ 本企画に関する記事の目的は、それぞれのプロジェクトを本格的に深ぼるのではなく、プロジェクト名⇆どんな内容かをパッと思い出せるようにすることを目指します!
※ とはいえ深ぼってみたいプロジェクトがあればどんどん複数連載になると思います。
Apache jcloudsとは?
公式サイトによると、
- Java向けのマルチクラウドツールキット
- クラウド特有の機能を完全に利用しつつ、クラウドを横断したポータブルなアプリケーションの構築ができる
ツールであるとのことです。
対応クラウド一覧を見るとGoogle CloudをはじめAWSやAzureなどがあり、幅広く対応していると思われます。
また、こちらにサンプルが多数提供されているようなので、ご利用を検討される場合はこちらも参照するといいと思います。
なぜjcloudsを利用するか?
公式ページではなぜjcloudsを使うべきか一覧にまとめています。一つずつ確認してみましょう
シンプルなインターフェース
RESTライクなAPIやWebサービスなく利用が可能になるようです。新しいオブジェクトタイプを作成する代わりに、jcloudsではmapなどのプログラミングモデルが精通しているコンセプトを再利用するようです。
ランタイムのポータビリティ
jcloudsのドライバーはGoogle App Engineのような制限がされた環境でも運用することを可能にします。ほとんど依存する要素がないため、開発したアプリを破壊する可能性も少ないとのこと。
webの複雑性の取り扱い
jcloudsは、従来のネットワークベースのコンピューティングによって発生する一時的な障害やリダイレクトなどの問題を処理します。
ユニットテストについて
複雑なモックを利用したりリモートコネクションのボトルネックなしにユニットテストを記述できるようです。クラウドエンドポイントに対するテストを作成するのは一般的に難易度が高いですが、jcloudsはネットワークコネクションの作成なしにクラウドをシミュレートしてサブコネクションを提供することで、ユニットテストを容易にするようです。
パフォーマンス
ユーザのパフォーマンスニーズに合わせて設定をカスタマイズできます。jcloudsは非同期コマンドやトンネル可能なHTTP、日付そして暗号化されたモジュールを提供します。
ロケーション
jcloudsは位置情報に基づいた抽象化を提供します。クラウドがどの国または地域で実行されているかを示すISO-3166コードを取得できます。
クオリティ
どのプロバイダーもそれぞれのリリース前にライブシナリオについてテストできます。
コアコンセプト
以下のページにてコアコンセプトがまとめられています。4つのコアコンセプトがあり、それぞれ要約します。
ビュー
ビューは、特定のベンダーに縛られることなくクラウドサービスを利用するコードを記述できるように設計された移植性の高い抽象化です。JDBCを例に挙げると、特定の種類のデータベースに直接コードを記述するのではなく、汎用的なデータベースリクエストを発行し、JDBC仕様とドライバによって、特定の種類のデータベース向けのコマンドやステートメントに変換することができます。
現時点では以下のビューをサポートしているようです
- BlobStore
- ComputeService
- LoadBalancerService
API
jcloudsのAPI は、特定のクラウドサービスに対して実行可能な実際の呼び出し(多くの場合HTTPリクエストですが、必ずしもそうとは限りません)を記述します。EC2 コンピューティングAPIやS3ストレージAPIなどの一般的なAPIの場合、そのAPIをサポートするクラウドサービスを提供するベンダーが複数存在することがあります。例えば、EC2はAmazonやOpenStackなどによってサポートされています。
ベンダーは、複数の地理的な場所でAPIをサポートしている場合もあります。例えば、Rackspaceの Cloud Servers APIは、米国と英国の両方で利用可能です。
プロバイダー
jcloudsでのプロバイダーは、1つ以上のAPIをサポートする特定のベンダーのクラウドサービスを表します。Amazonはaws-ec2プロバイダーを通じてEC2を提供しており、RackspaceのCloud Serversインスタンスはrackspace-cloudservers-ukプロバイダーを通じて利用できます。
jcloudsプロバイダーは、エンドポイントURLなどのサービス固有のインスタンス化と適切なAPIを組み合わせたものであり、場合によっては、ベンダーがAPIを超えた追加機能を提供することもあります。AWS EC2 は、EC2 APIを実装する他のプロバイダーでは提供されていないさまざまな呼び出しとオプションをサポートしています。
コンテキスト
コンテキストは、特定のプロバイダーへの特定の接続を表します。
一度ContextBuilderを介してコンテキストを作成し、特定のクラウドサービスに接続すると、そのプロバイダーがサポートする任意のビューを取得するか、APIに直接アクセスする、またはプロバイダーレベルにアクセスすることができます。
コンテキストの作成はコストの高い操作なので、アプリケーションの起動時に資格情報とターゲットクラウドごとに1つのコンテキストを作成して、終了時に閉じることが勧められています。コンテキストはスレッドセーフであるため、アプリケーション全体で共有できます。
また、不要になったコンテキストは、関連するリソースを解放するために閉じることが重要です。
まとめ
今回はApache jcloudsについて調べてみました。マルチクラウド向けのポータブルサービスを構築するためのツールということで、クラウドサービスの展開を考えている方にはうってつけのプロジェクトだと思いました。Java向けということでJavaを使ったことがない私ではまだ使ってみた感想などは共有できないですが、ぜひこの記事を読んで気になったJavaユーザの方は試してみてこちらのブログのコメントに何かいただければ嬉しいです。
Discussion