안녕하세요
이번 시간에는 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 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 사용하기
Slack Block Kit을 이용하면 다음과 같이 Slack 내에서 여러 가지 버튼 같은 컴포넌트들을 사용할 수 있습니다.
해당 기능을 사용하기 위해 Interactivity & Shortcuts 기능을 사용해야 합니다. 위의 과정을 거쳐 API Gateway와 Lambda를 생성 한 후 컴포넌트 기반의 이벤트를 처리할 Invoke URL을 입력합니다.
다음과 같이 앱을 추가한 후 워크스페이스에서 /invite를 통해 이 채널에 앱 추가를 선택합니다. 해당 채널에 앱이 추가된 것을 확인할 수 있습니다.
다음과 같은 코드를 Lambda에 불러와서 사용하면 해당 프로그래밍을 통해 챗봇을 컨트롤할 수 있게 됩니다. 저는 이 키를 하드코딩해서 사용하지 않고 KMS와 Secret Manager를 사용할 것이기 때문에 자세한 코드와 Slack-Lambda 설정은 다음 포스팅을 통해 확인해보겠습니다.
이번 시간에는 Lambda를 이용한 Serverless 형태의 Slack 챗봇을 구성하는 실습을 진행했습니다.
다음 시간에는 서버리스 환경 구성하는 방법과 Lambda에 실제로 라이브러리와 코드를 올려 챗봇을 통해 테스트 해보겠습니다.
감사합니다.
'Cloud > Amazon Cloud' 카테고리의 다른 글
[AWS] Lambda에서 Timeout 걸릴 때 해결 가능한 방법 알아보기 (0) | 2023.11.30 |
---|---|
[AWS] Lambda에서 Slack 이벤트 Payload를 JSON 형태로 사용하기 (0) | 2023.11.30 |
[AWS] AJAX와 서버리스를 활용한 정적 웹 호스팅 동적으로 전환하기(API Gateway, Lambda, S3) (0) | 2023.07.27 |
[AWS] AWS WorkSpaces: 클라우드 기반 가상 데스크톱의 혁신적인 작업 환경 구성하기 (0) | 2023.07.07 |
[AWS] API Gateway REST API를 이용해 POST 메서드 실습하기 (1) | 2023.04.27 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!