openwhisk introduction public
TRANSCRIPT
Project OpenWhiskのご紹介
2016/3/18第32回 PaaS勉強会
2016 @ibmamnt
自己紹介 ~
名前: 天野 武彦
所属:IBM 東京ソフトウェア開発研究所
主な活動: 先端クラウド技術の推進・啓蒙
(エリア: Cloud Foundry, DevOps, OpenStack, OpenWhisk 等)
趣味: 目下のところ育児に没頭
Twitter: @ibmamnt
ブログ: http://amanoblog.wordpress.com
2016 @ibmamnt
Project OpenWhisk
� IBM Thomas J. Watson Research Centerの Cloud
Programing Technology Groupで研究開発
�イベントに基づくプログラミングサービス
whisk (v) :
to move nimbly and quickly.Source: merriam-webster.com
2016 @ibmamnt
2015 Softlayer & Bluemix Summit 基調講演
「仮想マシン(OpenStack)、ポータビリティ(Container)、コントロール(PaaS)の層にも注目すべ
きだ。Bluemixは、 OSS(Open Source Software)の「Cloud Foundry」をベースにするPaaSだが、それ
は全体の一部に過ぎないこと、および「Next」と表記された空白部分が存在することである。」
( http://it.impressbm.co.jp/articles/-/12762?page=2 から引用)
“特に後者のNextは何を意味するのか?浦本氏は特に言及しなかった”
2016 @ibmamnt
そんなわけで、お仲間入り
OpenWhisk
2016 @ibmamnt
IBM Bluemix にもお仲間入り
アプリの構築を好きな方法でアプリを作動させるために、最も広く知られたオープン・ソースのコ
ンピューティング・テクノロジーを組み合わせて使用します。その
後、残りの処理は Bluemix に任せます。
軽量 フルスタック
OpenWhisk
Event-driven apps,
deployed in a serverless
environment.
2016 @ibmamnt
OpenWhisk の特徴
�イベントに基づくプログラミングモデル
– イベントが発生すると1回起動し終了する。
�複数言語、Dockerコンテナ対応
–JavaScript, Swift (その他も計画中)
–Dockerコンテナ(C/C++, Golang 等なんでもあり)
�Mobile バックエンドとして機能できる
– iOS SDK を提供 (Androidは開発中)
�クラウド上で動作させスケールさせることができる
–現時点では IBM Bluemix がサービス提供(Experimental)
2016 @ibmamnt
OpenWhisk 概念図
詳細は後ほど
2016 @ibmamnt
そういえば、ここって
オープンPaaS勉強会だ
よね?
2016 @ibmamnt
OpenWhisk プロジェクト
https://github.com/openwhisk/openwhisk
• 開発構想時から OSS にすることを想定(ベンダーロックインを排除)
• Cloud Foundry と似たようなエコシステムを目指す
• 技術パートナープログラムは近く発表予定
2016 @ibmamnt
さて、PaaS か?
�PaaSがアプリケーションを実⾏する基盤と定義するなら
ば・・・ある意味 PaaSと呼べるかも知れません
Cloud Foundry → 本格的なWEBアプリとマイクロサービ
スの基盤(常時起動)
OpenWhisk → イベント駆動型の小型アプリケーションの
基盤(イベント毎に起動)
2016 @ibmamnt
OpenWhisk 基本的な仕組み
2016 @ibmamnt
OpenWhisk 基本的な仕組み
� action
–ステートレスな(小さな)コード
–複数の action を登録できる
� trigger
–イベントの受け口
� rule
– trigger と action を紐付ける。trigger が発火すると action がパラメータを受けて実行される
� package
–外部サービスを利用するためのモジュール群
– Bluemix ではWatson, Weather などのパッケージがある
2016 @ibmamnt
A Action: ステートレス関数(イベントハンドラー)
function main(params) {
console.log(“Hello “ + params.name);
return { msg: “Goodbye “ + params.name) };
}
2016 @ibmamnt
では、”Hello Whisk!”
function main() {
return { message: 'Hello world' };
}
$ wsk action create hello hello.js
ok: created action hello
$ wsk action list
actions
/IBMAMNT_dev/hello private
wsk action invoke --blocking hello
ok: invoked hello with id 4ba23dbcee7a4481a6e1e19818c745ec
response:
{
"result": {
"message": "Hello world"
},
"status": "success",
"statusCode": 200
}
activation id
※ main() が必要です
2016 @ibmamnt
外部API を呼び出す(パラメータ付き)
var request = require('request');
function main(msg) {
var location = msg.location || 'Tokyo';
var url = 'https://query.yahooapis.com/v1/public/yql?q=select item.condition from weather.forecast
where woeid in (select woeid from geo.places(1) where text="' + location + '")&format=json';
request.get(url, function(error, response, body) {
var condition = JSON.parse(body).query.results.channel.item.condition;
var text = condition.text;
var temperature = condition.temp;
temperature = 5*(temperature - 32)/9;
var output = 'It is ' + temperature + ' degrees in ' + location + ' and ' + text;
whisk.done({msg: output});
});
return whisk.async();
}
$ wsk action create weather weather.js
ok: created action weather
$ wsk action invoke weather -b -p location 'Tokyo' --result
{
"msg": "It is 10 degrees in Tokyo and Fair"
}
$ wsk action invoke weather -b -p location 'Sapporo' --result
{
"msg": "It is -2.2222222222222223 degrees in Sapporo and Light Snow
Shower"
}
パラメータ
パラメータ
2016 @ibmamnt
Action: シーケンス
A
:=
アクションを連鎖処理できます
(※今のところ他には無い特徴)
2016 @ibmamnt
Trigger
18
Trigger: 様々なイベントのクラス(feed)
OpenWhisk
2016 @ibmamnt
T A
event event handler
R Rule: Trigger から Action へのマッピング
Rule
2016 @ibmamnt
trigger と rule を作成する
$ wsk trigger create locationUpdate
ok: created trigger locationUpdate
$ wsk trigger list
triggers
/IBMAMNT_dev/locationUpdate private
$ wsk rule create myrule locationUpdate weather
ok: created rule myrule
$ wsk rule enable myrule
ok: rule myrule is activating
private
trigger の作成
rule の作成
trigger action
2016 @ibmamnt
trigger を fire (wsk trigger fire)
� trigger を発火させると action 結果は activation リストに格
納されます
$ wsk trigger fire locationUpdate -p location 'Tokyo'
ok: triggered locationUpdate with id 3ef2c8d3d5054307b70a1a63e4554365
$ wsk trigger fire locationUpdate -p location 'Kyoto'
ok: triggered locationUpdate with id 2239603302a94930ac2dd8d295eb74d2
$ wsk activation list
activations
62986517dd034ee7b660dc9fe92e7067 weather
b43d07d0b8a94e5299d84beadc5bf000 weather
$ wsk activation result b43d07d0b8a94e5299d84beadc5bf000
{
"msg": "It is 8.88888888888889 degrees in Tokyo and Mostly Cloudy"
}
$ wsk activation result 62986517dd034ee7b660dc9fe92e7067
{
"msg": "It is 17.22222222222222 degrees in Kyoto and Mostly Cloudy"
}
2016 @ibmamnt
trigger の発火について
�自アプリケーションから OpenWhisk の REST API をたたく
� iOS SDK からたたく
�Package の Feed を使って起動
この部分
※ 現時点では Package 作成のドキュメントが整備されていません(今後に期待)。
2016 @ibmamnt
REST apiを直接たたく
• API end point
openwhisk.ng.bluemix.net/api/v1
• Swagger ドキュメントhttp://petstore.swagger.io/?url=https://raw.githubusercontent.com/openwhisk/openwhisk/master/core/controller/src/resources/whiskswagger.json
OpenWhisk をマイクロサービスとして活用し、WEBアプリケーションの機能拡張を⾏え
ます
2016 @ibmamnt
REST API デモ
デモ
Local Whisk
thumbnail changes tags
Cloud Foundry アプリ DBサービス
2016 @ibmamnt
Mobileバックエンド
� wsk sdk install iOS
� SDKが⼊っているのでそれを利⽤します
デモ
2016 @ibmamnt
P Package: Actions と feedsの集合
2016 @ibmamnt
package
�action や trigger などをまとめたもの
– trigger の発火起点を “feed” と呼びます
�Feed の例
–定時起動 (cron), DB の変更等
� IBM Bluemix 上でのパッケージ
$ wsk package list /whisk.system
packages
/whisk.system/slack shared
/whisk.system/github shared
/whisk.system/weather shared
/whisk.system/samples shared
/whisk.system/system shared
/whisk.system/watson shared
/whisk.system/util shared
/whisk.system/cloudant shared
/whisk.system/messagehub shared
/whisk.system/alarms shared
2016 @ibmamnt
実用的な feed
�DB内容変更 (Cloudant package)
�Webhook (GitHub / Slack package)
�定期起動 (alarms package)
–cron job 形式形式形式形式でででで 定期的定期的定期的定期的ににににtrigger をををを発生発生発生発生させるさせるさせるさせる
2016 @ibmamnt
Dockerサポート
� stdin/stdoutをサポートするコマンド実⾏の Dockerコンテ
ナを実⾏
$ wsk sdk install docker
$ docker login -u <user> -p <password>
$ cd dockerSkeleton
$ buildAndPush.sh <docker-hub-tag>
$ wsk action create --docker myAction <docker-hub-tag>
※現時点(2016/3月)では、public docker hub にのみ対応しています
2016 @ibmamnt
Node-RED にWhisk node 追加(予定)
2016 @ibmamnt
OpenWhisk Architecture
2016 @ibmamnt
wsk cli
iOS
SDK
一般のアプリ
Controller
Apache Kafka
Consul
Load Balancer
master
slave
Activator
REST API
rule の処理
InvokerInvokerInvokerExecutor
triggerの処理
actionの処理
概要図
couchdb
Docker Hub
2016 @ibmamnt
読むべき OpenWhisk ソースコード
� core
– OpenWhisk 本体。dispatcher (Activator, Invoker), Load Balancer
などのコード
– Scala 言語で書かれている
� services
– Kafka サービス等
� catalog
– Whisk のパッケージ
2016 @ibmamnt
まとめ
�OpenWhisk はクラウド環境にイベント駆動型のアプリ実⾏
環境をもたらしてくれます
�ただ、⽣まれたばかりのひよこちゃんなので温かく⾒守りま
しょう
OpenWhisk です
2016 @ibmamnt
参考資料
� OpenWhisk概要 (http://niccloud.niandc.ne.jp/?p=1933)
~ 自前 VM環境に OpenWhisk を導入する方法の解説があり
ます
� IBM DeveloperWorks
(https://developer.ibm.com/openwhisk/) ~ 最新情報はこちらで
2016 @ibmamnt
せつめいのおわり