Article information
RevisionsShow article in Markdown
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

This post is Private. Only a writer or those who know its URL can access this post.

posted at

updated at

OpenWshikハンズオンテキスト(GUI編)

OpenWhiskとは

OpenWhiskは、マイクロサービスを実装するための手段の一つである Function as a Serviceです。一般的にServerlessという表現がさえれることも多いです。実際にOpenWhiskでは、処理(Action)=Functionを動かすためのプラットフォームでありユーザが serverを意識することはありません。
OpenWhiskは、OSSで提供されており自身のサーバ環境にインストールして動作させることが可能です。今回のハンズ・オンではOpenWhiskのサービスを提供している IBM Bluemix PaaSを利用して行います。

以下に私の書いたドキュメントがありますので参考にして下さい。

事前準備

今回のハンズ・オン自体ではcliは利用しません。

今回の作業内容

ハンズ・オンでは代表的なOpenWhiskの動作を学ぶために以下のようなアプリケーションを作成します。

Kobito.j66PAn.png

  1. JsonデータをCloudantに投入する(この際に text: "message" を入れておく)
  2. New Documentが作成されたCloudantはOpenWhiskと連携し処理を起動する(Trigger/Feed)
  3. OpenWhiskの処理(Action)が呼出され作成された文書を読み出します
  4. 最終的に読み出した文章のtextの内容を Slackへ通知します。

従来であればこのようなアプリケーションを構築する際には、Jsonデータを投入する処理側でSlackへ通知する機能を組み込むことや定期的にCloudantの状態を監視する必要がありましたがOpenWhiskの仕組みを利用することで処理を実装することが可能となります。

はじめに

準備

Cloudantの準備

Dashboardから、「カタログ」を選択します。

Kobito.wPg6Yb.png

「Cloudant NoSQL DB」を選択します。以下の情報を設定して「作成」をクリックしてインスタンスを開始します。
* サービス名: handson-cloudant
* 資格情報名: Credentials-1 (ディフォルト)
* プラン: Lite (無料)

Kobito.xhnQAv.png

正常に開始されると以下の画面が表示されます。「LAUNCH」をクリックしてコンソールを起動します。

Kobito.diYupz.png

コンソールは以下のようになっています。

Kobito.gBAp9J.png

ひだりのメニューから「Database」を選択します。

Kobito.m2A8Yr.png

今回利用するための新規のデータベースを作成する為に「Create Database」をクリックしデータベース名handson-openwhisk-dbを入力してデータベースを作成します。

Kobito.USlhv0.png

作成が正常にされると以下のようになります。

Kobito.gO4H9w.png

この画面は後でデータの投入を行う際に利用するのでブラウザをそのままにしておいて下さい。仮にブラウザをクローズしてしまった場合にはBluemixの管理コンソールから再度開くことが可能です。

Kobito.IXSg3o.png

サービス→ダッシュボードを選択しサービスを探すと先ほど作成したインスタンスを見つけることが出来ます。

Kobito.ZMoTwj.png

これでCloudant NoSQL DB側の準備はおわりです。

Slackの準備

Slack側では外部からメッセージを投稿するために「Incorrect Webhock」という機能を利用します。

上記のTEAMNAMEは各自の自身のアドレスを利用して下さい。

Kobito.qOtom0.png

Manageのメニューから「Custom Integration」を選択します。

Kobito.A9AQ2Y.png

次に、「Incoming WebHook」を選択します。

Kobito.ISBCqI.png

新しい接続をつくるため「Add Configuration」を選択します。

Kobito.luaNji.png

接続をおこないたいチャンネルを選択して「Add Incomming WebHooks integaration」をクリックします。

Kobito.253rJD.png

上記で表示される「WebHook URL」をコピーして保管しておきます。

これでSlack側の準備は終わりです。

Cloudantの新規文書のIDを取得するActionの作成

OpenWhiskへのログイン

https://console.ng.bluemix.net/openwhisk/ にアクセスをします。

Kobito.2PRat0.png

[Bluemixにログイン]をクリックしてログインを行います。

Kobito.PwqRR9.png

開発を行うため、[開発]をクリックします。

Kobito.ZGk3cm.png

こちらの画面がOpenWhiskのGUI画面となります。今回のハンズ・オンではおもにこのGUIを利用して行っていきます。通常であればCLIコマンドにて同じことを行うことが出来ます。

Cloudantの新規ドキュメントの作成を継起にActionを実行する

まずはCloudantに新規ドキュメントが作成されたことを検知してActionを実行する部分の流れを作成していきます。ここでは実行するActionを handson-read-document として作成します。

まずは新規のActionをConsoleから作成します。

Kobito.m4v6ZC.png

以下の内容を入力し、「アクションの作成」を実行します。

Kobito.g5YUw6.png

直接コードを編集できる画面が表示されます。

Kobito.GI6b1u.png

以下のコードを入力します。

 function main(params) {
    var msg = {};
    msg.docid = params.id;
    return msg;
 }

入力後に、「ライブにする」を実行します。

  • この「ライブ」するは「有効化」にするということのようです。
  • エディタは保存がなく常に編集すると保管されてしまうため誤った操作を行わないように気をつける必要があります。
  • 実際にコードを書く際には wsk コマンドを利用した登録をお勧めします。

動作の確認

実行を試験してみます。[▼このアクションを実行]をクリックします。

Kobito.vYFLUl.png

JSON入力のに以下の内容を記入します。

{
  "id" : "0001"
}

次に「この値を実行」して試験をしてみます。

Kobito.qKmJeE.png

上記のように実行した結果が表示されます。コード上でmsgをreturnしているのでその内容がJSON形式で表示されていることがわかります。

Cloudantの文書を読み込む処理を追加する

先ほどの作成したActionにつづいて、Cloudantの文書を読み込む処理を追加します。この処理を行うためにはコードを書く必要はなく既に用意されているPackageを利用します。OpenWhiskには多数のPackageが用意されておりコレを利用することでコードの再利用が可能です。

先ほどのAction handson-read-documentを開きます。

Kobito.3yoa0S.png

このアクションの後続処理を繋げるために「シーケンスにリンク」をクリックします。

Kobito.V8CHJC.png

すると用意されているPackageが表示されます。
* OpenWhisk対応のBluemixサービスの使用

今回はこの中の「Cloudant」を選択します。

Kobito.ujLJst.png

最初に利用するデータベースを構成します。この既存のパッケージに対して設定をいれて新しく定義することをBINDすると言います。(Cliから利用するとこのあたりの動きはもっと明確にわかります)

「NEW BINDING」をクリックします。
Kobito.cfttk9.png

新規のパッケージバインディングの設定画面になるので以下の情報を入れ保管します。

  • name: handson-cloudant-bind
  • service instance : handson-cloudant
  • dbname : handson-openwhisk-db

Kobito.VXgz1j.png

構成の保管を押すと定義(BIND)された事を示すアイコンが表示されます。

Kobito.oyts9G.png

次に今回の処理(Action)である、「read document」を選択します。この状態で「シーケンスに追加」をクリックします。

Kobito.WjWO6y.png

追加すると以下のような画面が表示されます。

Kobito.5lyBsa.png

  • シーケンス名:handson-read-document-cloudant

シーケンス名に名前を付けて「これは適切なようです」というボタンをクリックして保管します。

動作の確認

Cloudant側に文書を作成して実際に内容を読み込んで見たいと思います。準備で用意したCloudantのコンソールから新規の文書を作成します。以下のメニューを表示し「New Doc」を選択します。

Kobito.Mguxok.png

文書を編集して「Create Document」を選択します。以下の_idの値は変えずに、textを追加して下さい。

{
  "_id": "ef8487e1d5bc5992cc0a6b160487f78c",
  "text": "This is test message"
}

Kobito.5gycuV.png

次にOpenWhiskのシーケンス handson-read-document-cloudant の画面を開きます。

Kobito.LdCxro.png

「このシーケンスを実行」をクリックします。その際のJSON入力を以下のようにします。

{
    "id": "ef8487e1d5bc5992cc0a6b160487f78c"
}

Kobito.pt1WTy.png

そして「この値で実行」をクリックしてシーケンスを動かします。

Kobito.qlJANl.png

するとCloudantに入力されていたtextの値が取得できていることが確認できました。これで文書IDがわかれば中身を取得するという処理(Action)を作ることが出来ました。

Actionを更に拡張してSlackに投稿する

先ほど作成したシーケンスを表示します。

Kobito.43sNzl.png

この処理にさらに処理(Action)を繋げるために「拡張」をクリックします。

Kobito.52gL2I.png

今回は「SLACK」を選択します。

Kobito.J7NNA6.png

Cluodantの時と同様に設定を定義するために「New Binding」を行います。

name : handson-slack-bind (任意)
username : openwhisk (任意)
channel : 準備で設定したチャンネル
url : 準備で取得した値

Kobito.vpiIMr.png

今回設定できる処理は「post」しかないので「post」を選択して「シーケンスに追加」を実施します。

Kobito.V20eL8.png

保管して完了をクリックします。

動作の確認

先ほどの確認と同様で「このシーケンスを実行」をクリックします。2度めなので今回はJSON入力に値が入っていることが確認出来ます。

Kobito.OGKtXn.png

「この値で実行」をクリックして実行してみます。するとSlack側に新しいメッセージが通知されている事が確認できました。

Kobito.rc2uLZ.png

今回はCloudantの文書の内容をそのまま通知していますがもちろん更に処理を加えて例えば text を全て大文字に変更して通知するなどの処理を入れることも可能です。
こういったかたちでデータをJSON形式で受け渡ししながら目的の処理を行うように作る事が出来ます。

Cloudantに文章が作成されたら自動で動くように設定する

また先ほどのシーケンスを表示します。今度は自動処理を追加するので「自動化」をクリックします。

Kobito.VSVV6K.png

自動処理をするためのActionを特別に「Feed」と呼びます。また「Feed」には実際にその処理が動くための「Trigger」があります。
今回はCloudantを選択します。

Kobito.xpl3yW.png

Feedには、パッケージのBINDと同様にTriggerを定義する必要があります。ここでは「New Trigger」をクリックして定義を行います。

Kobito.5RZEHr.png

以下の様に設定を行いTriggerを追加します。

  • name: handson-trigger
  • service instance: handson-cloudant
  • dbname: handson-openwhisk-db

Kobito.uPQPlN.png

「次へ」をクリックして確認を行います。

Kobito.HB94x4.png

「これは適切内容です」をクリックするとこのルール名を入力されるように指示されますのでそのままの値で「ルールの保存」をクリックします。

Kobito.ZLBS8t.png

完了をクリックします。

動作の確認

これで全ての部品を作る事ができました。Cloudantに文書が追加されるとSlackに通知が行われるはずです。

Kobito.f9zbKz.png

{
  "_id": "23b807a924e6c62d3f0a3ff5acfec555",
  "text": "finish"
}

この文書を作成します。すると slack上にメッセージが到達していることが確認できます。

Kobito.8gKCuF.png

この動きが実際にどのようになっているかはモニター画面からも確認することが出来ます。

Kobito.7McXH5.png

上部のメニューから「モニター」をクリックします。

Kobito.QdmWLf.png

このような画面でActionの実行結果を参照することが出来ます。Activity Logは、各Action単位で出力されます。内容としてActionのOutputのJSON結果とlogs:に処理自体のログが表示されます。

課題

課題(1)

  1. 今回の処理を全てwskコマンドで実装してみて下さい。wskコマンドとGUIでは若干表現に差があるため最初わからない箇所があるかと思いますがGettingStart等を参考にして見て下さい。

課題(2)

OpenWhiskは、Function as a Serviceです。単体で完結するだけでなく外部から呼び出すことで利用の範囲が広がります。

  1. OpenWhiskで作成したActionを、Node-REDから呼び出してみましょう
  2. API Connect経由で、OpenWhiskのAPIを保護/公開するにはどのようにすればよいでしょうか
  3. OpenWhisで作成したActionを他のユーザと「共有」してみましょう
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
Article information
RevisionsShow article in Markdown
Help us understand the problem. What are the problem?