Cloud Foundryを使ってみよう[2]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
デプロイしたアプリケーションの管理
デプロイしたウェブアプリケーションはvmcコマンドで管理することができます。
アプリケーションの起動
vmc startコマンドに、起動したいアプリケーション名を引数にして実行します。
cf@debian:~/sample-apps/hello$ vmc start
hello
Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
アプリケーションの停止
vmc stopコマンドに、停止したいアプリケーション名を引数にして実行します。
cf@debian:~/sample-apps/hello$ vmc stop
hello
Stopping Application: OK cf@debian:~/sample-apps/hello$
アプリケーションの再起動
vmc restartコマンドに、再起動したいアプリケーション名を引数にして実行します。
cf@debian:~/sample-apps/hello$ vmc restart
hello
Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
なお、停止している場合に再起動を行うと、起動のみを行います。
cf@debian:~/sample-apps/hello$ vmc restart
hello
Application 'hello' already stopped Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
アプリケーションのスケーリング
vmc statsコマンドにアプリケーション名を引数にして実行することで、現在のインスタンス数、CPU使用率とコア数、メモリ使用量と上限値、ディスク使用量と上限値、起動時間が表示されます。
cf@debian:~/sample-apps/hello$ vmc stats
hello
+----------+-------------+----------------+--------------+---------------+ | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime | +----------+-------------+----------------+--------------+---------------+ | 0 | 0.0% (4) | 17.1M (128M) | 44.0K (2G) | 0d:0h:14m:56s | +----------+-------------+----------------+--------------+---------------+ cf@debian:~/sample-apps/hello$
vmc memコマンドにアプリケーション名とメモリ数(M)を引数にして実行することで、割り当てメモリを変更できます。なお、この際アプリケーションが再起動されることに注意してください。
cf@debian:~/sample-apps/hello$ vmc mem
hello
64
Updating Memory Reservation to 64M: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
メモリ上限値が変更されていることを確認します。
cf@debian:~/sample-apps/hello$ vmc stats
hello
+----------+-------------+----------------+--------------+--------------+ | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime | +----------+-------------+----------------+--------------+--------------+ | 0 | 0.3% (4) | 17.0M (64M) | 40.0K (2G) | 0d:0h:0m:36s | +----------+-------------+----------------+--------------+--------------+ cf@debian:~/sample-apps/hello$
vmc instancesコマンドにアプリケーション名とインスタンス数を引数にして実行することで、インスタンス数を変更できます。
cf@debian:~/sample-apps/hello$ vmc instances
hello
2
Scaling Application instances up to 2: OK cf@debian:~/sample-apps/hello$
インスタンス数が変更されていることを確認します。
cf@debian:~/sample-apps/hello$ vmc stats
hello
+----------+-------------+----------------+--------------+--------------+ | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime | +----------+-------------+----------------+--------------+--------------+ | 0 | 0.1% (4) | 17.0M (64M) | 40.0K (2G) | 0d:0h:2m:38s | | 1 | 0.3% (4) | 17.0M (64M) | 40.0K (2G) | 0d:0h:0m:42s | +----------+-------------+----------------+--------------+--------------+ cf@debian:~/sample-apps/hello$
インスタンスを増やした場合、そのぶんメモリ、ディスクを使用することに注意してください。
ログなどの確認
vmc logsコマンドにアプリケーション名を引数にして実行することで、
アクセスログなどを確認できます。
cf@debian:~/sample-apps/hello$ vmc logs
hello
====> logs/stderr.log <==== XXX.XXX.XXX.XXX, 172.30.8.253 - - [13/Jan/2012 13:36:56] "GET / HTTP/1.0" 200 47 0.0009 253 - - [13/Jan/2012 13:36:56] "GET / HTTP/1.0" 200 47 0.0009 ====> logs/stdout.log <==== == Sinatra/1.2.1 has taken the stage on 40937 for production with backup from Thin >> Thin web server (v1.2.11 codename Bat-Shit Crazy) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:40937, CTRL+C to stop cf@debian:~/sample-apps/hello$
vmc crashesコマンドにアプリケーション名を引数にして実行することで、クラッシュ情報を確認できます。
cf@debian:~/sample-apps/hello$ vmc crashes hello No crashed instances for [hello] cf@debian:~/sample-apps/hello$
vmc crashlogsコマンドにアプリケーション名を引数にして実行することで、
詳細なクラッシュ情報を確認できます。
cf@debian:~/sample-apps/hello$ vmc crashlogs hello ====> logs/stderr.log <==== XXX.XXX.XXX.XXX, 172.30.8.253 - - [13/Jan/2012 13:36:56] "GET / HTTP/1.0" 200 47 0.0009 ====> logs/stdout.log <==== == Sinatra/1.2.1 has taken the stage on 40937 for production with backup from Thin >> Thin web server (v1.2.11 codename Bat-Shit Crazy) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:40937, CTRL+C to stop cf@debian:~/sample-apps/hello$
アプリケーションの削除
vmc deleteコマンドに削除したいアプリケーション名を引数にして実行します。
cf@debian:~/sample-apps/hello$ vmc delete
hello
Deleting application [hello]: OK cf@debian:~/sample-apps/hello$
非対話的なデプロイ
vmc pushコマンドに引数を与えずに実行すると、対話的なデプロイを行いますが、非対話的なデプロイを行うこともできます。
cf@debian:~/sample-apps/hello$ vmc push Would you like to deploy from the current directory? [Yn]:
y
Application Name:
hello
Application Deployed URL [hello.cloudfoundry.com]:
hello-creationline.cloudfoundry.com
Detected a Sinatra Application, is this correct? [Yn]:
y
Memory Reservation (64M, 128M, 256M, 512M, 1G, 2G) [128M]: Creating Application: OK Would you like to bind any services to 'hello'? [yN]:
n
Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
非対話的なデプロイを行うには、vmc pushコマンドに-nオプションを指定し、--urlオプションでデプロイURLを、--memオプションで割り当てメモリを指定します。
cf@debian:~/sample-apps/hello$ vmc push
hello
-n
--url hello-creationline.cloudfoundry.com
--mem 128
Creating Application: OK Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
アプリケーションの更新
既にデプロイしてあるアプリケーションの更新を行います。
cf@debian:~/sample-apps/hello$ cat hello.rb require 'sinatra' get '/' do "Hello from Cloud Foundry" end cf@debian:~/sample-apps/hello$
上記のアプリケーションを下記のように書き換えます。
cf@debian:~/sample-apps/hello$ cat hello.rb require 'sinatra' get '/' do "Hello from Cloud Foundry
and creationline
" end cf@debian:~/sample-apps/hello$
vmc updateコマンドに更新したいアプリケーション名を引数にして実行します。
cf@debian:~/sample-apps/hello$ vmc update
hello
Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
Webブラウザで http://hello-creationline.cloudfoundry.com/ にアクセスします。
以下の表示が得られれば、アプリケーションは正常に更新されています。
Hello from Cloud Foundry and creationline
なお、この手順ではアプリケーションの再起動が発生するため、わずかながらダウンタイムが発生していることに注意してください。
アプリケーションの更新時のダウンタイムをなくすには
前項ではvmc updateコマンドによるアプリケーションの更新について述べましたが、アプリケーションの再起動によるダウンタイムがあることが問題となります。
本項ではダウンタイムを発生させずにアプリケーションの更新を行う手順について述べます。
現在、アプリケーションhelloが動作しており、これを更新することとします。
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+-------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+-------------------------------------+----------+ | hello | 1 | RUNNING | hello-creationline.cloudfoundry.com | | +-------------+----+---------+-------------------------------------+----------+ cf@debian:~/sample-apps/hello$
cf@debian:~/sample-apps/hello$ cat hello.rb require 'sinatra' get '/' do "Hello from Cloud Foundry and creationline" end cf@debian:~/sample-apps/hello$
上記のアプリケーションを下記のように書き換えます。
cf@debian:~/sample-apps/hello$ cat hello.rb require 'sinatra' get '/' do "Hello from Cloud Foundry and creationline
(New)
" end cf@debian:~/sample-apps/hello$
書き換えたアプリケーションを、別のアプリケーション名 hello-new、別のデプロイURI hello-new-creationline.cloudfoundry.comでデプロイします。今回はサービスと結びつけていませんが、サービスを使っている場合は同じ設定にします。
cf@debian:~/sample-apps/hello$ vmc push
hello-new
-n --url
hello-new-creationline.cloudfoundry.com
--mem 128 Creating Application: OK Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK cf@debian:~/sample-apps/hello$
新旧のアプリケーションが、別々のデプロイURLで動作していることを確認します。
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+-----------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+-----------------------------------------+----------+ | hello | 1 | RUNNING | hello-creationline.cloudfoundry.com | | | hello-new | 1 | RUNNING | hello-new-creationline.cloudfoundry.com | | +-------------+----+---------+-----------------------------------------+----------+ cf@debian:~/sample-apps/hello$
Webブラウザで http://hello-new-creationline.cloudfoundry.com/ にアクセスします。以下の表示が得られれば、デプロイした新アプリケーションhello-newは正常に動作しています。
Hello from Cloud Foundry and creationline (New)
vmc mapコマンドで、新アプリケーションhello-newを元デプロイURLに結びつけます。
cf@debian:~/sample-apps/hello$ vmc map hello-new hello-creationline.cloudfoundry.com Successfully mapped url cf@debian:~/sample-apps/hello$
これにより、デプロイURI hello-creationline.cloudfoundry.comは、新旧2つのアプリケーションに結びついたことになります。
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+------------------------------------------------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+------------------------------------------------------------------------------+----------+ | hello | 1 | RUNNING | hello-creationline.cloudfoundry.com | | | hello-new | 1 | RUNNING | hello-creationline.cloudfoundry.com, hello-new-creationline.cloudfoundry.com | | +-------------+----+---------+------------------------------------------------------------------------------+----------+ cf@debian:~/sample-apps/hello$
この状態でWebブラウザでhttp://hello-creationline.cloudfoundry.com/にアクセスすると、そのたびに、旧アプリケーションhelloの実行結果である
Hello from Cloud Foundry and creationline
と、新アプリケーションhello-newの実行結果である
Hello from Cloud Foundry and creationline (New)
とのどちらかが表示されることになります。
この状態が確認できたら、vmc unmapコマンドで、旧アプリケーションhelloを元デプロイURLから切り離します。
cf@debian:~/sample-apps/hello$ vmc unmap hello hello-creationline.cloudfoundry.com Successfully unmapped url cf@debian:~/sample-apps/hello$
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+------------------------------------------------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+------------------------------------------------------------------------------+----------+ | hello | 1 | RUNNING | | | | hello-new | 1 | RUNNING | hello-creationline.cloudfoundry.com, hello-new-creationline.cloudfoundry.com | | +-------------+----+---------+------------------------------------------------------------------------------+----------+ cf@debian:~/sample-apps/hello$
なお、デプロイURLからは切り離されましたが、旧アプリケーションhelloに結びついたセッションが残っている場合は、引き続き旧アプリケーションhelloが
利用されます。新しいセッションは新アプリケーションhello-newが用いられ、旧アプリケーションhelloへの新規流入は遮断される形となります。
Webブラウザで http://hello-creationline.cloudfoundry.com/ に何度アクセスしても、新アプリケーションhello-newの結果しか得られない、つまり、元デプロイURLで新アプリケーションhello-newが常に使われていることを確認します。
Hello from Cloud Foundry and creationline (New)
vmc unmapコマンドで、新アプリケーションhello-newを新デプロイURLから切り離します。
cf@debian:~/sample-apps/hello$ vmc unmap hello-new hello-new-creationline.cloudfoundry.com Successfully unmapped url cf@debian:~/sample-apps/hello$
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+-------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+-------------------------------------+----------+ | hello | 1 | RUNNING | | | | hello-new | 1 | RUNNING | hello-creationline.cloudfoundry.com | | +-------------+----+---------+-------------------------------------+----------+ cf@debian:~/sample-apps/hello$
アクセス状況などを確認し、旧アプリケーションhelloに結びついたセッションが
完全になくなったことが確認できたら、vmc deleteコマンドで
旧アプリケーションhelloを削除します。
cf@debian:~/sample-apps/hello$ vmc delete hello Deleting application [hello]: OK cf@debian:~/sample-apps/hello$
cf@debian:~/sample-apps/hello$ vmc apps +-------------+----+---------+-------------------------------------+----------+ | Application | # | Health | URLS | Services | +-------------+----+---------+-------------------------------------+----------+ | hello-new | 1 | RUNNING | hello-creationline.cloudfoundry.com | | +-------------+----+---------+-------------------------------------+----------+ cf@debian:~/sample-apps/hello$
以上により、ダウンタイムなしでアプリケーションを更新することができました。