前回,OpenWhiskの概要とHello, World!まで説明しました.
末尾で書いた通り,今回はOpenWhiskでBluemixのストレージサービスのCloudantへのWriteとReadについて書きたいと思います.
まず,Cloudantとは
ビッグデータ・モバイル・IoT時代に最適な、CloudantによるNoSQLのクラウド・データベース・サービス。Webおよびモバイル・アプリの開発者に最適なJSON形式のデータを扱うドキュメント指向データベース
とIBMのサイトには説明があります.(www-01.ibm.com/software/jp/cmp/cds.htmlから引用)
NoSQLのデータベースですね〜
20GBまでは無料らしいです.
と,Cloudantの説明はさっくり終わらせて…
さっそく始めていきたいと思います.
まずは,さっき説明したCloudantの作成から〜
カタログのデータ&分析からCloudantを選択します.
画面下部にある「作成」ボタンをクリックして作成します,簡単ですね〜
で,作成が終わったら起動です.画面右の「LAUNCH」をクリックして起動します.
Cloudantのページが開けばOKです!
データベースが空の状態が初期状態なようですね.
DBを作ります.
左のバーから「Databases」をクリック,右上の「Create Database」をクリックします.
名前の入力を促されるのでここでは「testdb」とします.
左のバーの「Databases」をクリックして,一覧に「testdb」があればOKです!
一旦ブラウザ側の操作は終わりです.
お次はコンソール側です.
NameSpaceの登録からです.
$ wsk property set --namespace myBluemixOrg_myBluemixSpace
ok: namespace set to myBluemixOrg_myBluemixSpace
myBluemixOrg・・・BluemixのアカウントのID(ブラウザのコンソールの右上に表示されています,|の左)
myBluemixSpace・・・Cloudantを作成した開発スペース(デフォルトだとDevになっているはず,これもブラウザのコンソールの右上に表示されています,|の右)
Packageを更新します.
Package・・・「Action」や「Feed」をまとめたもので自分でも作成可能,いくつかサンプルも用意されている
Cloudantを作成してNameSpaceを登録したことでPackageが自動で追加されます.
Cloundantの名前でbindされるようですね.
$ wsk package refresh
None refreshed successfully!
created bindings:
Bluemix_Cloudant NoSQL DB-if_Credentials-1
updated bindings:
deleted bindings:
Packageの一覧を見てみましょう〜
下のように表示されていればOKです.
$ wsk package list
packages
/myBluemixOrg_myBluemixSpace/Bluemix_Cloudant NoSQL DB-if_Credentials-1 private binding
Cloudantの接続状況を確認します.
$ wsk package get /myBluemixOrg_myBluemixSpace/"Bluemix_Cloudant NoSQL DB-if_Credentials-1"
つらつらと情報が出ますが,必要なのは username/password/host の3つです.
あとでbindするのに使います.
接続状況を「myCloundant」という名前でbindします.
bindしておくことによって,WriteしたりReadしたりする際に一々接続状況を入力せずに済みます.
$ wsk package bind /whisk.system/cloudant myCloudant -p username 'MYUSERNAME' -p password 'MYPASSWORD' -p host 'MYCLOUDANTACCOUNT.cloudant.com'
ok: created binding myCloudant
MYUSERNAMEには先ほどのusername,MYPASSWORDには先ほどのpassword,MYCLOUDANTACCOUNTには先ほどのhost(cloudant.comが含まれていることに注意)をそれぞれ入力します.
bindされているか確認します.
$ wsk package list
/myBluemixOrg_myBluemixSpace/myCloudant private binding
ここまでで準備はおしまいです.
次からはお待ちかねのWriteとReadです!
まずはWriteから!
dbnameパラメータには最初のほうで作成したCloudantのDB名を入力します.
今回は「testdb」となります.
docパラメータにJSON形式のデータを入力して書き込みます.
今回はidに”openwhisk”,nameに”Write Test”としました.
※公式のドキュメント(https://new-console.ng.bluemix.net/docs/openwhisk/openwhisk_catalog.html#openwhisk_catalog_cloudant)だとWriteの説明でinvokeするときに「myCoudant」となっているので注意です.正しくは「myCloudant」です.
(接続状況をbindした名前にあっていれば何でもOKです)
$ wsk action invoke /myBluemixOrg_myBluemixSpace/myCloudant/write --blocking --result --param dbname testdb --param doc '{"_id":"openwhisk", "name":"Write Test"}'
{
"id": "openwhisk",
"ok": true,
"rev": "1-c5ab27b3bd569253e9530708a7865ac4"
}
上のように返ってくれば書き込み成功です!
何かしらのエラーが返ってきた場合,入力ミスしている可能性が高いです.よく見直しましょう〜
(自分も公式のドキュメントにはめられたり,どこに何を入力して良いか分からず時間がかかりました…)
Cloudantのブラウザのコンソールで書き込みできているか確認しにいきましょう.
左のバーの「Databases」をクリックして「testdb」をクリック.
「All Document」にid:openwhiskとなっているドキュメントができています.
さらに,右の鉛筆マークをクリックして中身を見てみます.
id:openwhisk
name:Write Test
となっていますね!成功です!
さてさて,お次はReadです.
先ほどWriteした内容をCloudantのブラウザ上で書き換えます.
“name”: “Write Test”
↓
“name”: “Read Test”
に書き換えて,「Save Changes」で変更を保存します.
コンソール側でReadします.
dbnameパラメータには先ほどと同じように「testdb」を入力.
idパラメータにはWriteしたデータのid:openwhisk を入力.
※例の如く公式のドキュメントが「myCoudant」となっているので「myCloudant」に修正
$ wsk action invoke /myBluemixOrg_myBluemixSpace/myCloudant/read --blocking --result --param dbname testdb --param id openwhisk
{
"_id": "openwhisk",
"_rev": "2-0379c92122499f58ffa57e0a3171c890",
"name": "Read Test"
}
おー書き換えた内容が読めてますね〜
エラーが出た方は打ち間違いを確認してください〜
OpenWhiskでCloudantにWriteとReadを説明しました.
簡単に書き込みと読み込みができるので楽ですね〜
ただ,気になる点がWriteとRead両方とも,コマンド打ってから反応が返ってくるまでの時間は微妙に長くてもっさりしている印象を受けますね…環境の問題でしょうか.
また,OpenWhiskの課金形態は発表されていない認識ですが,CloudantのAPIを呼ぶ分とOpenWhiskの分で2重の料金もかかってしまうのでしょうか.はたまた,APIを呼んだことにならずCloudantの方は料金はかからない…?
このあたりの課金形態はとても気になりますね〜β版なので発表はまだ先ですかね.
次は何を試してみようかな〜