Check! Bluemix OpenWhisk の開発環境を Vagrant で作ってみる

こんばんは、 @dz_ こと大平かづみです。

Prologue - はじめに
====

ファーストタッチばかりですけど、今度は [Bluemix OpenWhisk](https://console.ng.bluemix.net/openwhisk/ "OpenWhisk - IBM Bluemix") を触ってみます！

Windows 環境から使いたいので、Vagrant で環境を作ってみました。

Bluemix OpenWhisk とは
====
まず、OpenWhisk とは、オープンソースのイベント駆動型のプラットフォームです。[About IBM® Bluemix® OpenWhisk](https://new-console.ng.bluemix.net/docs/openwhisk/openwhisk_about.html "About IBM® Bluemix® OpenWhisk") を要約してみましょう。
要約
----
REST API やトリガーからのイベントキックにより、アクションが実行されます。アクションは、[NodeJS](https://nodejs.org/ "Node.js") や [Swift](http://www.apple.com/swift/ "Swift - Apple") で書くことができます。また、Docker のコンテナをデプロイすることも可能です。

トリガーは、OpenWhisk API や CLI、iOS SDK からもキックすることができます。また、アクションはチェーンで連結することができます。

フィードやアクションに紐づけることができるパッケージには、追加のサービスやプロバイダと結合させることができます。たとえば、Cloudant change feed を使うと、Cloudant データベースで起こったイベントを起点にしてトリガーを発動することができます。また、パッケージにアクションを構成すると、再利用可能なロジックとしてイベント駆動だけでなくAPI実行からも利用できます。

トリガーが発動しない限りコードは実行されず、その間は課金されません。トリガーの発動に応じて課金されるため、同様の用途で仮想マシンやコンテナを長時間稼働させておいた場合のコストのオーバーヘッドを抑えることができます。

開発者はコードを書くことに集中でき、サーバーやストレージ、ネットワークなどインフラストラクチャのモニタリングやパッチ対応、セキュリティ対応の心配をする必要はなくなります。

ユースケース
----
- アプリケーションをマイクロサービスとして分解する際に利用
- モバイルのバックエンド
- データ処理
- IoT

大まかな流れ
====
さて、実際に OpenWhisk を触る環境を作ってみます。OpenWhisk はまだGUIがないため、CLIの環境を用意します。

1. Vagrant 環境の準備
2. OpenWhisk のセットアップ

手順
====


Vagrant 環境の準備
----

OpenWhisk CLI は、Python 2.7 以上で動作し、インストールには `pip` を利用します。そこで、以下のようなスクリプトで Vagrant 環境を構築しました。なお、 Vagrant 事態の環境構築については割愛します。

```:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :shell, path: "provision.sh"
end
```

```bash:provision.sh
#!/usr/bin/env bash

apt-get update
apt-get install -y git

# install pip
TMP_PIP=/tmp/pip
if [ ! -e "${TMP_PIP}" ]; then
    mkdir $TMP_PIP
fi
wget "https://bootstrap.pypa.io/get-pip.py" -P $TMP_PIP
python $TMP_PIP/get-pip.py
rm -rf $TMP_PIP

# install OpenWhisk CLI
pip install --upgrade https://new-console.ng.bluemix.net/openwhisk/cli/download
```



上記のファイルを準備し、Vagrant を立ち上げ、SSHログインしておきましょう。

```bash
vagrant up
vagrant ssh
```

OpenWhisk のセットアップ
----
次に、OpenWhisk のセットアップを行います。

[Bluemix](https://new-console.ng.bluemix.net/ "IBM Bluemix - 次世代のクラウド・アプリ開発プラットフォーム") にログインして、[OpenWhisk のコンソール](https://new-console.ng.bluemix.net/openwhisk/ "OpenWhisk - IBM Bluemix") を開きます。

![20160306_openwhisk_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/0bc5e4a8-45e6-a15d-79bf-df83d7fc49b7.png)

「Configure CLI」をクリックすると、環境構築の手順が表示されます。

- `1` の CLI インストールは、上記 Vagrant で実行済みです。
- `2` では、環境をアカウントの名前空間に紐づけ、認証を行います。画面上のコマンドをコピーし、先ほど立ち上げた vagrant 環境で実行しましょう。認証されればOKです。
- `3` は動作確認のコマンドです。これもコピー&ペーストして実行し、`Hello` が返ればOKです。

![20160306_openwhisk_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/2cd5a4de-5786-7dd7-acb3-83e5c63de675.png)

実行の状況は、コンソールの「Dashboard」で確認することができます。

![20160306_openwhisk_007.png](https://qiita-image-store.s3.amazonaws.com/0/3812/644bb6d0-c50b-1355-7223-7617c4c888ed.png)

これでデプロイ環境はできましたね。

Epilogue - おわりに
====
上記は簡単な動作確認までですが、アクションや、トリガー、パッケージなどについてはもう少し理化してから触りたいので、次回の記事にしたためます。

なお、作成した Vagrantfile はとても簡単なものですが、一応、こちら [dzeyelid/vagrant-env-openwhisk](https://github.com/dzeyelid/vagrant-env-openwhisk "dzeyelid/vagrant-env-openwhisk: Setup an environment for Bliemix OpenWhisk on Vagrant") に置きました。