openwhisk introduction public

36
Project OpenWhiskのご紹介 2016/3/18 32PaaS勉強会

Upload: takehiko-amano

Post on 15-Apr-2017

606 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: OpenWhisk introduction public

Project OpenWhiskのご紹介

2016/3/18第32回 PaaS勉強会

Page 2: OpenWhisk introduction public

2016 @ibmamnt

自己紹介 ~

名前: 天野 武彦

所属:IBM 東京ソフトウェア開発研究所

主な活動: 先端クラウド技術の推進・啓蒙

(エリア: Cloud Foundry, DevOps, OpenStack, OpenWhisk 等)

趣味: 目下のところ育児に没頭

Twitter: @ibmamnt

ブログ: http://amanoblog.wordpress.com

Page 3: OpenWhisk introduction public

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

Page 4: OpenWhisk introduction public

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は何を意味するのか?浦本氏は特に言及しなかった”

Page 5: OpenWhisk introduction public

2016 @ibmamnt

そんなわけで、お仲間入り

OpenWhisk

Page 6: OpenWhisk introduction public

2016 @ibmamnt

IBM Bluemix にもお仲間入り

アプリの構築を好きな方法でアプリを作動させるために、最も広く知られたオープン・ソースのコ

ンピューティング・テクノロジーを組み合わせて使用します。その

後、残りの処理は Bluemix に任せます。

軽量 フルスタック

OpenWhisk

Event-driven apps,

deployed in a serverless

environment.

Page 7: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk の特徴

�イベントに基づくプログラミングモデル

– イベントが発生すると1回起動し終了する。

�複数言語、Dockerコンテナ対応

–JavaScript, Swift (その他も計画中)

–Dockerコンテナ(C/C++, Golang 等なんでもあり)

�Mobile バックエンドとして機能できる

– iOS SDK を提供 (Androidは開発中)

�クラウド上で動作させスケールさせることができる

–現時点では IBM Bluemix がサービス提供(Experimental)

Page 8: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk 概念図

詳細は後ほど

Page 9: OpenWhisk introduction public

2016 @ibmamnt

そういえば、ここって

オープンPaaS勉強会だ

よね?

Page 10: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk プロジェクト

https://github.com/openwhisk/openwhisk

• 開発構想時から OSS にすることを想定(ベンダーロックインを排除)

• Cloud Foundry と似たようなエコシステムを目指す

• 技術パートナープログラムは近く発表予定

Page 11: OpenWhisk introduction public

2016 @ibmamnt

さて、PaaS か?

�PaaSがアプリケーションを実⾏する基盤と定義するなら

ば・・・ある意味 PaaSと呼べるかも知れません

Cloud Foundry → 本格的なWEBアプリとマイクロサービ

スの基盤(常時起動)

OpenWhisk → イベント駆動型の小型アプリケーションの

基盤(イベント毎に起動)

Page 12: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk 基本的な仕組み

Page 13: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk 基本的な仕組み

� action

–ステートレスな(小さな)コード

–複数の action を登録できる

� trigger

–イベントの受け口

� rule

– trigger と action を紐付ける。trigger が発火すると action がパラメータを受けて実行される

� package

–外部サービスを利用するためのモジュール群

– Bluemix ではWatson, Weather などのパッケージがある

Page 14: OpenWhisk introduction public

2016 @ibmamnt

A Action: ステートレス関数(イベントハンドラー)

function main(params) {

console.log(“Hello “ + params.name);

return { msg: “Goodbye “ + params.name) };

}

Page 15: OpenWhisk introduction public

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() が必要です

Page 16: OpenWhisk introduction public

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"

}

パラメータ

パラメータ

Page 17: OpenWhisk introduction public

2016 @ibmamnt

Action: シーケンス

A

:=

アクションを連鎖処理できます

(※今のところ他には無い特徴)

Page 18: OpenWhisk introduction public

2016 @ibmamnt

Trigger

18

Trigger: 様々なイベントのクラス(feed)

OpenWhisk

Page 19: OpenWhisk introduction public

2016 @ibmamnt

T A

event event handler

R Rule: Trigger から Action へのマッピング

Rule

Page 20: OpenWhisk introduction public

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

Page 21: OpenWhisk introduction public

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"

}

Page 22: OpenWhisk introduction public

2016 @ibmamnt

trigger の発火について

�自アプリケーションから OpenWhisk の REST API をたたく

� iOS SDK からたたく

�Package の Feed を使って起動

この部分

※ 現時点では Package 作成のドキュメントが整備されていません(今後に期待)。

Page 23: OpenWhisk introduction public

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アプリケーションの機能拡張を⾏え

ます

Page 24: OpenWhisk introduction public

2016 @ibmamnt

REST API デモ

デモ

Local Whisk

thumbnail changes tags

Cloud Foundry アプリ DBサービス

Page 25: OpenWhisk introduction public

2016 @ibmamnt

Mobileバックエンド

� wsk sdk install iOS

� SDKが⼊っているのでそれを利⽤します

デモ

Page 26: OpenWhisk introduction public

2016 @ibmamnt

P Package: Actions と feedsの集合

Page 27: OpenWhisk introduction public

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

Page 28: OpenWhisk introduction public

2016 @ibmamnt

実用的な feed

�DB内容変更 (Cloudant package)

�Webhook (GitHub / Slack package)

�定期起動 (alarms package)

–cron job 形式形式形式形式でででで 定期的定期的定期的定期的ににににtrigger をををを発生発生発生発生させるさせるさせるさせる

Page 29: OpenWhisk introduction public

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 にのみ対応しています

Page 30: OpenWhisk introduction public

2016 @ibmamnt

Node-RED にWhisk node 追加(予定)

Page 31: OpenWhisk introduction public

2016 @ibmamnt

OpenWhisk Architecture

Page 32: OpenWhisk introduction public

2016 @ibmamnt

wsk cli

iOS

SDK

一般のアプリ

Controller

Apache Kafka

Consul

Load Balancer

master

slave

Activator

REST API

rule の処理

InvokerInvokerInvokerExecutor

triggerの処理

actionの処理

概要図

couchdb

Docker Hub

Page 33: OpenWhisk introduction public

2016 @ibmamnt

読むべき OpenWhisk ソースコード

� core

– OpenWhisk 本体。dispatcher (Activator, Invoker), Load Balancer

などのコード

– Scala 言語で書かれている

� services

– Kafka サービス等

� catalog

– Whisk のパッケージ

Page 34: OpenWhisk introduction public

2016 @ibmamnt

まとめ

�OpenWhisk はクラウド環境にイベント駆動型のアプリ実⾏

環境をもたらしてくれます

�ただ、⽣まれたばかりのひよこちゃんなので温かく⾒守りま

しょう

OpenWhisk です

Page 35: OpenWhisk introduction public

2016 @ibmamnt

参考資料

� OpenWhisk概要 (http://niccloud.niandc.ne.jp/?p=1933)

~ 自前 VM環境に OpenWhisk を導入する方法の解説があり

ます

� IBM DeveloperWorks

(https://developer.ibm.com/openwhisk/) ~ 最新情報はこちらで

Page 36: OpenWhisk introduction public

2016 @ibmamnt

せつめいのおわり