IBM Bluemix (IBM Cloud - Cloud Foundry) をローカルで動作するように環境を準備する

IBM Bluemix (IBM Cloud - Cloud Foundry) をローカルで動作するように環境を準備する

Bluemix は IBM が提供する PaaS で、Heroku に似た仕組みを持つ Cloud Foundry をベースとして動作しています。専用の cli を使ってコードを push すると、コードにあわせて buildpack が選択され、コードに合わせた環境が準備されて自動的にアプリが起動します。

push から動作までが非常に速やかで簡潔な反面、環境がすべて自動で準備されているため、動作における不具合の調査とその調整が少ししづらい印象があります。幸い、Croud Foundry にはローカルで動作させるための PCF Dev (P は開発元であった Pivotal 社の頭文字) という plugin が用意されていますので、それを今回はインストールしました。

OS は Debian stretch で、手順は Introduction | Try PCF on your Local Workstation | Pivotal に従っています。

(なお windows と mac では cloudfoundry-incubator/cfdev: A fast and easy local Cloud Foundry experience on native hypervisors, powered by LinuxKit with VPNKit で簡単に準備できようです)

インストール

cf-cli のインストール

PCF Dev plugin は cf-cli 上で動作します。また、動作している Cloud Foundry へアクセスするためにも必要になるので、いずれにしてもインストールが必要になります。

# apt-get の https アクセスなどに必要なパッケージをインストール
sudo apt-get update
sudo apt-get install -y wget gnupg gnupg1 gnupg2 apt-transport-https

wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
sudo apt-get update
sudo apt-get install cf-cli

VirtualBox をインストール

仮想環境として内部的に VirtualBox を使用しています。VirtualBox から環境に合わせたパッケージをダウンロードしてインストールします。

素の Debian stretch だと多くの依存パッケージが足らず virtualbox-6.0 depends on Foo; however: Package Foo is not installed. といったエラーメッセージが複数行にわたって表示されます。したがって依存パッケージを先にインストールしなければなりません。

# 依存パッケージのインストール
sudo apt-get install -y libcurl3 libdevmapper1.02.1 libgl1-mesa-glx libgl1 libopus0 libpng16-16 libqt5core5a libqt5gui5 libqt5opengl5 libqt5printsupport5 libqt5widgets5 libqt5x11extras5 libsdl1.2debian libvpx4 libx11-6 libxcb1 libxcursor1 libxext6 libxml2 libxmu6 libxt6 psmisc

sudo dpkg -i virtualbox-6.0_6.0.0-127566~Debian~stretch_amd64.deb

PCF Dev をインストール

Download PCF Dev — Pivotal Network からダウンロードします。ダウンロードにはアカウントが必要なので作成します。

plugin のインストールは cf-cli に対して行うので以下のようになります。

cf install-plugin ./pcfdev-v0.30.0+PCF1.11.0-linux

補記

チュートリアルのように $ ./pcfdev-v0.30.0+PCF1.11.0-linux とした場合は Your cf CLI version is too old. Please install the latest cf CLI. とエラーになりインストールできませんでした。

起動

以下のコマンドを実行するだけです。

cf dev start

ただし初回はまず仮想環境イメージのダウンロードで時間がかかり、2 回目以降も起動自体にものすごい時間がかかります。それを知らないと固まったような印象を受けますが、気長に待つのが肝要です。

起動時ログ例

$ cf dev start

Less than 4096 MB of free memory detected, continue (y/N): > y
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email>

Password>
Downloading VM...
Progress: |====================>| 100%  # まず仮想環境イメージのダウンロードが長い
VM downloaded.
Allocating 4096 MB out of 32140 MB total system memory (1371 MB free).
Importing VM...
Starting VM...
Provisioning VM...
Waiting for services to start... # 2 回目以降もここからの起動が長い
7 out of 58 running
7 out of 58 running
7 out of 58 running
7 out of 58 running
40 out of 58 running
56 out of 58 running
58 out of 58 running            # 気長に待ちましょう

 _______  _______  _______    ______   _______  __   __
|       ||       ||       |  |      | |       ||  | |  |
|    _  ||       ||    ___|  |  _    ||    ___||  |_|  |
|   |_| ||       ||   |___   | | |   ||   |___ |       |
|    ___||      _||    ___|  | |_|   ||    ___||       |
|   |    |     |_ |   |      |       ||   |___  |     |
|___|    |_______||___|      |______| |_______|  |___|
is now running.
To begin using PCF Dev, please run:
   cf login -a https://api.local.pcfdev.io --skip-ssl-validation
Apps Manager URL: https://apps.local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular user => Email: user / Password: pass

アクセス

cf-cli

以下のコマンドで、cf-cli のアクセス先を立ち上がった PCF Dev に設定します。なお、*.local.pcfdev.io192.168.11.11 にポイントされているので、きちんとローカルの Cloud Foundry にアクセスすることになります。

cf login -a api.local.pcfdev.io --skip-ssl-validation

EmailPassword が要求されるので、起動時のログに表示されているものを使用します。

Regular user => Email: user / Password: pass

GUI

ブラウザからは https://apps.local.pcfdev.io でコンソールにアクセスできます。EmailPassword はおなじく起動時ログで出てきたものを使用できます。

PCF Dev の動作確認

単純な ruby を起動してみましょう。Cloud Foundry ではなく Bluemix から配給されているものですが IBM-Cloud/ruby-sinatra-helloworld: Sample Ruby application for Bluemix which uses the Sinatra framework. が簡単に起動します。

git clone https://github.com/IBM-Cloud/ruby-sinatra-helloworld
cd ruby-sinatra-helloworld
cf push

問題がなければ以下のようなログが最終的に出力されます。経路 に示された sample-ruby-sinatra-brave-okapi.local.pcfdev.io にアクセスして動作を確認しましょう。

$ cf push
user としてマニフェストから組織 pcfdev-org / スペース pcfdev-space にプッシュしています...

# build のログが続く

名前:                   sample-ruby-sinatra
要求された状態:         started
インスタンス:           1/1
使用:                   256M x 1 インスタンス
経路:                   sample-ruby-sinatra-brave-okapi.local.pcfdev.io
最終アップロード日時:   Mon 31 Dec 07:39:34 JST 2018
スタック:               cflinuxfs2
ビルドパック:           ruby 1.6.37
開始コマンド:           bundle exec rackup config.ru -p $PORT

     状態   開始日時               cpu    メモリー       ディスク       詳細
#0   実行   2018-12-30T22:39:58Z   0.0%   456K of 256M   6.7M of 512M

まとめ

これで Cloud Foundry をローカルで動作できるようになりました。

実は IBM Bluemix に乗せる平易なアプリケーションを作成していて、メモリを 64MB に設定すると落ちてしまう事象がありました。128MB にすると落ちるときと落ちない時があり、それのチューニングをする or チューニングの問題ではないのか調査するにあたって都度 push したのでは追いつかなくなってしまいました。

幸いローカル環境構築はきちんと提供されていたので大いに助かりました。 Pivotal 社及び「ローカル環境あるよ」 と教えてくださった Toshiaki Maki(@making)さん には感謝の言葉しかありません。