SlideShare a Scribd company logo
IBM CLOUD FUNCTIONS
(OPENWHISK)
DOCKER ACTION で MECABを動かす
2017.10.19 BMXUGつきじ#1
自己紹介
 國藤 篤規(KUNITO Atsunori)
 Atsunori_kunito@niandc.co.jp
 エヌアイシー・ソフト株式会社所属
 日本情報通信グループ
 Javaプログラマーが本業ですが、暇を見つけて
Bluemixで遊んでます
OPENWHISK おさらい
OPENWHISK 概要
 Apache Software Foundation の OSS(が Bluemix
にディプロイされている)
 サーバレス
 Function As A Service
 マイクロサービス
サーバの設定などが不要で
APIを手軽に作れて
呼び出したときだけ課金される
API登場の背景
 クラウドサービスを含む、複数の環境で複数のWebアプ
リケーションが稼働している
 システム間のリアルタイムな連携が不可欠
 APIでつなぐ
 環境・言語を問わないREST&JSON
 認証
 軽量
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の例(認証は省いてます)
FAASのアドバンテージ
 お決まりの設定、コーディングが圧倒的に少ない
function main(params) {
return { message: 'Hello ' + params.name };
}
OpenWhisk(Node.js)の例
名前を決めれば、すぐに本質的なところに取り掛かれる
OPENWHISK おさらい
2017.09 の変更点について
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 でも使えるようになった
1.名称変更
 検索したときに、両方引っかかってややこしいから
 同じコードベース
 OpenWhisk への commit も続けていく
入口がさらにわかりずらく
 まさかの
Functions = 機能
と訳しちゃったパターン
 メニューも「機能」になった
2.ランタイムサポートの向上
 PHPが追加
 Swift がバージョンアップ
<?php
function main(array $args) : array
{
$name = $args["message"] ?? "stranger";
$greeting = "Hello $name!";
echo $greeting;
return ["greeting" => $greeting];
}
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
4.LONDONでも提供開始
 うれしいことだとは思うんですけど…
DOCKER ACTION で
MECABを動かす
OPENWHISKの特徴
 トリガー
 DBの更新時などに自動的にアクションを呼び出す
 シーケンス
 アクションのチェーンを定義できる
 既存パッケージ
 Slack , git などに接続するためのAction
 多彩なランタイム(言語)
 Node.js , Python , Swift , PHP , Java
 Docker Action の存在
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
pureOpenWhisk とは
• OpenWhisk
– APIを作って呼べる
– トリガー
– シーケンス
OpenWhiskだけでアプリ作れるんじゃないか、
という試み(自分で言ってるだけ)
ただのAPIホストなら、いらない機能?
やりたいこと
• ある検索ワードでgoogle検索したとき、自サイ
トの順位をモニターしたい(日次)
• 検索上位のページに共通して含まれるキー
ワードがあるか分析したい
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashDBのREST)
グラフ描画
プログラム構成
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashDBのREST)
グラフ描画
プログラム構成
Webページ(本文)から
キーワードを抽出したい
DashDB(for Analytics)
OpenWhisk
OpenWhisk(WebAction)
お金がない
定刻起動
GoogleCustomSearch CSVアップロード
(DashDBのREST)
Rスクリプト起動
(DashDBのREST)
グラフ描画
プログラム構成
よし、Watsonだな
Webページ(本文)から
キーワードを抽出したい
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
 よし、Watson だなってなった
 が、NLU(Natural Language Understanding)は日本語非
対応
 ついでに言うなら、NLUを使っているDiscoveryも日本語非対応
 全く関係ないけど、Tone Analyzer も・・・
MECAB + DOCKER ACTIONまでの経緯
 そもそも、Google検索ランキングのモニターを作っていた
 ランキング上位のページから、頻出キーワードを抽出したかった
 よし、Watson だなってなった
 が、NLU(Natural Language Understanding)は日本語非
対応
 ついでに言うなら、NLUを使っているDiscoveryも日本語非対応
 全く関係ないけど、Tone Analyzer も・・・
 ついカッとなって、MeCabを動かしてみることに
MECABとは
 http://taku910.github.io/mecab/
 工藤拓氏が開発しているオープンソースの形態素解析エンジン
 言語はC++で書かれている
 「もも」が2回出てきてるってわかる!!!
% mecab
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
DOCKER ACTION
wsk action update
wsk action invoke
/init 初期化処理
Docker Action が
呼び出された時の処理
/run
DOCKER ACTION – 3つの戦略
 実行するプログラムを Docker Action に導入する方法
 MeCabなど、プログラム本体
 インタフェース部分(パラメータの整形、結果のJSON化など)
 使用するライブラリ
i. Docker Image のみ
ii. openwhisk/dockerskeleton を使用する
iii. 実行時に導入する
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 <イメージ名>
イメージ”名”だけが
アップロード
I.DOCKER IMAGE のみ – 考慮点
 ディプロイも、呼び出しも、最も高速
 Actionのパラメータ・結果のJSONに制約がない
 イメージをDockerHub上で公開する必要がある
 実行したいプログラムがフリーのものでは無い場合
 インタフェース部分も公開される
 外部のAPIなどに接続する場合、APIキーなども含まれている
 厳しい場合も多々ある気が・・・
 ii へつづく
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
II.DOCKERSKELETONを使用する – 考慮点
 Dockerの知識がいらない
 /init,/run の受付部分を書く必要がない
 Zip の中身は公開されない
 ディプロイが遅い
 ライブラリなどもzipに含める必要がある(LD_LIBRARY_PATHも設
定)
 JSONのやり取りが不便
 コマンドラインを経由するため、1行、Tab使用不可、長さ制限
 Htmlボディ → url
 パッケージマネージャなどで入れたものを持って行きずらい
 iii へつづく
III.実行時に導入する
 実行時(exec の中など)で無理やりインストールしてしまう
 If で囲ってるのは、コンテナがキャッシュされている場合がある
から
 確かに実用上は問題なかったですけど…
 ハイブリッドへ
PIP_RESULT=`pip list | grep requests | wc -l`
if [ ${PIP_RESULT} = "0" ]
Then
pip install requests
fi
ハイブリッド方式
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 を受け付ける
ハイブリッド方式
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
ハイブリッド方式
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": "ユルイ"
},
完成
OpenWhisk
やっぱり、Lambdaと
比較されてる
完成
QRadar
Security Information and
Event Management
DOCKER ACTION の ユースケース
 バイナリ、UNIXコマンドを動かす
 C , C++ で書かれたオープンなツール
 シェルスクリプト
 サポートされない言語を使う
 実行環境、ライブラリ、プログラムをDocker Imageに注入する
 Perl , Ruby あたりはどうでしょう
 サポートされないライブラリを使う
 Node.jsなどでも、どうしても使いたいライブラリがない場合がある
 ランタイムのDockerイメージを from に指定できるはず
 https://hub.docker.com/r/openwhisk/nodejs6action/~/dockerfile/
実は ”出来合いのDockerAction” = “ランタイム”
すべては DockerAction で動いている
参考サイト
 <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

More Related Content

PDF
社内向けTech Talk資料~Fluentdの基本紹介~
PDF
コンテナで作れるFaaS
PPTX
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
PDF
Ansible 2.0を使って組む kubernetesクラスタ vol.1
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
PPTX
OpenShift from Easy way to Hard ? Way
PDF
Ansible 2.0 のサマライズとこれから
PDF
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
社内向けTech Talk資料~Fluentdの基本紹介~
コンテナで作れるFaaS
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansibleを使ってdockerコンテナをプロビジョニングする
OpenShift from Easy way to Hard ? Way
Ansible 2.0 のサマライズとこれから
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った

What's hot (18)

PPTX
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
PDF
Ansible ではじめるサーバ作業の自動化
KEY
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
PPTX
イベント駆動プログラミングとI/O多重化
PDF
ChefとPuppetの比較
PPTX
Pythonユーザのための構成管理入門 #pyconapac
PDF
Niigata.pm #1
PDF
Ansible 入門 #01 (初心者向け)
PPTX
Appsody でnodejsのアプリを立ち上げよう!
PPTX
Ansible ではじめるインフラのコード化入門
PPTX
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
PPTX
Chef windows linux環境構築
PDF
ビルドサーバで使うDocker
PDF
Docker+CoreOS+GCEで自動スケール分散レイトレ
PDF
Ansible handson ood2016
PPTX
Alpine linuxを触ってみよう
PDF
Ansible quickstart
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
Ansible ではじめるサーバ作業の自動化
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
イベント駆動プログラミングとI/O多重化
ChefとPuppetの比較
Pythonユーザのための構成管理入門 #pyconapac
Niigata.pm #1
Ansible 入門 #01 (初心者向け)
Appsody でnodejsのアプリを立ち上げよう!
Ansible ではじめるインフラのコード化入門
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Chef windows linux環境構築
ビルドサーバで使うDocker
Docker+CoreOS+GCEで自動スケール分散レイトレ
Ansible handson ood2016
Alpine linuxを触ってみよう
Ansible quickstart
Ad

Similar to OpenWhisk - Docker action で MeCab を動かす (20)

KEY
キャバァーン! サツバツエアアイオー弐〇壱弐
PDF
Azure 高速サイトソリューション
PPTX
Cloudstack user group meeting in osaka
PDF
サーバーレスの今とこれから
PDF
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PDF
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
PPT
Using Windows Azure
PDF
Cloud Foundry: Open Platform as a Service
PDF
成長を加速する minne の技術基盤戦略
PPTX
2019年度 CaaS ワークショップ @ NTTコム
PDF
Jenkins study jenkins build-cicdi
PDF
Open Source x AI
PDF
Osc fukuoka xAI Meetup
PPTX
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
PDF
Reco choku tech night #09 -reinvent2018報告会-
PDF
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
PPTX
Wasm blazor and wasi 2
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PPTX
Jenkinsとhadoopを利用した継続的データ解析環境の構築
キャバァーン! サツバツエアアイオー弐〇壱弐
Azure 高速サイトソリューション
Cloudstack user group meeting in osaka
サーバーレスの今とこれから
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
.NET Coreから概観する.NETのOSSへの取り組み
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
Using Windows Azure
Cloud Foundry: Open Platform as a Service
成長を加速する minne の技術基盤戦略
2019年度 CaaS ワークショップ @ NTTコム
Jenkins study jenkins build-cicdi
Open Source x AI
Osc fukuoka xAI Meetup
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
Reco choku tech night #09 -reinvent2018報告会-
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Wasm blazor and wasi 2
はてなにおける継続的デプロイメントの現状と Docker の導入
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Ad

OpenWhisk - Docker action で MeCab を動かす