Upgrade to Pro — share decks privately, control downloads, hide ads and more …

非同期朝会ボットを作った話 / Create serverless-daily-standup-bot

tsubasa
October 05, 2018

非同期朝会ボットを作った話 / Create serverless-daily-standup-bot

2018/10/05 に社内勉強会で発表した時のスライドです。

tsubasa

October 05, 2018
Tweet

More Decks by tsubasa

Other Decks in Technology

Transcript

  1. ただし微妙なところがある 直近の社内勉強会の発表を聞いて、これだ!となって最初は Step Functions を使っていた。 けど、質問の回答が来るまでループして無駄な function を実行したり、並列実行も並列数を動的に決められず StepFunctions の旨味を全然受けれてなかった。

    冷静に考えてみると、サーバーレスアーキテクチャの本質はイベントドリブン (って誰かが言ってた) なので、この 場合の StepFunctions は筋が悪い。 しかも誰かが仕事を休むと、ずっとステートマシンが起動しっぱなしになる。
  2. 初期設定 Slash コマンドと Interactive messages を組み合わせて実装。 /daily-standup-bot setting で設定できる。 ただし

    Slack だけでやろうとすると制限が多いし実装も複雑になるので厳しい。 素直に Web アプリ作ったほうが楽。
  3. 初期設定が難しすぎる select フィールドは複数選択ができない。 textarea フィールドはユーザー名の補完が効かない。 Slack 側でユーザー名をユーザー ID に変換する API

    もない。ので、ユーザー ID を書いてもらうしか。 スケジュール設定は CloudWatch Events の cron 式 そのまま (これはパーサー書いてなんとかしたい )。 ちなみに Dialog はフィールドが 5 個まで。 なのでこういう設定方法にならざるを得なかった ...
  4. SAPessi/serverless-sam serverless FW は Go ランタイムのローカル実行に非対応。 sam-cli は対応しているため、YAML を変換するために使用。 まったくメンテされてないので

    npm audit に引っかかる。 バグもあるので正直おすすめはしない。 例えば serverless FW の ${env:HOGE} みたいな記法を解釈してくれない。 “DynamoDB” と記述するところを単純にキャメルケースにして “Dynamodb” にしてしまってる。 → sed で解決!
  5. awslabs/aws-sam-cli AWS 公式ツール。 Go ランタイムのローカル実行にも対応している。 function 実行ごとに docker pull が走る。

    function のコードが zip の場合は実行ごとに解凍する。 どちらも予め済ませておいて skip オプション付けて実行することで Slack の Webhook のタイムアウトをギリギリ回避できる。
  6. 全体の流れ 1. serverless-sam プラグインで SAM の YAML を書き出す 2. serverless-sam

    プラグインがバグっているので sed で YAML を修正 3. zip は予め解凍 4. Docker イメージも予め pull 5. sam local でローカル実行 6. ngrok で外部に公開して Slack から叩かせる 7. realize でコードを watch して自動再ビルド