ChatWork Creator's Note

ビジネスチャット「チャットワーク」のエンジニアとデザイナーのブログです。

AWS DevDay Challengeに参加してきました(チーム関東)

こんにちわ。SRE部のcw-tomita です。

昨日のチーム吹田の記事に続いて、チーム関東として、先週行われたAWS DevDay Challengeという、1 day Hackathonイベントのことを書きたいと思います。

tl;dr

  • Q毎に実施している部署合宿の機会を使って、DevDay Challengeというイベントに参加してきました。
  • 普段の業務ではあまり触らないAWSのServerlessのservice周りの知識が増えるとともに、自分たちのサービスの機能のdog foodingも出来て、めちゃくちゃ学びが多かった。

参加までの経緯

cw-ozaki からの問いかけに挙手をした所から全てが始まりました。 f:id:cw-tomita:20181105165200p:plain:h100 f:id:cw-tomita:20181105165212p:plain:h50

ちなみに 🙋‍♂️ の絵文字を翻訳すると、「serverless周りは色々と情報のキャッチアップはしてるつもりだけど、ハッカソン的なイベントは久しく出てないし、今年からMGRになって、ただでさえ運用業務が中心だった所に、マネジメント業務も追加されて、コード書く量だいぶ少なくなってるので、ちゃんとアウトプットできるかめちゃくちゃ不安。だけど、SRE部としてServerlessという技術要素は選択できる状態にありたいと普段から言ってるし、部としてこういうのやってこうよってのを意識づけできるこの絶好の機会を逃したらダメだ!」になります。
SRE部は東京オフィスだけなく、大阪オフィスやリモートで勤務しているメンバーもいて、Qに一度合宿という形で東京に集合しているので、部署全員が集合できるように3Qの合宿をここに合わせることにしました。

事前準備

AWSのSAである西谷さんのブログを発見し、Serverless周りのお題であろうという予測は立てたのですが、
AWS DevDay Tokyo 2018というイベントを開催します! - Sweet Escape

Serverlessconfで開催されているものと異なるのはサーバーレスという技術要素を前提としないことです。より柔軟な技術選択が可能になるということですね。とはいえこのイベントはDevDayです。アプリ開発者のためのカンファレンスです。そのあたりを少し意識して挑んでもらえればと思います。

ChatWorkではServerlessはあまり使っておらず、私含め、その辺の技術に対して明るくないメンバーもいるので、ChatWorkの初Serverless案件(チャットワークにおけるサーバレス活用術)を手がけた、cw-ozaki にServerless講義をしてもらって、準備してもらった練習問題にグループで取り組んでみる〜というのを前日にやりました。 f:id:cw-tomita:20181105143525j:plain

当日

当日の描写はチーム吹田のブログに詳しいので、そちらをご覧いただくことにして、チーム関東はChatWorkへのアップロード画像にタグ付け & タグ指定でその画像を返却してくれるChatBotを作りました。

機能紹介

画像をアップロードすると、裏側で宜しくタグつけしてくれて、 f:id:cw-tomita:20181105162838p:plain


例えば、前に子ネコ画像アップロードしたんだけど、どこにあったけっな〜っていう時、タグ指定で検索するとHitした画像を返してくれます。 f:id:cw-tomita:20181105163239p:plain

構成

f:id:cw-tomita:20181106112036p:plain

  • Step Functionsをベースに、その中にLambda で必要な部品をちょこちょこっと書くだけで、どんどん繋げていけた。様々なAWSサービス / ChatWork本体へのアクセスがあって、処理をまとめてしまうと、どこか一つでも失敗すると処理が上手く完了しないことがありえるが、Step Functionを使ったことで側でリトライはよろしくやってくれるので部分障害に対する耐障害性も高い。
  • コード4兄弟の力でCI/CDもそれっぽいのが出来た。
  • 画像へのタグ付けでAmazon Reckognitionを利用。

1日 * 3人 (うち2人はServerlessの理解浅め)でこんなに出来ちゃうんだな〜と自分たちで作っていながらも、感心しきりでしたw

オープンなハッカソンイベントなので、当然のことながらChatWork内部は一切触っておらず、公開APIWebhook + AWSの各種Serviceを使って実装していますので、この機能欲しい!っていう方はいつでも導入可能です!今回はBot感を強調するために、Bot宛にToで画像をアップロードした時だけタグ付けするという実装になってますが、ルームに投稿されたメッセージ全部に対してWebhookを送れるので、この辺は要件によって簡単にカスタマイズ出来ます。また、AWS Reckognitionからの英語タグを直接保存するだけでなく、そこにtranslateを挟んで日本語でも検索できるようにしたり、検索エンジンを挟んで揺らぎに対応させたりといった様々な機能追加も考えられな〜と妄想も膨らみます。

cw-ozakiによる発表の様子

f:id:cw-tomita:20181105151015j:plain (ちゃんと動くものができた〜という安心感から、後ろの2人は脱力しきっている。)

まとめ

残念ながら優勝は出来ませんでしたが、自分たちのサービスに絡めてServerless周りを2日間ではありましたがガッツリと触って、本当に色々な学びがありました。正直、🙋‍♂️ってやった時点では不安しかなかったですが、想像よりもずっといいものができて、ホッとすると共に、ほんと参加して良かったな〜と思います。また、他チームの発表も面白いものばかりで、いい年した大人たちが真剣に遊んでる姿はとても楽しかったです。特に優勝したガヤガヤ動画はホント凄かった。
改めまして、このような場を提供していただいたAWSさんに感謝 * 2です。

最後にお約束になりますが、SRE部ではAWSの各種サービスや様々なミドルウェアを駆使しながらシステムの継続的な安定運用/改善に取り組みつつも、Hackathonに出れるくらいの開発瞬発力を保っていたいというエンジニアを場所を問わずに絶賛募集中です! corp.chatwork.com