LoginSignup
2
3

More than 5 years have passed since last update.

古い Slack チャンネルを自動でアーカイブする機能を作りました

Last updated at Posted at 2018-03-17

💡作ったもの

毎月第1月曜日に久しく投稿のないSlackチャンネルを1つだけアーカイブしてくれます。こういうのは機械的にやっちゃったほうがいいでしょ。

image.png

チャンネルに参加しているみんなが寂しくないように謎のメッセージを残してからアーカイブするようにしました。なお、参加者にはメンションが届くし、必要なら手動で戻せるので実害はないかと思います。

:octocat:成果物

saitota/SlackChannelArchiver
Lambda + Cloudwatch Events 起動のサーバレス構成です。

✋構築手順

README に書きました。Serverless Framework でさくっとデプロイできます。

🔧工夫したところ

Serverless Framework を活用するのが楽しくなってきました。単純にデプロイするだけではなく、ステージ毎に設定ファルを切り替えたり (environment_xxx.yml) 、プロファイルをオプションで切り替えられることを知りました。

sererless.yml
provider:
  stage:  ${opt:stage, self:custom.defaultStage}
  region: ${opt:region, self:custom.defaultRegion}
  profile: ${opt:profile, self:custom.defaultProfile}
custom:
  defaultStage: dev
  defaultRegion: ap-northeast-1
  defaultProfile: default
  otherfile:
    environment:
      dev: ${file(./environment_dev.yml)}
      prd: ${file(./environment_prd.yml)}
functions:
  fnc:
    environment:
      ${self:custom.otherfile.environment.${self:provider.stage}}
※一部省略してます

明示的に AWS-CLI プロファイル名を指定しなければ defaut を使うようにしました、個人的には事故らないように deault プロファイルを使わないので、私の環境では明示しないとエラーになります。プロファイルを指定する場合は、

console
$ serverless deploy --profile account1

ステージも指定しなければ dev 環境にデプロイされます。プロダクションなら次のように書く。間違えて prd にデプロイするようなミスがなくなります。

console
$ serverless deploy --stage prd

あと面白いのが、プラグイン serverless-plugin-aws-alerts で Invoke エラーやスロットリングに対してアラーム設定ができる。もう画面ポチポチしなくていいんだよ!

sererless.yml
custom:
  alerts:
    stages:
      - ${opt:stage, self:custom.defaultStage}
    alarms:
      - functionErrors
      - functionThrottles
plugins:
  - serverless-plugin-aws-alerts
※一部省略してます

image.png

🐛 副作用

もちろんアーカイブしてほしくないチャンネルも、時が立てばアーカイブしてくれます。手動で戻します。

image.png

🐛 ハマった所

Slack API を生で叩いててハマることがたまにあります。チャンネル一覧などは取得できるのに、channels.archive メソッド を呼ぶときだけエラーが。権限が不足している?ちゃんと channels:write もScope設定したし、そんなはずないんだけど…

{'ok': False, 'error': 'missing_scope', 'needed': 'channels:write', 'provided': 'identify,bot:basic'}

どうやらアーカイブなどの一部操作は BOT ユーザではきないみたいです。考えることを諦め Legacy トークンを利用しました。
後日調べたところ、 OAuth でアクセストークンを発行するのが正しいやり方のようです。

Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita
SlackでOAuth2を利用したときのメモ - Qiita

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3