이전 Slack 채널을 자동으로 아카이브하는 기능을 만들었습니다.

💡 만든 것



매월 첫 월요일에 오랫동안 게시가 없는 슬랙 채널을 하나만 아카이브해 줍니다. 이런 것은 기계적으로 하는 것이 좋을 것입니다.



채널에 참여하는 모든 사람들이 외롭지 않도록 수수께끼의 메시지를 남기고 나서 아카이브하도록했습니다. 덧붙여 참가자에게는 멘션이 도착해, 필요하면 수동으로 되돌릴 수 있으므로 실해는 없을까 생각합니다.

아티팩트



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을 사용하도록 했습니다. 프로필을 지정하는 경우,

콘솔
$ serverless deploy --profile account1

스테이지도 지정하지 않으면 dev 환경에 배치됩니다. 프로덕션이라면 다음과 같이 쓴다. 실수로 prd에 배포하는 오류가 사라집니다.

콘솔
$ 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
※一部省略してます



🐛 부작용



물론 아카이브하고 싶지 않은 채널도 때가 되면 아카이브해 줍니다. 수동으로 되돌립니다.



🐛 빠진 곳



Slack API를 원시로 두드리고 빠지는 경우가 있습니다. 채널 일람등은 취득할 수 있는데, channels.archive 메서드 를 부를 때만 에러가. 권한이 부족한가? 제대로 channels:write 도 Scope 설정했고, 그럴 리 없지만…
{'ok': False, 'error': 'missing_scope', 'needed': 'channels:write', 'provided': 'identify,bot:basic'}

분명히 아카이브와 같은 일부 작업은 BOT 사용자가 아닌 것 같습니다. 생각을 포기하고 Legacy 토큰을 사용했습니다.
나중에 조사한 결과 OAuth에서 액세스 토큰을 발행하는 것이 올바른 방법입니다.

Slack에서 업무 채널의 평온을 유지하는 봇, 그리고 인간의 토큰을 bot에게 주는 이야기 - Qiita
Slack에서 OAuth2를 사용할 때의 메모 - Qiita

좋은 웹페이지 즐겨찾기