オープンソースのPaaSソフトウェア CloudFoundry の技術情報やイベント告知などを掲載します

2015-06-11

-2048 を Cloud Foundry で動かす

本日の第6回「Cloud Foundry 百日行」は、-2048です。
これも第5回と同じくデプロイが簡単なHTML+JavaScriptのアプリです。

-2048基本情報

デプロイ

手順

  • 0) 準備
  • 1) アプリの起動
  • 2) 動作確認

0.準備

まずはソースコードの取得から。
ディレクトリ名にマイナス記号が入っていると少々厄介なのでnegative2048に名前を変更しながらgit cloneしておきましょう。

$ git clone https://github.com/LegoMaster616/-2048 negative2048
$ cd negative2048
negative2048$ ls
CONTRIBUTING.md  favicon.ico  index.html  js  LICENSE.txt  meta  Rakefile  README.md  style

主な中身はindex.htmlとjs/ディレクトリなので、前回と同様にstaticfile-buildpackにHTTPサーバを立ててもらえばアプリは動いてくれそうです。

1.アプリの起動

では早速Cloud Foundry上にアプリをデプロイしてみましょう。
前回と同様に $ cf push negative2048 -b https://github.com/cloudfoundry/staticfile-buildpack で方を付けてしまっても良いのですが、折角なので前にご紹介したmanifestファイルを再び使ってみます。
アプリケーションの作りがほぼ同じなので同じようなmanifestファイルでデプロイできるはずです。

negative2048$ vi manifest.yml
---
applications:
- name: negative2048
  buildpack: https://github.com/cloudfoundry/staticfile-buildpack

ここまでくれば残す作業はcf pushだけです。アプリをデプロイしましょう。

negative2048$ cf push
Using manifest file /home/ukaji/workspace/_old/negative2048/manifest.yml

Creating app negative2048 in org ukaji / space default as ukaji...
OK

Creating route negative2048.10.244.0.34.xip.io...
OK

Binding negative2048.10.244.0.34.xip.io to negative2048...
OK

Uploading negative2048...
Uploading app files from: /home/ukaji/workspace/_old/negative2048
Uploading 239K, 32 files
Done uploading               
OK

Starting app negative2048 in org ukaji / space default as ukaji...
-----> Downloaded app package (244K)
Cloning into '/tmp/buildpacks/staticfile-buildpack'...
Submodule 'compile-extensions' (https://github.com/cloudfoundry-incubator/compile-extensions.git) registered for path 'compile-extensions'
Cloning into 'compile-extensions'...
Submodule path 'compile-extensions': checked out '0b1eb13f9a747494b0abac8c665bb556cd07c749'
grep: Staticfile: No such file or directory
-----> Using root folder
-----> Copying project files into public/
-----> Setting up nginx
grep: Staticfile: No such file or directory
-----> Uploading droplet (2.7M)

1 of 1 instances running

App started


OK

App negative2048 was started using this command `sh boot.sh`

Showing health and status for app negative2048 in org ukaji / space default as ukaji...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: negative2048.10.244.0.34.xip.io
last uploaded: Thu Jun 11 00:37:00 +0000 2015
stack: lucid64

     state     since                    cpu    memory         disk      details   
#0   running   2015-06-11 09:37:17 AM   0.0%   2.7M of 256M   0 of 1G

2.動作確認

デプロイが無事終了したら動作確認です。ブラウザでアクセスをしてみましょう。

動きました。

このゲームも前回と同じく2048ゲームのクローンです。
操作方法は基本通りなのですが、少々追加ルールがややこしいです。

  • 追加ルール1.プラスとマイナスの同じ数字が衝突すると0のタイルになる
  • 追加ルール2.0のタイルは他のタイルの数字を変更することなくマージされる

ちなみに勝利条件は2048、もしくは-2048のタイルを作ることなのですが、得点の稼ぎ方なども考えだすと相当にややこしいゲームです。

おまけ

アプリケーションが起動するときに表示されるこのステータス画面、

(一部略)
Showing health and status for app negative2048 in org ukaji / space default as ukaji...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: negative2048.10.244.0.34.xip.io
last uploaded: Mon Jun 8 05:52:09 +0000 2015
stack: lucid64

     state     since                    cpu    memory         disk      details   
#0   running   2015-06-08 02:52:27 PM   0.0%   2.8M of 256M   0 of 1G 

これの一番下をご覧になってお気づきの方もいらっしゃるかもしれません。
「メモリ2.8Mのアプリに256M割り振っちゃうのはちょっと無駄じゃないかな?」
こんなことを考えたとしましょう。

実はこの

memory
2.8M of 256M

の部分、「このアプリは割当てられた256Mのメモリのうち、2.8Mを使用中。」という意味です。
確かに数Mのメモリで動いてくれるアプリケーションに256Mも用意してあげるのは少々もったいないので、もう少し適切な値を割り振りたいものです。

さて、メモリなどのリソースの量についても、アプリ起動コマンドのオプションで解決することができます。
今回のアプリケーションで試してみましょう。

negative2048$ cf push negative2048 -b https://github.com/cloudfoundry/staticfile-buildpack -m 4M -k 8M
(一部略)
requested state: started
instances: 1/1
usage: 4M x 1 instances
urls: negative2048.10.244.0.34.xip.io
last uploaded: Mon Jun 8 06:13:16 +0000 2015
stack: lucid64

     state     since                    cpu    memory       disk      details   
#0   running   2015-06-08 03:13:55 PM   0.0%   2.4M of 4M   0 of 8M 

ここでは-mオプションによってメモリ量を指定、ついでに−kオプションで使用ディスク量の指定を行ってみました。
最初のデプロイ時より無駄が少なくなっているのがわかります。

もちろんこれらの起動オプションもmanifestファイル内に吸収し、起動コマンドをcf pushにまとめることが可能です。
manifestファイルは下の通りです。

negative2048$ cat manifest.yml 
---
applications:
- name: negative2048
  buildpack: https://github.com/cloudfoundry/staticfile-buildpack
  memory: 4M
  disk_quota: 8M

今回使用した環境