Slackの投稿をLambdaを使ってElasticSearchに流し込もうとした話

はじめに

今年もやるよ!AWS Lambda縛り Advent Calendar 2015 の14日目の記事です。
というか間に合わなかったという記事です。本当にすみません!

やりたかったこと

Slackでナレッジがどんどん流れていってしまうあるある、よくありますよね。
というわけで、Elasticsearchにテキストを投入して、少しでも検索しやすくしてナレッジを拾いやすくしてみたいなとひらめきました。

Elasticsearchを使うメリット

Slackでも日本語検索はできます。
でも、Elasticsearchにテキストを投入すれば、こんなことが出来るようになります。

  • N-グラムの利用
  • kuromojiによる日本語形態素解析
  • 英字の大文字・小文字、半角・全角などの統一

AWSを使うメリット

AWSの無料枠にはAmazon Elasticsearch Serviceが追加されています(t2.microのみ)。
また、デフォルトでkibanaがインストールされていたり、kuromojiをサポートしていたりします。
つまり、無料でかつそんなに苦労せずSlack検索機能をつくれるのでは?ということです。

というわけでさっそく作っていきましょう。

Elasticsearchの設定

クラスメソッドさんの記事をそのままコピるだけでOKです。超簡単!

dev.classmethod.jp

Lambdaの設定

大量の会話データを毎回送信してしまうとLambdaの無料利用枠を超えてしまう可能性があるので、今回はSlackのOutgoing Webhooksは使わずに、LambdaのScheduled Eventを使います。
と、その前にLambdaでfunctionを作りましょう。

Slackの会話データを取得するにはhttps://slack.com/api/channels.historyを、Elasticsearchへのデータ登録は先ほど作成したElasticsearchのURLを使います。

SlackのWebAPIで取得したデータを整形してElasticsearchにhttpでインサートしていきましょう。
bulkインサートにするためにjsonを整形する必要があるので注意してください。

言い訳

ここで気づいたと思うのですが、この記事、画像とかソースとか一切載っていません。 というかKibanaでの確認もできていない有様です。
マジで間に合わないためこんな仕上がりになってしまいました…。
Advent Calendarを書きたかった方もいらっしゃったかと思うと本当にすみませんとしか言えないです。

画像とかソースとか揃ったらQiitaに必ずアップします! f:id:shibukk:20151225231139j:plain 本当にすみませんでした。