OpenWhiskでGitHubのイベントをCloudantに保存する

この記事は,Bluemix(SoftLayer) Advent Calendar 2016の16日目の記事です.

OpenWhiskでGitHubのトリガーを使ってみました.
GitHubのWebhooksなら何でも(?)トリガーとなるようなので使い道は広そうです.

2016/12/13にBetaからGAとして正式にリリースされました!めでたい!
それに合わせてUIなど変わったところがあるので,その辺りも紹介していきます.

OpenWhiskとは

オープンソースのイベント駆動型サービスです.
Function as a Service として話題になっていますね.
(基本的なところは他の方が説明されていると思うので,そちらをご覧ください.)

もちろんBluemixで提供されています!

GAで変わったこと

  • UI
  • 料金体系
  • その他

このくらいですかね.
(他にある場合は教えて下さい!)

UI

全体的に黒っぽいデザインから青っぽいデザインになりました.

スタート画面はこうなりました.
openwhisk_console.png

アクションの一覧を管理できるようになりました.
名前,バージョン,メモリ,タイムアウトが表で見られるようになっています.
メモリは金額に関係するのでこうやって見られるのは嬉しいですね.
この画面からアクションの新規作成もできます.(New Actionボタン)
openwhisk_console_manage.png

元々DevelopとMonitorは,別ウィンドウで開いていましたが,GAからは別ウインドウは開かなくなるようになりました.
機能的な部分は特に変わらず,色合いが変わっただけのようです.

料金体系

GB-sで計算します.
料金表は以下です.
openwhisk_pricing.png

実行時間0.5秒,メモリ128MBのアクションなら月で5,000,000回まで無料になります.
この表を見る限り,実行時間が長くなると金額は上がるようです.(その分,実行回数は増えますが!)
他のサービスをうまく使って,実行時間とメモリを抑える工夫が必要になってきますね.

その他

言語の削除(主に複数バージョンあったもの)やパッケージに関する細かいことはBluemix Blogに書いてありますのでご参照ください.

ここはタイミングがちょうど同じになっただけかもしれませんが…
トリガーにMessage Hubが追加されました.
更なる連携が期待できそうでなので,すごくわくわくします.

GA移行でやっておいたほうがいいこと

費用

Betaでは無料で使えていましたが,GAでは費用は発生します.
そのため,ルールを作って実行させている場合(特に定期実行など)は気が付かない間に費用が発生する可能性があります.
(無料枠の幅が広いので問題ないとは思いますが…)
一度,ルールの見直しをすることをお勧めします.

API key

API keyの更新が必要です.
こちらの記事に詳しく書かれていますので,こちらをご覧ください.

GitHubとの連携

さて,ようやく本題です.
OpenWhiskにはGitHubのトリガーがあり,Webhooksのイベントをトリガーとすることができます.
それを試して他のサービスと繋げてみたいと思います.

準備

OpenWhiskへのアクセスは省略します.

GitHubのトリガーを使うには,Personal access tokensを発行する必要があります.
OpenWhiskからGitHubのトリガーを新規作成します.
新規作成の画面のaccessToken部分の「詳細はこちらから」でGitHubのページにジャンプします.
github_trigger.png

・Token descriptionを入力(分かりやすくOpenWhiskとかにしました)
・admin:repo_hook にチェックを入れる
github_token.png

Generate tokenでトークンが作成されると思うので,コピーしておきます.
これで準備は完了です.
(適当なGitHubのリポジトリがない場合は作っておいてください)

push

リポジトリへのpushをトリガーにしてみます.

GitHubのトリガー作成画面にて,
・トリガー名
・username
・repository
・accessToken
・events
を入力します.
先ほど作成したトークンをaccessTokenに入れると,usernameとrepositoryが勝手に補完されます.(便利です)
適当なrepositoryを選択し,eventsには「push」と入力して,構成の保存でトリガーを作成します.
trigger_push.png

pushのトリガーからは,大まかに以下の情報が取得できます.
(各情報,さらに細かい情報まで取得できます)

  • repository
  • before
  • pusher
  • ref
  • commits
  • after
  • base_ref
  • forced
  • sender
  • head_commit
  • compare
  • deleted
  • created

この情報をCloudantに書き込んでみます.
CloudantにDatabase,Documentを作成しておきます.
(Cloudantの準備はここを参考にしてみてください)

アクションは以下です.
_revは更新するDocumentの_rev,dbNameは更新するDatabaseの名前になります.

function main(params) {
    params._rev = "1-967a00dff5e02add41819138abb3284d"
    var message = {
                    "dbName" : "openwhisk",
                    "doc" : params
                    }
    return message;
}

これをCloudantのupdate documentアクションと繋げてシーケンスにします.
document_update.png

さらに先ほど作成したGitHubのpushのトリガーを繋げてルールにします.
rule.png

あとはリポジトリにpushするだけです.

$ vim test.txt
(適当に編集)
$ git add test.txt
$ git commit -a
$ git push origin master

CloudantのDocumentを見てみると…
cloudant.png

cloudant2.png

ちゃんと更新されていますね!
pushの情報はGitHubも保持していると思いますが,こういった情報を統計解析だったりディープラーニングなどに応用できると良いです.

issue_comment

今度はissue_commentをトリガーにしてみます.

基本的には先ほどと一緒で,eventsだけissue_commentに変えるだけです.
trigger_issue_comment.png

ルールの構成も先ほどと同じです〜
rule2.png

issueを適当に作ったり更新したりして,CloudantのDocumentを見てみると…
cloudant3.png

cloudant4.png

issuenの内容が保存されています〜

まとめ

GAになって変更になった点とGitHubとの連携について(やや手抜きで)書きました.

GitHubとの連携はSlackをうまく使えばより実用的になりますね.(issueのcommentをSlackに投げるなど)
また,今回はeventsを1種類しか指定せずにトリガーを作成しましたが,複数種類のeventsのトリガーも作成することができるので試してみてください.

OpenWhiskはこれからも連携できるサービスは増えると思うので楽しみですね!
快適なサーバーレス生活を送りましょう〜

シェアする

  • このエントリーをはてなブックマークに追加

フォローする