OpenWhisk概要

常田です。先日開催されたIBM InterConnect2016にて発表されたイベント駆動型サービス「OpenWhisk」についてまとめてみました。サーバレスで処理をクラウド上で実行できる非常に楽しみなサービスに登場です。同時にオープンソースでも登場しています。

OpenWhiskの登場

IBMが提供を始めたオープンソースのイベント駆動型ランラタイム環境(サーバレスでのクラウドサービス)が登場しました。実行可能な言語はJavaScriptとSwiftそしてDocker(言語ではないですね)です。

今回の言語のサポートに見られるようにフロントエンドエンジニアが多く利用する言語が採用されています。最近ではIBMはAppleと提携していることも有りSwiftをBluemix上でSandboxとして試せる環境を出していましたがここに来てサーバサイドでSwiftを積極的に利用してきました。また合わせてSwiftのWebフレームワークである「kitura」も登場しています。こちらも合わせてオープンソースで提供されています、こちらも注目ですね。

昨今のクラウドサービスは多くが自社のプロプライエタリ製品として構築されるケースがほとんどだったのですがたBluemixはオープンソースベースのミドルウェア等を多く組み込んだサービスになっていました。BluemixのUI部分がオープンソース化するわけではありませんが、今回のOpenWhiskなどのチャレンジなサービスをオープンソースで登場してきました。こういった面からもIBMの体質が変わってきているのだなと感じます。 オープンソースなので具体的に中身を見てみれるのは面白いですね。Core部分はScala言語で書かれていました。wsk等のコマンドラインツールはPython言語ですね。実行環境も今後PythonやJavaなどもサポートされていくのかもしれません(実際にかたちはないですがgithubのプルリクにはそう言った言語が登場しています。オープンソースと実際の実装環境であるBluemix側とどのように発展していくのか今後が楽しみです。OpenWhiskがAWSやAzureで動く日が来るかもしれません。

OpenWhiskのアーキテクチャ

OpenWhisk Arch2

?

OpenWhiskの説明資料としてこの図が出ています。これまでのサーバ型のサービスと違いこのサービスは「イベント駆動」で動きます。Pakageから発生したFeedを「Trigger」として登録している「Action(処理)」が「Invoke
(動き)」されます。 簡単に表現すると「発生源」→「処理」→「結果」という流れになります。図の上部にある様にアクションを登録したり実行する(CRUD処理)ために「専用のCLIツール(wsk)」「UI」「iOS SDK」からも呼び出すことが出来ます。

OpenWhiskのモデル

OpenWhiskのモデルは3つの要素で構成されています。

  • Trigger: イベント駆動型のイベント発生をハンドリングする
  • Action : イベントハンドラ:イベントに応じて実行される処理
  • Rule:トリガーとアクションのひも付け

OpenWhiskサービスはトリガーに該当するイベントが発生するとルールに基づいて適切なアクションを事項することになります。

現在提供されている外部サービスには、Cloudant、Github、Watson、Slackなどが利用できるようになっています。これらが増えてくると非常に便利にOpenWhiskアプリケーションを作ることが出来るようになります。

現在はまだリリースされていませんがGUIも用意される模様です。画面を見るとNore-RED(IBMの開発したオープンソースのNodejsのGUI開発環境)の画面イメージに近い構成になりそうです。GUIで作成が出来ると非常に楽に処理を作成していくことが出来そうです。

?
IBM Bluemix OpenWhisk 930x522

参考:http://venturebeat.com/2016/02/22/ibm-cloud-launches-swift-runtime-open-source-aws-lambda-competitor-github-enterprise-vmware-support/

OpenWhiskが提供する実行環境

もう一つのOpenWhiskの特徴は最初に書きましたが、言語をJavaScript、SwiftそしてDockerで作る事が出来るということです。IBMのBluemixは、Buildpackを用いることで多種多様な言語を動かすプラットフォームを実装していますが今回のOpenWhiskでも複数の言語が動かせることが出来ます。どの言語も意欲的なサポートだと思います。Dockerをサポートしている点も面白いです。様々なアクションを複数の言語で書くことができてそれらを繋げて1つのサービスが出来上がるというのは少しおもしろいですね。

本文章の内容については公式サイトのマニュアル及びコードを参考にしていますがご利用にあたりましては最新の情報をご確認のうえご利用下さい。なにより出たばかりのサービスのため今後も新しい機能が提供され現在は出来ない多くのことが出来るようになっていくことと思います。

最初に何が出来るのかを理解するために標準で用意されている機能を見ていきたいと思います。標準で提供されているTriggerやActionについては公式の「Package」として公開されています。何が出来るかを理解する上でも標準で提供されている機能について整理してみます。

パッケージ

パッケージは、一連の「Action」や「Feed」をまとめたものになります。個人でもPackageは作ることができ公開することも出来るようです(###要調査)

後ほども出てきますが、簡単に言葉を整理しておきます。

  • Action:イベントハンドラ:イベントに応じて実行される処理
  • Feed:トリガーのこと
  • Package:複数のAction、複数のFeedを束ね利用しやすいかたちでまとめたもの

標準提供されるパッケージ

サービスに含まれているパッケージは /whisk.system という名前として登録がされています。(ここで登場した /whisk.system は namespace として定義されており今後ユーザが実際に使う際には自身の namespace 配下に様々な機能を積み込んでいく事になります)
ここに記載するパッケージについても本体同様にオープンソースで含まれています。どの様に記述すると実現が出来るのか良いコーディングサンプルとなります。

Cloudant

Clouantは、IBMが推奨しておりBluemixでもメジャーなサービスであるNoSQLサービスです。用意され得るトリガーが1つ、実施可能なActionが2つ提供されます。

Entity Type Parameters Description
/whisk.system/cloudant package BluemixServiceName, host, username, password, dbname, includeDoc, overwrite Cloudant用パッケージ
/whisk.system/cloudant/read action dbname, includeDoc, id データベースからドキュメントを読み込む
/whisk.system/cloudant/write action dbname, overwrite, doc データベースへドキュメントを書き込む
/whisk.system/cloudant/changes feed dbname, includeDoc データベースの変更をトリガーとして通知

Alarm

このAlermのパッケージはCronを実現してくれれます。時間起動ができるということはかなり便利に応用が出来ると思います。

  • このパッケージはOSS版にはありません。
Entity Type Parameters Description
/whisk.system/alarms package 定期処理を実行
/whisk.system/alarms/alarm feed cron, trigger_payload, maxTriggers 定期的なイベントをトリガーへ通知

Weather

Weather Company のAPIを利用して過去10日分の天気情報を取得することが出来ます。もう少し細かい時系列で取得できると嬉しいかもしれませんね。

Entity Type Parameters Description
/whisk.system/weather package apiKey The Weather Companyからの取得
/whisk.system/weather/forecast action apiKey, latitude, longitude Weather.com 10日分のデータ取得

Watson

BluemixといえばWaton。ということできっちり用意されています。2個しか登録されていませんがサンプルを見る限り自分で追加することも難しくないと思われます。こちらも実行にはWatonのIDが必要になります。

Entity Type Parameters Description
/whisk.system/watson package username, password the Watson analytics APIsの呼び出し
/whisk.system/watson/translate action translateFrom, translateTo, translateParam, username, password テキスト翻訳
/whisk.system/watson/languageId action payload, username, password Identify language

Slack

みんな大好きチャットソフトのSlackですが用意されています。こちらはSlack側でWebhookURL(url)を事前に取得しておく必要があります。

Entity Type Parameters Description
/whisk.system/slack package url, channel, username the Slack APIの呼び出し
/whisk.system/slack/post action text, url, channel, username メッセージの送信

GitHub

先日もGithubとの提携が発表されていましたがこういったところでも出ていますね。こちらはFeedなのでTriggerとして利用することが出来ます。事前にaccessTokenをGithubで作成しておく必要があります。

Entity Type Parameters Description
/whisk.system/github package username, repository, accessToken GitHub APIの呼び出し
/whisk.system/github/webhook feed events, username, repository, accessToken GitHubの変化をトリガーに通知

Utility

小物ツールも用意されています。こういったものを増やしていくと開発が楽になっていくはずです。返り値等はソースを見たほうが良いかと思います。JSON型式で出力されます。

Entity Type Parameters Description
/whisk.system/util package    
/whisk.system/util/cat action msg 中身を表示
/whisk.system/util/date action   現在の日付を表示
/whisk.system/util/head action msg 最初の行を表示
/whisk.system/util/pipe action msg piping the output of each to the input of the next
/whisk.system/util/sort action msg 文字列のソート`

パッケージの確認

最後にこれらのパッケージは、OpenWhiskの実行コマンドであるwskを利用して簡単に見ることが出来ます。

$wsk  package list /whisk.system  
whisk.system/alarms                                              shared
/whisk.system/cloudant                                            shared
/whisk.system/github                                              shared
/whisk.system/samples                                             shared
/whisk.system/slack                                               shared
/whisk.system/util                                                shared
/whisk.system/watson                                              shared
/whisk.system/weather                                             shared

実際に登録されている具体的な内容を見るためには以下コマンドで参照することが出来ます。

$wsk  package get -s /whis.system/util

またパッケージの中に登録されている内容を見るには以下のコマンドで確認が出来ます。

$wsk  action get -s /whis.system/util/cat

はじめに

まずは最も簡単に利用できるBluemix環境で動作を試していきたいと思います。

事前準備

  • 事前にBluemixを利用できるようにしておきます。(アカウント登録自体は無料で可能です)
  • OpenWhiskのサービスを申し込みます。現在はまだベータ版であり申込をする必要があります。(1日かからずに利用できるようになっていると思います)

Pasted Graphic

?
現在はまだ、「User OpenWhisk in your browser」がComing Soonになっています。

  • 画面からCLIの導入「Congiure CLI」から実施してwskコマンドが利用できる状態にしておきます。
  • 実際に利用を解すると利用状況を見るためのダッシュボードが提供されています。ダッシュボードを見るかCLIから様々な情報を取得することになります。
    ?

Pasted Graphic 1

まず練習として、どのような動きに成るのかを見ていきたいと思います。実際に何かを起動するのは「Action」を実行「Invoke」してあげることになります。結果は「Activation」に格納されているので非同期的に取得することが可能です。

簡単なHello Worldを出力するプログラム

func main(args: [String:Any]) -> [String:Any] {
      if let name = args["name"] as? String {
          return [ "greeting" : "Hello \(name)!" ]
      } else {
          return [ "greeting" : "Hello stranger!" ]
      }
  }

を helloSwift.swift として作成します。

$ wsk action create helloSwift hello.swift

このようにして作成したActionは wsk list コマンドで見ると

/bluemixiphone-contest_dev/helloSwift                             private

のように見えます。namespace/action_name というかたちで見えます。このnamespaceはBluemixのNamespaceが利用されます。

次にこのアクションを実行してみたいと思います。

$ wsk action invoke --blocking /bluemixiphone-contest_dev/helloSwift
ok: invoked /bluemixiphone-contest_dev/helloSwift with id fd26bc85abb14b16b6e8e31fec108da3
response:
{
    "result": {
        "greeting": "Hello stranger!"
    },
    "status": "success",
    "success": true
}

無事に実行されています。実際の値はJSON型式で出力されていますが1行目に id が表示されています。このidは avtivation IDと呼ばれるもので結果が格納される activation に格納されます。結果を後から呼び出すには

$ wsk activation result fd26bc85abb14b16b6e8e31fec108da3
{
    "greeting": "Hello stranger!"
}

とすることで result を取得することが可能です。過去に実行した結果がこのようにlistに入るというのも面白いですね。今回作成した helloSwiftは引数を取ることが出来ます。

$ wsk action invoke --blocking /bluemixiphone-contest_dev/helloSwift --param name "tokida"
ok: invoked /bluemixiphone-contest_dev/helloSwift with id 2cb7af15115843debfa17c3b0d037787
response:
{
    "result": {
        "greeting": "Hello tokida!"
    },
    "status": "success",
    "success": true
}

このような書式で呼び出すことになります。従って name = args[“name”] のようにプログラム中で name を処理しておく必要があります。GUIが出てくると後からわかると思いますがユーザプログラムの場合には何の引数が必要なのかわからなくなるかもしれません。登録されているactionの内容を表示するためには

$ wsk action get /bluemixiphone-contest_dev/helloSwift
ok: got action /bluemixiphone-contest_dev/helloSwift
{
    "annotations": [],
    "exec": {
        "code": "func main(args: [String:Any]) -> [String:Any] {\n      if let name = args[\"name\"] as? String {\n          return [ \"greeting\" : \"Hello \\(name)!\" ]\n      } else {\n          return [ \"greeting\" : \"Hello stranger!\" ]\n      }\n  }\n\n",
        "kind": "swift"
    },
    "limits": {
        "memory": 256,
        "timeout": 60000
    },
    "name": "helloSwift",
    "namespace": "bluemixiphone-contest_dev",
    "parameters": [],
    "publish": false,
    "version": "0.0.1"
}

とすることで参照が出来ます。
いかがでしょうか。まずはトリガーを利用していなので登録された処理を呼び出した似すぎませんがサーバ側へ処理をリクエストして非同期で結果を見ることができました。

実際の利用例

ここでは、nodejs(javascript)を利用して一連の動きを作成して行きたいと思います。今回は、「Slackへ定時のメッセージを出す」という動きを OpenWhisk を利用して実装してみたとお思います。来月から会社の勤務が完全にフレックスタイム制になるのでフレックスの開始10:00、終了15:00にお知らせをする機能を作りたいと思います。現時点ではまだ日本語の取扱ができないようで文字列は??? になってしまっています。

作るものは以下の内容になります。

・Trigger:Alarmを利用して毎時実行するようにしたいと思います。
・Action : ここでは時間を取得するアクションと、Slackに送信するアクションを作ります。2つのアクションを関連付けるにはChainを利用します。
・Rule :  上記のActionとTriggerをに紐付ける

Entity Type Parameters Description
slackparam action text Slackへの基本的なパラメータの設定
time_message action 時報のメッセージを作成
timeSignal Chain action Slackへの通知するCHAIN
everyHours Trigger   1時間単位に起動するトリガ
signalSlack rule   1時間毎にSlackに送信する

Slackへの初期値を引き渡すためのAction

slackparam.js

function main(params) {
    return { "name": "bot" , "url":"https://hooks.slack.com/services/xxxxxxxx" , "text": params.text ,"channel":"" };
}

time_message.js

function main(params) {
    myDate = new Date();
    myHours = myDate.getHours();
    myMin = myDate.getMinutes();
    ret = "flex core time : " + myHours + ":" + myMin ;
    return {text:  ret  };
}

以下のコマンドを利用して登録します。

wsk action create slackparam slackparam.js
wsk action create time_message time_message.js
wsk action create timeSignal --sequence /guest/time_message,/guest/slackparam,/whisk.system/slack/post

実行すると次のような感じになります。

# wsk action invoke --blocking timeSignal
ok: invoked timeSignal with id 53b5336fd44442d3954bad6bfdaaa6fb
response:
{
    "result": {},
    "status": "success",
    "success": true
}

実際にSlackを見てみると次のようになります。しっかりJavascriptらしくTimzoneが実行してるサイトになっていますね。これはどこかでTimezoneを指定しておかないといけませんね。時間の問題は結構難しい物があるような気がします。

?

wsk trigger create everyHours --feed /whisk.system/alarms/alarm -p cron '0 10,15 * * * *' 
wsk rule create --enable signalSlack everyHours timeSignal

実行を確認するためにはPollすることが出来ます。実行後Ctrl-Cで抜けることができます。」

wsk activation poll

このように、Triggerを作りActionとRuleで結びつけることによりイベント駆動型の仕組みを作ることが出来ます。

オープンソース版OpenWhisk

もう一つの特徴であるオープンソース版の実行についてここでは見ていきたいと思います。

今回OpenWhiskはオープンソースでも提供されました。実際のBluemix上のOpenWhiskの実行環境がどのようなものかはこれだけではわかりませんが想像はすることが出来そうです。
オープンソース版のOpenWhiskは、Ubuntu14.04で動作するようになっているようです。セットアップ用のスクリプトなどもUbuntu14.04向けのものが用意されています。ソースには実際の実行プログラムだけでなく「環境周りも一式」揃っており手順に従うだけで手元で「俺のOpenWhisk」を作ることが出来ます。

環境としては、MacまたはWindows上のVagrant+VirtualBox環境上に構築することが推奨されているようです。環境としては、OpenWhiskを構成する複数のサーバはDockerコンテナとして構築されて実行されます。

オープンソース版の相違点としては一部登録されているPackageに差があります。alarmのFeedが無いのが残念です。

  1. Ubuntu14.04(本来はMacやWindows) + VirtaulPC + Vagrant環境
  2. Ubuntu14.04環境

Ubuntu14.04(本来はMacやWindows) + VirtaulPC + Vagrant環境

必要となるもの

  • 実行サーバ(Vagrantの設定をみると4GMemoryが必須のようです)、Mac上で動かすことを考えると8GMemoryがないと難しそうです。
  • IBM Bluemix Cloudantのアカウント(こちらはDBとして利用されるようで必須になるため実行サーバはInternetにつながっている必要があります)

今回は、手元のMacbook airはメモリ不足で身動きがとれないのでSoftLayer上のベアメタルサーバ(物理サーバ)を利用します。ベアメタルサーバを選択しているのはベアメタルサーバ上でVirtualBox+Vagrant環境を作るためです。仮想サーバの場合にはNextedが許可されてないのでVirtualBoxが動作しないのでこのような選択をしました。時間課金のベアメタルサーバがあるので検証だけであればある程度の動作を確認することが出来ます。

サーバの構成

OpenWhiskは以下のサーバで構成されています。(名前はDockerイメージの名称を掲載してます)

serviceとして起動しているもの
* Nginx
* Gliderlabs/registrator
* Whisk/kafka
* Whisk/zookeper
* Whisk/consul

coreとして起動しているもの
* Whisk/dispatcher
* Whisk/loadbalancer
* Whisk/controller

リクエストから起動しているもの
* whisk/nodejsaction

どのような仕組みで動いているかはこれらのcoreを見ていくと良さそうですね。

実際にベアメタルサーバ上に導入するための手順は以下のようになります。基本的にはマニュアルどおりになります。

virtualboxの導入

ログイン実施後に
/Etc/atp/source.listに以下を追記します。
deb http://download.virtualbox.org/virtualbox/debian trusty contrib

以下のコマンドを実行して導入をします。

sudo wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install virtualbox

Vagrantの導入

sudo wget https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.deb
sudo dpkg -i vagrant_1.8.1_x86_64.deb

CloudantへのDBの作成

これはどこで実行してもよいのですがCloudantをオーダしておきます。Bluemix上でサービスをオーダするのが一番簡単です。ここではcfコマンドが実行できる環境にあるkとを前提にしいます。

# Create a Cloudant service
cf create-service cloudantNoSQLDB Shared cloudant-for-openwhisk
# Create Cloudant service keys
cf create-service-key cloudant-for-openwhisk openwhisk
# Get Cloudant service keys
cf service-key cloudant-for-openwhisk openwhisk
  • ここからVagrant環境とホスト側のUbuntuと作業があるので注意して実行します。

OpenWhiskの入手

Ubuntu上でOpenWhiskのコードを取得します。

git clone https://github.com/openwhisk/openwhisk.git
cd openwhisk

次に設定ファイルに先ほどのCloudantの設定を入力します。

cp template-cloudant-local.env cloudant-local.env

先ほどの内容を cloudant-local.env に記入します。

Vagrantの実行とOpenWhiskの導入

次にVagrant環境を起動します。

cd tools/vagrant
ENV=shared vagrant up

ここでSharedをすることでローカルのディレクトリがvagrant環境上でも利用できる事になっています。(Varantをにログインして、中でセットアップを実行する)

vagrant ssh 
tools/cloudant/createImmortalDBs.sh <cloudant username> <cloudant password>
(cd tools/ubuntu-setup && source all.sh)

一旦 logout して reload します

logout 
vagrant halt
ENV=shared vagrant up

再度 vagrant ssh でログインします。次に環境をビルドし実行します。

cd openwhisk
ant clean build deploy
ant run

正常に稼働していると docker ps で先ほどのサービス群が起動してることがわかります。起動には結構時間がかかりました。

利用ユーザの作成

次にユーザを作成します。Bluemixの場合にはログインID該当すると思います。ここで作成したユーザ名がそのままnamespace名として利用されます。環境変数を読み込んでから管理コマンドを実行します。

wskadmin user create testuser

これで作成が出来ます。このユーザに紐づくIDをメモしておきます。

wskadmin user get testuser
a2db7ff8-80ad-4100-8ea9-a3a147fbb3d7:7BEXXlNYqE76OLDstI4jUrasjmsEiWAoQ7ujdycd9eIxaNbTlYG2LPUxmXCeqGlB

これで利用する環境が用意できました。以後設定を行うことでUbuntu側で作業をすることが出来ます。(Vagrant環境は「サーバ」として、Ubuntu側をクライアントとして利用できます)

Ubuntu側には bin/ ディレクトリ以下に wsk コマンドが用意されていますのでPATHを通しましょう。openwhisk/tools/ubuntu-setup/bashprofile.shに環境変数を設定してくれるシェルが用意されています。

Wskコマンドを利用する際には先にサーバとIDを設定することでリモートの環境に接続することが出来ます。には先ほどユーザをさくせした時のkeyを入力します。
wskコマンドに接続と認証をセットします。

wsk property set --apihost 192.168.33.13 --auth <auth key>

後は普通にコマンドがリモートから実行する事が出来ます。

wsk action invoke /whisk.system/samples/echo -p message hello --blocking --result
{
    "message": "hello"
}

このようになると後はBluemix上の環境と同じですね。リモートから利用することが出来ます。tcp/ipレベルで通信ができていば外部の端末からも同様に利用できるはずです。OpenWhiskはアクションなどをユーザが自由に組み込めるため通常の利用においてはサーバ側に何か処理を追加しなくても問題ないと思いますがローカルで環境があることから欲しい機能などを追加してくことが出来るかもしれません。

Ubuntu14.04環境

次にサーバとしてUbuntu14.04を用意して直接サーバソフトウェアを導入してみようと思います。内部的にはVagrantと同様のものが出来るはずです。

必要となるもの

  • 実行サーバ(SoftLaeyrの仮想サーバ1core,4Gメモリの仮想サーバを利用)
  • IBM Bluemix Cloudantのアカウント(こちらはDBとして利用されるようで必須になるため実行サーバはInternetにつながっている必要があります)

導入

起動後にログインし、以下のコマンドを実行していくことで導入が出来ます。同じような感じなのでコマンドだけ列挙しておきます。

adduser vagrant
apt-get install git
git clone https://github.com/openwhisk/openwhisk.git
cd openwhisk
echo "OPEN_WHISK_DB_USERNAME=<cloudant username>" > cloudant-local.env
echo "OPEN_WHISK_DB_PASSWORD=<cloudant password>" >> cloudant-local.env
tools/cloudant/createImmortalDBs.sh <cloudant username> <cloudant password>
(cd tools/ubuntu-setup && source all.sh)
ant clean build deploy
ant run

ビルド時に以下のエラーが表示されますがとでますがもう一度実行すると成功となります。実際にant run を実行すると起動するまでに15分程度(!)かかりますが起動できます。

    [exec] /root/openwhisk/tools/docker/dockerWithRetry.sh: line 54: 28461 Killed                  eval docker $DOCKER_ARGS
BUILD FAILED
/root/openwhisk/build.xml:39: The following error occurred while executing this line:
/root/openwhisk/core/build.xml:12: The following error occurred while executing this line:
/root/openwhisk/core/swiftAction/build.xml:11: exec returned: 222

続いてユーザを作成すればあとはこれまでと同じ方法で利用可能です。

$wskadmin user create testuser
83bf9ad2-1802-48d1-a0aa-e1c6d08f1580:xHF9RyOm3BO9YCpyfYXPdXPOgbauwAHhxhEdcJYR4yyQ3dpOFTOZBUjoZ3M0Xf82
$wsk property set --auth $(cat config/keys/auth.guest)

Packageが多く提供されてくるとイベント駆動型の処理を一元的に管理する事が出来るシステムを構築できますね。占有で動く環境が作れるのは面白いものですね。

まとめ

サーバレスアーキテクチャ、クライアントとバックエンドだけの2Tireアーキテクチャ、少し意味合いは違いますがマイクロサービスなど、呼び方は沢山ありますがこういったシステムを実行する環境が色々提案されています。今回のOpenWhiskもそう言った候補の一つとなっていくことかと思います。昨今、企業は様々な処理を行うサービスをAPIとして提供を始めています。クラウドコンピューティングの世界でも多くの部品はAPIで連携して利用されることが当たり前のようになってきています。そういった中これらのAPIをどのように結びつけていくかということが必要となってきますがOpenWhiskは、APIを繋ぐ部分の環境を提供してくれるサービスと言えるでしょう。iOSのSDKを提供している面からもクライアントとバックエンドの2-tireアーキテクチャ的な事もこれから進んでいくことと思われます。

現在、何かのシステムの全ての処理をこのようにつくり上げるのはまだ難しい物があるかもしれせん。とはいえ一般的に広く利用されているサービスとしてはIFTTT等があります。IFTTTでは世の中に有るかなり多くのサービスをサポートしており利用者はGUIから簡単にイベント駆動型の処理を作っていく事が出来ます。OpenWhiskではその処理自体を自分で作ることができるのでより柔軟に用途に合わせて利用できる可能性があります。

また利用にあたりコストがトランザクション(従量)で行われるように成る点も従来サービスとは違うところであります。これにより実際にどれくらいの処理が「いくら」ということになります。他のクラウドサービスでも同様ですがこれからはもっと厳密にどの程度の処理速度を担保できるのか、メモリは指定できるのか処理自体のログは管理できるのかと色々課題も行くことかと思いますがひとつの流れとしてより従量課金化していくサービスとしても注目です。

IBMのBluemixのサービス全体をみるとPaaS、Docker実行環境、VM実行環境に続き4番目の実行環境の提供です。ようやくイベント駆動型の処理系が出てきたので今後の発展が楽しみです。さらにオープンソースであることから他のクラウドやオンプレミスで実行をさせるユーザも増えてくる可能性がありそちらの面からも楽しみなソフトウェア・プラットフォームとなりそうです。

この記事で何かOpenWhiskに興味を持ってもらえなにかプログラムを作っていただけたらと思います。個人的には何か今まで持っているプログラムをOpenWhiskに移植してみようと考えています。

参考文献一覧

参考記事