fbpx

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$

以上により、ダウンタイムなしでアプリケーションを更新することができました。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA