Slackの投稿をまとめて一つのチャンネルに流すbotを作った

この記事は PMOB Advent Calendar 25日目の記事です.

チャンネルにbotを追加するだけで,そのチャンネルの発言を特定のチャンネルに流すことができるbotを作った.

こんな感じで,チャンネルの投稿を別のチャンネルに流すことができる

f:id:cohalz:20181231154616p:plain

構成図

f:id:cohalz:20181231152507p:plain

  1. botがチャンネルの発言をAPI Gatewayに送信する

  2. API GatewayからのイベントをLambdaが受け取る

  3. チャンネルやユーザの情報がDynamoDBに保存されているか確認する

  4. 保存されていなければSlack APIに問い合わせる

  5. 問い合わせた情報をDynamo DBに保存

  6. 取得した情報を元に投稿先チャンネルへ投稿

何故作ったのか

  • 複数チャンネルを巡回する手間の削減
    • 分報チャンネル追うの大変
  • TwitterのTLみたいに混ざったら面白そうという気持ち

使うためには

  • Slack APIのtoken
  • 投稿するためのincoming webhook
  • slack botを追加しEvent Subscriptionsでmessage.channelsのイベントを受け取るようにする

ハマったところなど

ユーザやチャンネルの情報がidで渡されてくる

こういう構成にする事になった理由として,イベントではidが渡されてくるため,名前を引くためにAPIを使うことになった

api.slack.com

Slackのイベントタイムアウトは3秒

タイムアウトが3秒しかなく,それまでにイベントに対してのレスポンスを返さないともう一度イベントが送信されてしまう

そうすると投稿先チャンネルへ二重投稿されてしまうため,できる限りすぐレスポンスを返せるようにしないといけない

今回はDynamo DBを使って,そこに情報が保存されていたらそれを使うことでタイムアウトまでにレスポンスを返せるようになった

api.slack.com

終わりに

最初は遊びで作ってたものだったけれど,意外と面白いし実用性もあって良かった

分報が全部流れるとどのくらいの流量になるのか気になる

今回作ったリポジトリはこちら

github.com

『Docker/Kubernetes 実践コンテナ開発入門』のサンプルアプリケーションをAWS CDKでデプロイした

この記事は PMOB Advent Calendar 18日目の記事です.

前回は,『Docker/Kubernetes 実践コンテナ開発入門』の4章をコンソールからECSクラスタを構築し,その上でアプリケーションを動かすまでをやった.

『Docker/Kubernetes 実践コンテナ開発入門』のサンプルアプリケーションをECSに載せる - Re:cohalz

今回はそれをAWS CDKを使って,デプロイしてみた.

作成したリポジトリをサンプル用に公開したのが以下.

github.com

気をつけたところなど

細かいところはリポジトリを見てもらうとして,気をつけたところや工夫したところをまとめる.

まず,DBは試行錯誤の途中で作り直されるのが面倒だったので,RDSに変更した.

ロググループがデフォルトで削除保護がかかっており,作り直しでエラーになるため,retainLogGroup: falseを追加した.

サービスディスカバリの追加を関数化して扱いやすくした.サービスも削除保護が掛かっているのでそれを外した.

Dockerボリュームを使うにはプロパティを上書きする必要があったのでそれをやった.

ALBは初めにaddContainerしたコンテナを負荷分散用コンテナとして扱う動作をするようなのでnginxを先に追加した.

終わりに

AWS CDKはまだ開発者プレビューという状態で,気を付けることがあったり破壊的変更もよく出る感じだけれど,こういったECSクラスタなどをさっと作るには便利だと思った.

この構成と同じものををCloudFormationで作成しようと思ったら1200行ほど書かないといけないので非常に楽になる.(その分何が作られるのかしっかり把握しないといけないけれど)

気がついたら前回から一ヶ月経っていた

イベントの運営やら旅行やらポケモンやらやっていたら全然書いていなかった

それとは別に非公開ブログにSlackの会話を貼り付けるみたいなこともやっていたせいでここの更新が止まっていた感じがしなかった

普段PCで書いていて,スマホで書けないという問題点から先延ばしにしがち

最近iPad Proもキーボードとペン含めで買ったので下書きやメモなんかを簡単に残して更新頻度上げられるといいなぁ

Twitter見てない

ここ数ヶ月,Twitterをあまり見ていない.

忙しくなったというのもあるし,UserStreamの終了やTweetDeckが以前より重くなったのもあるのだけれど,それだけではない.

いつ見ても他人を批判する話で溢れていることに気がついた.

批判をすることでとにかく「自分は(他人とは違って)優れている」という一種のマウントを毎日目にする.

対象の人をミュートなりすれば良いと言われるかもしれないけれど,とにかく数が多く話題も毎日変わるのでTwitter自体を見ない方が早いなと思っている.

人との繋がりがあるのでやめるわけではないけれど,以前よりだいぶ見る時間は少なくなった.

それに,Twitterは短文や修正が効かないことから議論に向かないプラットフォームだと思う.

言いっ放しで終わることから,せめて自分だけでも他人を批判するようなことは言わず,明るい話題を提供していきたい.

そういうことで,この記事は明るい話題ではないのでTwitterには投稿しないことにする予定.

それと,Twitterをやっていないからといって元気ではないというわけではないのでそこは安心して欲しい.連絡もTwitterが一番早いと思う.