Cloud/Amazon Cloud

[AWS] Lambda를 이용한 Serverless 형태의 Slack 챗봇 사용하기 - 1

__Evening 2023. 11. 30. 10:46
반응형

안녕하세요

 

이번 시간에는 Lambda를 이용한 Serverless 형태의 Slack 챗봇을 사용하는 실습을 진행하려고 합니다.

 

이미 기존에 Flask와 Ngrok을 사용하여 Slack 챗봇을 사용하는 포스팅이 많이 있기 때문에

이번 시간에는 API Gateway와 Lambda를 이용하여 서버리스 형태로 간단히 사용해 보는 실습을 진행하겠습니다.

생각보다 서버로 구성하는 것과 어느정도 차이가 있기 때문에 서버로 먼저 구성해 보신 후 해보는 것이 좋을 것 같습니다.

 

1. 아키텍처

 

Slack에서 대화형으로 채팅을 쳤을 때 Slack API를 통해 API Gateway에 요청을 보내고 Lambda가 실행됩니다. Lambda에서 처리 로직을 거쳐 모니터링 이미지는 Lambda 파일시스템 및 S3에 저장하고 호출하여 다시 사용자에게 반환합니다. 이때 API Key나 Slack Bot Token은 KMS와 Secret Manager를 통해 관리합니다. S3를 사용하지 않고 파일 시스템(EFS)을 사용하는 방법도 있긴 하나 이번 포스팅에서 다루지는 않겠습니다.

 

2. SLACK API

Unlock your productivity potential with Slack Platform | Slack

 

Slack은 생산성 플랫폼입니다

Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

Slack API 홈페이지에서는 채팅 봇을 생성할 수 있는 기능을 제공합니다. 먼저 채팅 봇을 생성해주어야 합니다.

 

다음과 같이 Create New App을 선택하여 새로운 앱을 추가할 수 있습니다.

 

다음과 같이 새로운 앱을 생성해주셨다면 Add features and functionality에서 앱에 대한 다양한 설정이 가능합니다. 기본적으로 설정해주셔야 하는 항목은 Bots, Permissions이고, 이벤트 기반의 다양한 동작을 추가하기 위해서는 Event Subscriptions와 Interactive Components를 추가해야 합니다.

 

1. Permissions 설정하기

먼저 새로운 앱을 워크스페이스에 설치하기 위해 Permissions를 등록해주어야 합니다.

 

아래로 내리시면 Scopes를 확인할 수 있는데 여기서 Bot Token Scopes 설정을 추가해주어야 합니다.

 

OAuth Scope Description
app_mentions:read 대화에서 @앱 멘션을 직접 언급하는 메세지 보기
channels:history 챗봇이 추가된 공개 채널에서 메세지 및 기타 콘텐츠 보기
channels:read 워크스페이스의 공개 채널에 대한 기본 정보 보기
chat:write @앱 멘션을 이용한 메세지 보내기
commands 사용할 수 있는 단축키 및/또는 슬래시 명령 추가
files:read 챗봇이 추가된 채널 및 대화에서 공유된 파일 보기
files:write 챗봇으로 파일 업로드, 편집, 삭제
groups:history 챗봇이 추가된 비공개 채널의 메시지 및 기타 콘텐츠 보기
groups:read 챗봇이 추가된 비공개 채널의 기본 정보를 확인
im:history 챗봇이 추가된 다이렉트 메시지의 메시지 및 기타 콘텐츠 보기
im:read 챗봇이 추가된 다이렉트 메세지에 대한 기본 정보를 확인
mpim:history 챗봇이 추가된 그룹 다이렉트 메시지의 메시지및 기타 콘텐츠 보기
mpim:read 챗봇이 추가된 그룹 쪽지에 대한 기본 정보를 확인
users:read 워크스페이스에 있는 사람 보기

저는 다음과 같이 저의 앱에 필요한 권한을 추가했습니다. 다음과 같이 필요한 권한을 추가해 줍니다.

 

2. Bot 앱 설치하기

Scopes 설정을 완료한 후 위쪽으로 올려 Install to Workspace를 통해 워크스페이스에 해당 앱을 설치합니다.

 

설치되고 나면 해당 봇 토큰을 이용해 해당 앱을 제어할 수 있습니다. 설치가 완료되고 나면 다음과 같이 Bots도 활성화된 것을 확인할 수 있습니다.

 

3. Event Subscriptions, Interactive Components 설정하기

동작과 컴포넌트 기반의 응답을 처리하기 위해서는 API Gateway와 Lambda를 통해 사용자에게 응답을 해주어야 합니다.

 

API Gateway를 HTTP API로 생성합니다. 지연 시간이 짧고 비용 효율적이기 때문에 테스트를 용도로 사용하였습니다.

 

저는 ChatOps_Slack_API 라고 하는 이름의 API를 생성해 주었고 다음과 같이 생성을 선택합니다.

 

Slack에 POST 방식으로 응답을 주어야 하기 때문에 메서드는 POST 방식으로 생성합니다. 경로를 본인 환경에 맞게 설정하셔도 무방합니다. 생성할 때 자동 배포해 주었다면 따로 API를 배포하실 필요 없고 자동 배포가 선택되지 않았다면 스테이지를 먼저 생성하신 후 배포를 진행해 주시면 됩니다.

 

4. Lambda 함수 생성하기

다음과 같이 Lambda 함수를 생성한 후 API Gateway로 돌아가 Lambda 함수를 연결해준 뒤 API 배포를 합니다.

 

다음과 같이 생성한 Lambda 함수를 API Gateway의 / (POST)에 연결한 후 API를 배포해 주시면 되는데 저는 API Gateway를 생성할 때 자동 배포를 활성화해놓았기 때문에 자동 배포가 활성화되지 않으신 분들은 다음 절차를 통해 배포하시면 됩니다.

 

스테이지에 생성된 Invoke URL을 복사하여 다시 Slack API로 돌아가 설정을 진행합니다.

 

다음과 같이 복사한 Invoke URL을 붙여넣어준 후에 Verified가 정상적으로 체크되면 저장해 줍니다. Lambda 코드에서 Return 값으로 정상적으로 200을 보내줘야 Event Subscriptions에서 Verified로 체크하는 점을 참고해 주시면 될 것 같습니다.

 

5. Slack Block Kit 사용하기

Block Kit | Slack

 

Block Kit

A clean and consistent UI framework for Slack apps

api.slack.com


Slack Block Kit을 이용하면 다음과 같이 Slack 내에서 여러 가지 버튼 같은 컴포넌트들을 사용할 수 있습니다. 

 

해당 기능을 사용하기 위해 Interactivity & Shortcuts 기능을 사용해야 합니다. 위의 과정을 거쳐 API Gateway와 Lambda를 생성 한 후 컴포넌트 기반의 이벤트를 처리할 Invoke URL을 입력합니다.

 

다음과 같이 앱을 추가한 후 워크스페이스에서 /invite를 통해 이 채널에 앱 추가를 선택합니다. 해당 채널에 앱이 추가된 것을 확인할 수 있습니다.

다음과 같은 코드를 Lambda에 불러와서 사용하면 해당 프로그래밍을 통해 챗봇을 컨트롤할 수 있게 됩니다. 저는 이 키를 하드코딩해서 사용하지 않고 KMS와 Secret Manager를 사용할 것이기 때문에 자세한 코드와 Slack-Lambda 설정은 다음 포스팅을 통해 확인해보겠습니다.

 

이번 시간에는 Lambda를 이용한 Serverless 형태의 Slack 챗봇을 구성하는 실습을 진행했습니다.

다음 시간에는 서버리스 환경 구성하는 방법과 Lambda에 실제로 라이브러리와 코드를 올려 챗봇을 통해 테스트 해보겠습니다.

 

감사합니다.

반응형