Cloud Foundry 三日坊主1日目

これは Cloud Foundry Advent Calendar 2017 7日目の記事です。ここまで、最新のコンテナー技術の使い分け、昔々の Cloud Foundry v1 の話から、シングルサインオンまで、さまざまな話題がありました。この記事は、Cloud Foundry を三日坊主に楽しもうという企画です。もちろん3日間で終わる必要はなく、ぜひとも使い続けていきましょう。また、しばらく使い続けるうちに楽しさをより実感できるようになっていくこともあるでしょう。


今回はすぐに利用できる Cloud Foundry のクラウドサービスである Pivotal Web Services (PWS) を使います。このサービスは、Cloud Foundry の主要な開発元である Pivotal が提供しています。Pivotal は、ソフトウェア製品である Pivotal Cloud Foundry も提供しています。

Pivotal Web Services

執筆時点では、無料でオンラインサインアップでき、$87 のトライアルクレジットが付いています。トライアルだけならばクレジットカードも必要ありません。画面の記載に従って必要事項を入力し、アカウントを登録します。

まず公式ドキュメントに沿って、組織を作成します。既定のスペースとして「development」が作成されているので、今回はそのまま使用します。

Pivotal Web Services console

続けて cf クライアントをインストールします。cf login コマンドを実行して、PWS にログインします。これでもうアプリケーションを配備する準備ができました。


それでは、公式ドキュメントに沿って Java の Spring アプリケーションを配備していきます。ドキュメントにある例のとおり pong_matcher_spring を使用して進めてみましょう。サンプルアプリケーションを使用する場合、枠線に囲われている記載を注意して読む必要があります。

まず、アプリケーションから利用する MySQL データベースサービスを作成します。cf create-service cleardb spark mysql コマンドにより、ClearDB という MySQL サービスを利用します。ClearDB の spark プランは、ディスク容量 5MB しかありませんが、お手軽に無料で利用できます。

続けて、配備するアプリケーションを設定します。サンプルアプリケーションでは事前にもろもろ設定されているので、そのまま進めていきます。公式ドキュメントでは、なぜかここでログインする手順になっているのですが、ログインしていないと手前の手順でデータベースサービスを作成できないはずなので謎です。

アプリケーションを配備するために、mvn package コマンドを実行してアプリケーションをビルドします。なお、Maven をインストールするために brew install コマンドを実行するよう書かれていますが、お使いの環境に合わせて Maven をインストールできていれば問題ありません。Java をビルドするための JDK も必要になります。

cf push pong_matcher_spring -n HOSTNAME コマンドを実行して、アプリケーションを配備します。HOSTNAMEをアプリケーションの名前に置き換えます。アプリケーションの名前は自由に決めることができます。ただし、PWS の初期設定では、PWS のユーザー全体で共有されるドメインcfapps.ioを利用するため、他のユーザのものを含め、一意な名前にする必要があります。

しばらくして OK と表示されたら正常にデプロイされています。最後に、アプリケーションの状態、CPU 使用量、メモリ使用量、ディスク使用量などが表示されます。

アプリケーションの動作を確認するために、公式ドキュメントにあるとおり、以下のコマンドを順番に実行します。

$ export HOST=SAMPLE-APP-URL
$ curl -v -X DELETE $HOST/all
$ curl -v -H "Content-Type: application/json" \
-X PUT $HOST/match_requests/firstrequest \
-d '{"player": “andrew"}'
$ curl -v -H "Content-Type: application/json" \
-X PUT $HOST/match_equests/secondrequest \
-d '{"player": “navratilova"}'
$ curl -v -X GET $HOST/match_reuests/firstrequest
$ curl -v -H "Content-Type: application/json" \
-X POST $HOST/results \
-d '{"match_id": "MATCH_ID", "winner": "andrew", "loser": "navratilova"}'

この最後のコマンドを実行して 201 Created の応答が返ってきたら正常に動作しています。おめでとうございます。ただ、画面のあるアプリケーションではないため、正常に動作しているか不安になると思いますが、正常に動作しています。安心してください。

他には、公式ドキュメントに Grails、Ratpack、Ruby、Ruby on Rails の使い方が書かれています。それらのフレームワークに慣れている方は、そちらを試してみるといいでしょう。

ここまでにあるとおり、Cloud Foundry を使用すると、アプリケーションを素早く動作させられます。手軽に動作させられますが、本格的なスケールアウト機能や死活監視機能などを利用できます。Cloud Foundry 自体の詳細は、書籍『Cloud Foundry: The Definitive Guide』やインターネットにある各種情報をご参照ください。