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

2013-08-22

Cloud Foundryで始めるアプリケーション開発:(2) 簡単なアプリケーションのデプロイ

こんにちは、yudai です。前回に引き続き、Cloud Foundry を使ったアプリケーションの開発手法について解説を行なっていきます。

2回目となる今回では、簡単なアプリケーションの Cloud Foundry 環境へのデプロイに挑戦します。Cloud Foundry の細かい仕組みやツールの使用方法についてはとりあえず気にせずに、Cloud Foundry の世界を体感してみましょう。なお、今回は前回のエントリーに引き続き、 Anynines という Cloud Foundry のホスティングサービスを使用します 。アカウントの登録がまだお済みでない方は、前回の記事を参照して登録を行なってください。

クライアント環境について

Cloud Foundry へのアプリケーションをデプロイ際に使用する標準的なコマンドラインツール類はすべて Ruby で記述されています。そのため、Ruby を実行可能な環境であれば、クライアントとして使用する OS の種類は問いません。本エントリーでは Ubuntu 12.04 64bit を使用して解説を行います。Mac OSX でもほぼ同様のコマンドで操作が可能ですが、Windows 環境の方は適宜コマンドを読み替えてください。

UbuntuでのRubyのインストール

Rubyの実行環境のインストール方法は使用するOSや環境によって異なります。Ubuntuの場合は標準の apt パッケージでインストールすることが出来ます。
# ruby ではなくて ruby1.9.3 をインストールします
$ sudo apt-get install ruby1.9.3

cf コマンドのインストール

まず最初に、Cloud Foundry 環境の操作に使用するコマンドラインツール「cf」をインストールします。cf コマンドは Ruby の Gem として提供されているため、簡単にインストールすることができます。なお、現在の cf コマンドの最新版は 5.2.0 ですが、今回は anynines の環境で安定して使用できる 4.2.8 を使用します。

# sudo は必要に応じて削除してください
$ sudo gem install cf --version 4.2.8

Cloud Foundry へのターゲットとログイン

まず最初に行うべきことは、自分が使用する Cloud Foundry の環境を cf コマンドに教えることです。cf コマンドではこれを「target」というサブコマンドで行います。使用する環境の識別は Cloud Foundry が稼働しているサーバの URL です。Anynines ではアカウントを登録した際に送られてくるメールに記載されています。
# anynines の Cloud Foundry サーバを指定する
$ cf target https://api.de.a9s.eu
Setting target to https://api.de.a9s.eu... OK

ターゲットが完了したら、ユーザIDとパスワードを使用して Cloud Foundry にログインします。これらの値も Anynines から送られてくるメールに記載されています。
# ユーザとしてログイン
$ cf login
target: https://api.de.a9s.eu

Email> yudai@arielworks.com

Password> **********

Authenticating... OK
There are no spaces. You may want to create one with create-space.... OK

スペースの作成

Cloud Foundry では標準で「スペース」という概念を使用することが出来ます。スペースは主に、 Cloud Foundry 内で開発やステージング、プロダクションといった環境を切り替えるために使用されるほか、目的に合わせて任意のスペースを作成することが可能です。スペースは最低でも1つ作成する必要があるため、今回は「Default」という名前のスペースを作ります。使用するサブコマンドは「create-space」です。
$ cf create-space
Name> default

Creating space default... OK
Adding you as a manager... OK
Adding you as a developer... OK
Space created!

cf switch-space default    # targets new space
作成したスペースに環境を切り替えるために、「switch-space」サブコマンドを実行します。
$ cf switch-space default
Switching to space default... OK

Target Information (where will apps be pushed):
  CF instance: https://api.de.a9s.eu (API version: 2)
  user: yudai@arielworks.com
  target app space: default (org: yudai_arielworks_com)

サンプルアプリケーションの準備

サンプルとしてデプロイを行うアプリケーションの準備を行います。今回は簡単な Ruby のウェブアプリケーションを作ります。適当なディレクトリを作り以下のファイルを作成します。各ファイルの内容の詳細については次回に解説を行います。
hello_world.rb:
require "sinatra"

class HelloWorld < Sinatra::Base
  get "/" do
    "Hello, World!"
  end
end
Gemfile:
source "https://rubygems.org"
gem "sinatra"
Gemfile.lock:
GEM
  remote: https://rubygems.org/
  specs:
    rack (1.5.2)
    rack-protection (1.5.0)
      rack
    sinatra (1.4.3)
      rack (~> 1.4)
      rack-protection (~> 1.4)
      tilt (~> 1.3, >= 1.3.4)
    tilt (1.4.1)

PLATFORMS
  ruby

DEPENDENCIES
  sinatra
config.ru:
require "./hello_world"
run HelloWorld.new

アプリケーションのプッシュ

それでは、アプリケーションを実際に動かしてみましょう。アプリケーションを Cloud Foundry 環境へデプロイするには「push」サブコマンドを使用します。いくつか設定項目を聞かれますが、「Subdomain」以外はデフォルト値(Enter入力)で問題ありません。「Subdomain」の値はアプリケーションの URL の一部となりますが、この環境では他のユーザと競合する可能性があるので適宜変更してください。

$ cf push
Name> hello_world

Instances> 1

1: 128M
2: 256M
3: 512M
4: 1G
Memory Limit> 256M

Creating hello_world... OK

1: hello_world
2: none
Subdomain> hello_world

1: de.a9sapp.eu
2: none
Domain> de.a9sapp.eu

Binding hello_world.de.a9sapp.eu to hello_world... OK

Create services for application?> n

Save configuration?> n

Uploading hello_world... OK
Preparing to start hello_world... OK
Checking status of app 'hello_world'...
  0 of 1 instances running (1 starting)
  1 of 1 instances running (1 running)
Push successful! App 'hello_world' available at http://hello_world.de.a9sapp.eu

コマンドが正常終了したら、ウェブブラウザで http://hello_world.de.a9sapp.eu/ (サブドメイン部分は置き換えてください)を開きます。「Hello, World!」と表示されたら成功です。

次回予告

次回は今回使用したサンプルアプリケーションのソースコードを解説し、Cloud Foundry にアプリケーションをデプロイするための条件について説明を行う予定です。