Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
IBM CLOUD FUNCTIONS
(OPENWHISK)
DOCKER ACTION で MECABを動かす
2017.10.19 BMXUGつきじ#1
自己紹介
 國藤 篤規(KUNITO Atsunori)
 Atsunori_kunito@niandc.co.jp
 エヌアイシー・ソフト株式会社所属
 日本情報通信グループ
 Javaプログラマーが本業ですが、暇を見つけて
Blu...
OPENWHISK おさらい
OPENWHISK 概要
 Apache Software Foundation の OSS(が Bluemix
にディプロイされている)
 サーバレス
 Function As A Service
 マイクロサービス
サーバの設定など...
API登場の背景
 クラウドサービスを含む、複数の環境で複数のWebアプ
リケーションが稼働している
 システム間のリアルタイムな連携が不可欠
 APIでつなぐ
 環境・言語を問わないREST&JSON
 認証
 軽量
FAASのアドバンテージ
 お決まりの設定、コーディングが圧倒的に少ない
@ApplicationPath("api-root")
public class HelloApplication extends Application {
}
@...
FAASのアドバンテージ
 お決まりの設定、コーディングが圧倒的に少ない
function main(params) {
return { message: 'Hello ' + params.name };
}
OpenWhisk(Node...
OPENWHISK おさらい
2017.09 の変更点について
FOUR REASONS SERVERLESS FAAS ON
THE IBM CLOUD IS BETTER THAN EVER
 2017.09 に Bluemix 環境のOpenWhisk に Update
 (https://www...
1.名称変更
 検索したときに、両方引っかかってややこしいから
 同じコードベース
 OpenWhisk への commit も続けていく
入口がさらにわかりずらく
 まさかの
Functions = 機能
と訳しちゃったパターン
 メニューも「機能」になった
2.ランタイムサポートの向上
 PHPが追加
 Swift がバージョンアップ
<?php
function main(array $args) : array
{
$name = $args["message"] ?? "stranger...
3.BX コマンドとの統合
 Bluemix(bx)コマンドのプラグインとして提供
>bx plugin repo-plugins
>bx plugin install cloud-functions
リポジトリー 'Bluemix' から ...
4.LONDONでも提供開始
 うれしいことだとは思うんですけど…
DOCKER ACTION で
MECABを動かす
OPENWHISKの特徴
 トリガー
 DBの更新時などに自動的にアクションを呼び出す
 シーケンス
 アクションのチェーンを定義できる
 既存パッケージ
 Slack , git などに接続するためのAction
 多彩なランタ...
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
pureOpenWhisk とは
• OpenWhisk
– APIを作って呼べる
– トリガー
– シーケンス
OpenWhiskだけでアプリ作れるんじゃないか、
という試み(自分で言ってるだけ)
ただのAPIホストなら、いらない機能?
やりたいこと
• ある検索ワードでgoogle検索したとき、自サイ
トの順位をモニターしたい(日次)
• 検索上位のページに共通して含まれるキー
ワードがあるか分析したい
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashD...
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashD...
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashD...
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
 よし、Watson だなってなった
 が、NLU(Nat...
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
 よし、Watson だなってなった
 が、NLU(Nat...
MECABとは
 http://taku910.github.io/mecab/
 工藤拓氏が開発しているオープンソースの形態素解析エンジン
 言語はC++で書かれている
 「もも」が2回出てきてるってわかる!!!
% mecab
すも...
DOCKER ACTION
wsk action update
wsk action invoke
/init 初期化処理
Docker Action が
呼び出された時の処理
/run
DOCKER ACTION – 3つの戦略
 実行するプログラムを Docker Action に導入する方法
 MeCabなど、プログラム本体
 インタフェース部分(パラメータの整形、結果のJSON化など)
 使用するライブラリ
i....
Local - docker
Bluemix
I.DOCKER IMAGE のみ
/init 初期化処理
Docker Action が
呼び出された時の処理
/run
実行するバイナリ
使用するライブラリ
/init 初期化処理
Docker...
I.DOCKER IMAGE のみ – 考慮点
 ディプロイも、呼び出しも、最も高速
 Actionのパラメータ・結果のJSONに制約がない
 イメージをDockerHub上で公開する必要がある
 実行したいプログラムがフリーのものでは...
II.DOCKERSKELETONを使用する
wsk action update <アクション名> exec.zip
wsk action invoke
/init Zipファイルの展開
exec 呼び出し/run
実行するバイナリ
使用するラ...
II.DOCKERSKELETONを使用する – 考慮点
 Dockerの知識がいらない
 /init,/run の受付部分を書く必要がない
 Zip の中身は公開されない
 ディプロイが遅い
 ライブラリなどもzipに含める必要があ...
III.実行時に導入する
 実行時(exec の中など)で無理やりインストールしてしまう
 If で囲ってるのは、コンテナがキャッシュされている場合がある
から
 確かに実用上は問題なかったですけど…
 ハイブリッドへ
PIP_RESU...
ハイブリッド方式
FROM openwhisk/dockerskeleton
RUN apk add --no-cache gcc libc-dev g++
RUN apk add --no-cache --virtual .build-dep...
ハイブリッド方式
docker build -t openwhiskdatest/mecabda .
docker login
docker push openwhiskdatest/mecabda
イメージビルド&
DockerHubへアップ...
ハイブリッド方式
bx wsk action invoke wskMeCabDH --blocking --result -p "url" https://bmxug.connpass.com/event/66961/
{
"count": 1...
完成
OpenWhisk
やっぱり、Lambdaと
比較されてる
完成
QRadar
Security Information and
Event Management
DOCKER ACTION の ユースケース
 バイナリ、UNIXコマンドを動かす
 C , C++ で書かれたオープンなツール
 シェルスクリプト
 サポートされない言語を使う
 実行環境、ライブラリ、プログラムをDocker Im...
参考サイト
 <strategy1>
 Docker Action で、GNU のツールをコンパイルして動かす
 https://hub.docker.com/r/openwhisk/spellcheck/
 (blog post は削...
Upcoming SlideShare
Loading in …5
×

OpenWhisk - Docker action で MeCab を動かす

560 views

Published on

English version is HERE.
https://www.slideshare.net/KUNITOAtsunori/mecab-in-docker-actionopenwhisk

OpenWhisk(IBM Cloud Functions) の Docker action で MeCab を動かしてみた。
2017.10.19 BMXUGつきじでの発表資料です。

Published in: Engineering
  • Be the first to comment

OpenWhisk - Docker action で MeCab を動かす

  1. 1. IBM CLOUD FUNCTIONS (OPENWHISK) DOCKER ACTION で MECABを動かす 2017.10.19 BMXUGつきじ#1
  2. 2. 自己紹介  國藤 篤規(KUNITO Atsunori)  Atsunori_kunito@niandc.co.jp  エヌアイシー・ソフト株式会社所属  日本情報通信グループ  Javaプログラマーが本業ですが、暇を見つけて Bluemixで遊んでます
  3. 3. OPENWHISK おさらい
  4. 4. OPENWHISK 概要  Apache Software Foundation の OSS(が Bluemix にディプロイされている)  サーバレス  Function As A Service  マイクロサービス サーバの設定などが不要で APIを手軽に作れて 呼び出したときだけ課金される
  5. 5. API登場の背景  クラウドサービスを含む、複数の環境で複数のWebアプ リケーションが稼働している  システム間のリアルタイムな連携が不可欠  APIでつなぐ  環境・言語を問わないREST&JSON  認証  軽量
  6. 6. FAASのアドバンテージ  お決まりの設定、コーディングが圧倒的に少ない @ApplicationPath("api-root") public class HelloApplication extends Application { } @Path(“hello") public class HelloService { @POST @Consumes("application/json") @Produces("application/json") public HelloResult service( HelloParam param ) { return new HelloResult(param); } } Public class HelloParam { } Public class HelloResult { } 入出力パラメータのPOJO APIのルート API本体 JAX-RSの例(認証は省いてます)
  7. 7. FAASのアドバンテージ  お決まりの設定、コーディングが圧倒的に少ない function main(params) { return { message: 'Hello ' + params.name }; } OpenWhisk(Node.js)の例 名前を決めれば、すぐに本質的なところに取り掛かれる
  8. 8. OPENWHISK おさらい 2017.09 の変更点について
  9. 9. FOUR REASONS SERVERLESS FAAS ON THE IBM CLOUD IS BETTER THAN EVER  2017.09 に Bluemix 環境のOpenWhisk に Update  (https://www.ibm.com/blogs/bluemix/2017/08/four -reasons-serverless-faas-ibm-cloud-better-ever/) 1. 名前が変わった(IBM Cloud Functions) 2. PHP&Swiftのサポートが向上 3. Wsk コマンドが bx コマンド内で使えるようになった 4. London でも使えるようになった
  10. 10. 1.名称変更  検索したときに、両方引っかかってややこしいから  同じコードベース  OpenWhisk への commit も続けていく
  11. 11. 入口がさらにわかりずらく  まさかの Functions = 機能 と訳しちゃったパターン  メニューも「機能」になった
  12. 12. 2.ランタイムサポートの向上  PHPが追加  Swift がバージョンアップ <?php function main(array $args) : array { $name = $args["message"] ?? "stranger"; $greeting = "Hello $name!"; echo $greeting; return ["greeting" => $greeting]; }
  13. 13. 3.BX コマンドとの統合  Bluemix(bx)コマンドのプラグインとして提供 >bx plugin repo-plugins >bx plugin install cloud-functions リポジトリー 'Bluemix' から 'cloud-functions' を検索しています... プラグイン 'cloud-functions 1.0.2' がリポジトリー 'Bluemix' 内で見つかりました バイナリー・ファイルをダウンロードしようとしています... 10.53 MiB / 10.53 MiB [========================================] 100.00% 1m27s 11039232 バイトがダウンロードされました バイナリーをインストールしています... OK プラグイン 'Cloud-Functions 1.0.2' は C:¥Users¥Administrator¥.bluemix¥plugins¥Cl oud-Functions に正常にインストールされました。 'bx plugin show Cloud-Functions' を使用して詳細を表示してください。 >bx wsk action invoke HelloAction --blocking --result
  14. 14. 4.LONDONでも提供開始  うれしいことだとは思うんですけど…
  15. 15. DOCKER ACTION で MECABを動かす
  16. 16. OPENWHISKの特徴  トリガー  DBの更新時などに自動的にアクションを呼び出す  シーケンス  アクションのチェーンを定義できる  既存パッケージ  Slack , git などに接続するためのAction  多彩なランタイム(言語)  Node.js , Python , Swift , PHP , Java  Docker Action の存在
  17. 17. MECAB + DOCKER ACTIONまでの経緯  そもそも、Google検索ランキングのモニターを作っていた  ランキング上位のページから、頻出キーワードを抽出したかった
  18. 18. pureOpenWhisk とは • OpenWhisk – APIを作って呼べる – トリガー – シーケンス OpenWhiskだけでアプリ作れるんじゃないか、 という試み(自分で言ってるだけ) ただのAPIホストなら、いらない機能?
  19. 19. やりたいこと • ある検索ワードでgoogle検索したとき、自サイ トの順位をモニターしたい(日次) • 検索上位のページに共通して含まれるキー ワードがあるか分析したい
  20. 20. DashDB(for Analytics) OpenWhisk OpenWhisk(WebAction) お金がない 定刻起動 GoogleCustomSearch CSVアップロード (DashDBのREST) Rスクリプト起動 (DashDBのREST) グラフ描画 プログラム構成
  21. 21. DashDB(for Analytics) OpenWhisk OpenWhisk(WebAction) お金がない 定刻起動 GoogleCustomSearch CSVアップロード (DashDBのREST) Rスクリプト起動 (DashDBのREST) グラフ描画 プログラム構成 Webページ(本文)から キーワードを抽出したい
  22. 22. DashDB(for Analytics) OpenWhisk OpenWhisk(WebAction) お金がない 定刻起動 GoogleCustomSearch CSVアップロード (DashDBのREST) Rスクリプト起動 (DashDBのREST) グラフ描画 プログラム構成 よし、Watsonだな Webページ(本文)から キーワードを抽出したい
  23. 23. MECAB + DOCKER ACTIONまでの経緯  そもそも、Google検索ランキングのモニターを作っていた  ランキング上位のページから、頻出キーワードを抽出したかった  よし、Watson だなってなった  が、NLU(Natural Language Understanding)は日本語非 対応  ついでに言うなら、NLUを使っているDiscoveryも日本語非対応  全く関係ないけど、Tone Analyzer も・・・
  24. 24. MECAB + DOCKER ACTIONまでの経緯  そもそも、Google検索ランキングのモニターを作っていた  ランキング上位のページから、頻出キーワードを抽出したかった  よし、Watson だなってなった  が、NLU(Natural Language Understanding)は日本語非 対応  ついでに言うなら、NLUを使っているDiscoveryも日本語非対応  全く関係ないけど、Tone Analyzer も・・・  ついカッとなって、MeCabを動かしてみることに
  25. 25. MECABとは  http://taku910.github.io/mecab/  工藤拓氏が開発しているオープンソースの形態素解析エンジン  言語はC++で書かれている  「もも」が2回出てきてるってわかる!!! % mecab すもももももももものうち すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS
  26. 26. DOCKER ACTION wsk action update wsk action invoke /init 初期化処理 Docker Action が 呼び出された時の処理 /run
  27. 27. DOCKER ACTION – 3つの戦略  実行するプログラムを Docker Action に導入する方法  MeCabなど、プログラム本体  インタフェース部分(パラメータの整形、結果のJSON化など)  使用するライブラリ i. Docker Image のみ ii. openwhisk/dockerskeleton を使用する iii. 実行時に導入する
  28. 28. Local - docker Bluemix I.DOCKER IMAGE のみ /init 初期化処理 Docker Action が 呼び出された時の処理 /run 実行するバイナリ 使用するライブラリ /init 初期化処理 Docker Action が 呼び出された時の処理 /run /init 初期化処理 Docker Action が 呼び出された時の処理 /run 実行するバイナリ 使用するライブラリ 実行するバイナリ 使用するライブラリ wsk action invoke wsk action create wskMeCabDH --docker <イメージ名> docker push <イメージ名> イメージ”名”だけが アップロード
  29. 29. I.DOCKER IMAGE のみ – 考慮点  ディプロイも、呼び出しも、最も高速  Actionのパラメータ・結果のJSONに制約がない  イメージをDockerHub上で公開する必要がある  実行したいプログラムがフリーのものでは無い場合  インタフェース部分も公開される  外部のAPIなどに接続する場合、APIキーなども含まれている  厳しい場合も多々ある気が・・・  ii へつづく
  30. 30. II.DOCKERSKELETONを使用する wsk action update <アクション名> exec.zip wsk action invoke /init Zipファイルの展開 exec 呼び出し/run 実行するバイナリ 使用するライブラリ openwhisk/dockerskeleton 実行するバイナリ 使用するライブラリ exec exec.zip exec wsk action create wskIMeCab --docker openwhisk/dockerskeleton
  31. 31. II.DOCKERSKELETONを使用する – 考慮点  Dockerの知識がいらない  /init,/run の受付部分を書く必要がない  Zip の中身は公開されない  ディプロイが遅い  ライブラリなどもzipに含める必要がある(LD_LIBRARY_PATHも設 定)  JSONのやり取りが不便  コマンドラインを経由するため、1行、Tab使用不可、長さ制限  Htmlボディ → url  パッケージマネージャなどで入れたものを持って行きずらい  iii へつづく
  32. 32. III.実行時に導入する  実行時(exec の中など)で無理やりインストールしてしまう  If で囲ってるのは、コンテナがキャッシュされている場合がある から  確かに実用上は問題なかったですけど…  ハイブリッドへ PIP_RESULT=`pip list | grep requests | wc -l` if [ ${PIP_RESULT} = "0" ] Then pip install requests fi
  33. 33. ハイブリッド方式 FROM openwhisk/dockerskeleton RUN apk add --no-cache gcc libc-dev g++ RUN apk add --no-cache --virtual .build-deps git make ¥ && apk add --no-cache libxml2-dev libxslt-dev # install mecab RUN cd /tmp && ¥ git clone https://github.com/taku910/mecab.git RUN cd /tmp/mecab/mecab && ¥ ./configure --enable-utf8-only && ¥ make && ¥ make install RUN echo 'export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc && ¥ . ~/.bashrc && ¥ cd /tmp/mecab/mecab-ipadic && ¥ ./configure --with-charset=utf8 && ¥ make && ¥ make install RUN pip install --no-cache-dir lxml RUN pip install --no-cache-dir requests RUN pip install --no-cache-dir beautifulsoup4 RUN apk del .build-deps CMD ["/bin/bash", "-c", "cd actionProxy && python -u actionproxy.py"] ベースイメージにdockerskeletonを指定 必要なツール・パッケージ類は インストールしておく MeCab Request BeautifulSoap lxml /init , /run を受け付ける
  34. 34. ハイブリッド方式 docker build -t openwhiskdatest/mecabda . docker login docker push openwhiskdatest/mecabda イメージビルド& DockerHubへアップロード DockerHubで公開したくないものだけを Zipにまとめる 実行するバイナリ exec exec.zip bx wsk action create wskMeCabDH --docker openwhiskdatest/mecabda bx wsk action update wskMeCabDH exec.zip --docker openwhiskdatest/mecabda 最小限のものをアップロード bx wsk action invoke wskMeCabDH --blocking --result
  35. 35. ハイブリッド方式 bx wsk action invoke wskMeCabDH --blocking --result -p "url" https://bmxug.connpass.com/event/66961/ { "count": 1, "genkei": "ゆるい", "hatsuon": "ユルイ", "hinshi": "形容詞", "hinshi_sub1": "自立", "hinshi_sub2": "*", "hinshi_sub3": "*", "katsuyo_kata": "形容詞・アウオ段", "katsuyo_kei": "基本形", "word": "ゆるい", "yomi": "ユルイ" },
  36. 36. 完成 OpenWhisk やっぱり、Lambdaと 比較されてる
  37. 37. 完成 QRadar Security Information and Event Management
  38. 38. DOCKER ACTION の ユースケース  バイナリ、UNIXコマンドを動かす  C , C++ で書かれたオープンなツール  シェルスクリプト  サポートされない言語を使う  実行環境、ライブラリ、プログラムをDocker Imageに注入する  Perl , Ruby あたりはどうでしょう  サポートされないライブラリを使う  Node.jsなどでも、どうしても使いたいライブラリがない場合がある  ランタイムのDockerイメージを from に指定できるはず  https://hub.docker.com/r/openwhisk/nodejs6action/~/dockerfile/ 実は ”出来合いのDockerAction” = “ランタイム” すべては DockerAction で動いている
  39. 39. 参考サイト  <strategy1>  Docker Action で、GNU のツールをコンパイルして動かす  https://hub.docker.com/r/openwhisk/spellcheck/  (blog post は削除された?)  <strategy2>  https://www.ibm.com/blogs/bluemix/2017/01/docker- bluemix-openwhisk/  http://jamesthom.as/blog/2017/01/16/openwhisk-docker- actions/  DockerHub  スケルトン  https://hub.docker.com/r/openwhisk/dockerskeleton/  DockerFileご参考(手前味噌ではございますが…)  https://www.niandc.co.jp/sol/tech/date20170626_698.php

×