슬랙의 슬래시(/) 명령어를 AWS 를 이용하여 구현
-
./src/SlackSlashCommandSuite/slack_slash_command_lambda아래의 파일을 zip 으로 묶어 올린다 -
람다가 프라이빗 서브넷에 접근하면서, 외부 인터넷도 되어야 하는 상황이면 추가 설정이 필요하다
- API 를 생성하고 리소스를 생성한다
POST메서드를 생성하고, 람다를 통합 포인트로 선택한다통합 요청의매핑 템플릿의매핑 템플릿 추가(정의된 템플릿이 없는 경우)를 누른다Content-Type에application/x-www-form-urlencoded를 입력하고, 코드를 붙여넣어 저장한다- 슬랙이 보내는 데이터를 람다가 처리할 수 있도록 변환한다
- 참고
통합 응답의매핑 템플릿의application/json항목에#set($inputRoot = $input.path('$'))를 추가한다- 람다에서 리턴하는 메시지를 슬랙에서 보이지 않도록 하기 위한 것으로 생략해도 된다
- 슬랙에서 명령은 보이지 않고, 결과만 보이게 하고 싶은 경우에 사용한다
- 참고
- 람다에서 리턴하는 메시지를 슬랙에서 보이지 않도록 하기 위한 것으로 생략해도 된다
- 구현은
Node.js로 하였다 app.jssrc/commands아래에 슬랙 명령어를 이름으로 하는js파일의work함수를 호출한다- 예를 들어
/test라는 명령어는src/commands/test.js파일에work함수로 구현한다
- 예를 들어
- 람다 환경 변수
- 설정과 같은 외부 정보를 저장하는데 활용한다
- 코드 내에서
process.env.이름으로 접근한다process.env.slack_slash_command_token
- 코드 내에서
- 검사를 위해
slack_slash_command_token에 슬랙의 토큰 값을 넣는다- 토큰 값은 해당 명령어의 설정에서 찾을 수 있다
- 참고
- 설정과 같은 외부 정보를 저장하는데 활용한다
- Cold Start 방지
- 대부분의 람다 호출이 Cold Start 로 실행될 가능성이 높다
- 자원을 할당 받는 시간만큼 명령 응답이 늦어진다
- CloudWatch 의 Event 로 람다를 주기적으로 호출하여 Warm Start 를 유지한다
- 입력
json에"from_cloud_watch": true를 추가하여, 슬랙이 아닌 AWS 의 Event 임을 알린다{ "from_cloud_watch": true }
- 참고
- 입력
- 대부분의 람다 호출이 Cold Start 로 실행될 가능성이 높다
- 메시지 포멧
- 원하는 모양의 결과를 얻으려면 슬랙의 메시지 포멧을 참고한다