【ハンズオン資料】IBM Bluemix OpenWhisk もくもく会


IBM Bluemix OpenWhiskのもくもく会資料。

・IBM Swift Sandbox - Xcodeをインストールせず、Swiftコードのテストが可能
 https://swiftlang.ng.bluemix.net
・IBM Swift KITURA - Swiftウェブアプリ開発プラットフォーム
 https://github.com/IBM-Swift/Kitura
・IBM Bluemix OpenWhisk
 http://www.ibm.com/cloud-computing/bluemix/openwhisk/
・IBM Bluemix OpenWhisk入門
 https://new-console.ng.bluemix.net/docs/openwhisk/index.html

事前準備(必ず確認してください。)

・IBM Bluemix アカウント取得。
 http://ibm.biz/bluemixfree
・CF(Cloud Foundry) CLI Install
 https://github.com/cloudfoundry/cli/releases
・Bluemix CLI Install
 http://clis.ng.bluemix.net/ui/home.html
・CLIを使う際には「pip」のインストールが必要。(Python 2.7)
 https://console.ng.bluemix.net/openwhisk/cli
・pipのインストール
 https://pip.pypa.io/en/stable/
・IBM Bluemixのリージョンや作業スペースを確認

OpenWhisk アーキテクチャ

今回のハンズオンでは、このアーキテクチャを元にOpenWhiskの動きを理解(把握)していきたいと思います。
IBM Bluemix OpenWhiskのTrigger, Rule, Action, Invokeの役割や関係性を理解することで、皆様の業務上もしくは個人のアプリ(サービス)とどのように連携できてどんなメリットがあるのか、何が変わるのかを話し合いながら今回のハンズオンを楽しんでいただければと思います。

Try OpenWhisk!

OpenWhiskの初期画面

CLIやGUIでの開発、ログの確認、OpenWhiskについて学ぶことができる、4つのメニューがあります。

ようこそOpenWhiskへ"Hello":CLI

下記の手順で開発環境の構築を完了しましょう。
https://console.ng.bluemix.net/openwhisk/cli

OpenWhiskアクションの作成

アクションとは、IBM Bluemix OpenWhisk プラットフォームで実行されるステートレスなコード・スニペットです。JavaScript 関数、Swift 関数、または、Docker コンテナーにパッケージした実行可能なカスタム・プログラムをアクションにできます。

・hello.jsファイルを作成します。

hello.js
function main() {
   return {payload: 'Hello world'};
}

・Create Action(アクション名:helloAction)
wsk action create helloAction hello.js

・Actionをクラウドに配置(Invok)
wsk action invoke --blocking helloAction

・Actionリストを表示
wsk activation list

Action upgrade

パラメーターを受け取るようにアクションを修正してみます。

hello.js
function main(params) {
   return {payload:  'Hello, ' + params.name + ' from ' + params.place};
}

・Actionを更新
wsk action update hello hello.js

・パラメーターを設定し、Actionを起動(name:joohoun, place:Tokyo)
 ・"--result"オプションをつけることによって結果がする表示される。
wsk action invoke --blocking --result hello --param name 'joohoun' --param place 'Tokyo'

・パラメーターを固定させる
オプション「--param」を使って「place」を「Japan Tokyo」に設定することで、次回からは nameオプションのみで起動してもplaceが設定されます。

wsk action update hello --param place 'Japan Tokyo'

wsk action invoke --blocking --result hello --param name 'Yokoi'
※ この状態で、「place」を指定して実行すると、アクションにバインドされた値を上書きします。(固定された値は変更なし)

外部のAPIを呼び出す

weather.js
 var request = require('request');

 function main(msg) {
     var location = msg.location || 'Vermont';
     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;
         var output = 'It is ' + temperature + ' degrees in ' + location + ' and ' + text;
         whisk.done({msg: output});
     });

     return whisk.async();
 }

・Action Create
wsk action create weather weather.js

・地域を指定してActionを実行
wsk action invoke --blocking --result weather --param location 'Japan, Tokyo'

Trigger&Rule

IBM Bluemix OpenWhisk のトリガーとルールにより、プラットフォームにイベント・ドリブン機能がもたらされます。外部および内部のイベント・ソースからのイベントは、トリガーを通じてチャネル設定され、ルールによって許可されたアクションがこれらのイベントに対応します。

【トリガー】
トリガーは、ある種のイベントに対して指定されたチャネルです。以下は、トリガーの例です。
・ロケーション更新イベントのトリガー。
・Web サイトへの文書アップロードのトリガー。
・着信 E メールのトリガー。

トリガーは、キーと値のペアのディクショナリーを使用して発生させる (アクティブ化する) ことができます。このディクショナリーは、イベント と呼ばれることもあります。アクションと同様に、トリガーを発生させるたびに、アクティベーション ID が生成されます。

【ルール】
ルールは 1 つのトリガーを 1 つのアクションに関連付けます。トリガーが発生するたびに、該当のアクションが、トリガー・イベントを入力として起動されます。

適切なルール・セットを使用して、単一のトリガー・イベントで複数のアクションを起動することや、 複数のトリガーからのイベントへの対応としてアクションを起動することが可能です。

トリガー作成と発生

・トリガー作成
wsk trigger create locationUpdate

・トリガーリスト出力
wsk trigger list

・トリガー発生
wsk trigger fire locationUpdate --param name "joohoun" --param place "Japan, Tokyo"

ルール:トリガーとアクションの関連付け

・ルールを作成
wsk rule create --enable myRule locationUpdate hello

・locationUpdate トリガー発生
 イベントを発生させるたびに、イベントのパラメーターを使用して hello アクションが呼び出されます。
wsk trigger fire locationUpdate --param name "joohoun" --param place "Japan, Tokyo"

・最新のアクティベーションをチェックして、アクションが呼び出されたことを確認
wsk activation list --limit 1 hello
wsk activation result {アクティベーション ID}

GUIでもAction、Trigger、Ruleを使えます。

BMXUG(Bluemix User Group)コミュニティ

「Bluemix」の「今」をフォローしましょう!

・Facebook : Bluemixユーザーグループ
・Qiita : Bluemix Qiitaページ
・Doorkeeper:Doorkeeperコミュニティ
・Slack : Bluemix User Group(BMXUG)の交流用
・stackoverflow : stackoverflow(コミュニティQ&A)
・Twitter : #bmxug