반응형
반응형

이번 글에서는 AWS Lambda를 활용하여 Slack Bot을 개발하는 과정 중, API Gateway를 통한 이벤트 처리에 대해 자세히 알아보겠습니다. 이 글은 "AWS Lambda를 이용한 Slack Bot 개발 가이드"의 두 번째 글입니다.

첫 번째 글에서는 AWS Lambda와 Slack Bot의 기본 설정, 권한 관리, 토큰 설정 등에 대해 알아보았습니다. 이러한 기본 설정이 완료되었다면, 이번 글에서는 실제로 Slack에서 발생하는 이벤트를 AWS Lambda 함수에서 어떻게 처리할 수 있는지에 대해 살펴보겠습니다.

API Gateway는 AWS에서 제공하는 완전 관리형 API 생성 및 관리 서비스입니다. 이를 통해 HTTP 요청을 Lambda 함수에 연결할 수 있으며, 이 과정에서 다양한 설정과 커스터마이징이 가능합니다. 이 글에서는 API Gateway를 설정하는 방법부터, Slack 이벤트를 받아 처리하는 Lambda 함수까지의 전체적인 흐름을 설명하려고 합니다.

이 글을 통해 여러분은 다음과 같은 내용을 배울 수 있습니다:

  • API Gateway의 기본적인 설정 방법
  • Slack에서 발생하는 이벤트를 API Gateway를 통해 Lambda 함수로 라우팅 하는 방법
  • Lambda 함수에서 Slack 이벤트를 처리하는 로직 구현

이제 본격적으로 API Gateway를 통한 Slack 이벤트 처리에 대해 알아보겠습니다.


"Request URL 붙여 넣기"를 완료한 후에는, 이 URL을 Slack과 AWS Lambda가 서로 통신할 수 있는 중심 역할을 하게 됩니다. 이 URL은 Slack에서 발생하는 이벤트를 AWS Lambda로 전달하는 역할을 하며, 이를 통해 실시간으로 다양한 이벤트 처리가 가능해집니다. Request URL 설정이 선행되어 있어야 합니다. 만약 설정이 되어있지 않다면 이전 글을 참고하시기 바랍니다.

 

AWS Lambda를 이용한 Slack Bot 개발 (1) : 기본 설정

Slack은 협업 도구로서의 역할을 넘어 다양한 통합과 자동화를 가능하게 하는 강력한 플랫폼입니다. 특히 Slack Events API를 활용하면, 사용자의 메시지, 멘션, 리액션 등 다양한 이벤트에 반응하는

yunwoong.tistory.com

#1. Slack Bot 활성화 및 이벤트 관리

Slack 앱 설정 페이지에서 "Event Subscriptions" 탭으로 이동한 후, "Subscribe to bot events" 섹션을 찾습니다. 이곳에서는 Slack에서 발생하는 다양한 이벤트를 구독할 수 있고, 이를 AWS Lambda로 전달할 수 있습니다.

1. Subscribe to bot events영역에서 [ Add Bot User Event ] 버튼을 클릭하여 드롭다운 목록에서 "message.channels"을 선택하고 [ Save Changes ]를 클릭합니다. 이렇게 하면 message.channels 이벤트를 구독하게 되며, 사용자가 봇에게 직접 메시지를 보낼 때마다 이 이벤트가 발생합니다.

2. Slack 앱 설정 페이지에서 "OAuth & Permissions" 탭으로 이동합니다. 이곳에서는 앱이 사용자나 채널과 상호작용할 때 필요한 권한을 설정할 수 있습니다. 페이지 하단의 "Bot Token Scopes" 섹션을 찾아 "Add an OAuth Scope" 버튼을 클릭합니다. 나타나는 드롭다운 목록에서 "channels:history""chat:write"를 추가합니다. 권한은 변경 시 자동 자정됩니다. 하지만 권한을 추가하거나 변경한 후에는 Slack 앱을 재설치해야 변경된 권한이 적용됩니다. "OAuth & Permissions" 페이지 상단에 위치한 "Install App to Workspace" 버튼을 클릭하여 앱을 재설치할 수 있습니다. 이 과정을 거치지 않으면, 새로 추가한 권한은 적용되지 않을 것입니다.

3. "OAuth & Permissions" 페이지에서 권한 설정을 완료한 후, 이제 Slack 앱을 워크스페이스에 설치해야 합니다.  "OAuth & Permissions" 페이지 상단에 위치한 "Install App to Workspace" 버튼을 클릭합니다.

3. 새로운 창이 열리면, 앱이 요청하는 권한을 확인하고 [ 허용 ] 버튼을 클릭하여 승인합니다.

4. "Install to Workspace" 과정을 완료하고 권한을 승인한 후에는, "OAuth & Permissions" 페이지에서 "Bot User OAuth Token"을 확인할 수 있습니다. 이 토큰은 Slack API를 사용하여 봇이 워크스페이스에서 작동할 수 있게 하는 중요한 인증 정보입니다. 이 Token은 뒤에서 AWS Lambda 함수에서 Slack API를 호출할 때 사용됩니다. 이 Token은 매우 중요하므로 안전하게 보관해야 하며, 노출되지 않도록 주의해야 합니다.

5. Slack 워크스페이스의 좌측 앱에서 bot을 누르고 채널 상단의 bot을 클릭합니다. 팝업이 뜨면 ‘이 앱을 채널에 추가’를 눌러 원하는 채널을 선택하여 추가합니다.


#2. API Gateway 설정: Code 수정 및 배포

AWS Lambda 함수와 Slack을 연동하기 위해서는 API Gateway를 통해 HTTP 엔드포인트가 설정되어 있어야 합니다. 만약 설정이 되어 있지 않다면 이전 글을 참고하시기 바랍니다. 이미 설정한 API Gateway를 수정하고 배포하는 과정은 다음과 같습니다.

1. AWS Management Console에 로그인한 후, "Services"에서 "API Gateway"를 선택하고 이미 생성한 API를 목록에서 찾아 선택합니다.

 

AWS Management Console

AWS Support 플랜은 AWS로 성공하는 데 도움이 되는 다양한 도구, 프로그램 및 전문 지식에 대한 액세스의 조합을 제공합니다.

aws.amazon.com

2. 코드 탭으로 이동하여 lambda_function.py 파일을 아래와 같이 수정합니다.

import json
import os
from urllib import request, parse

def lambda_handler(event, context):
    # 환경 변수에서 Slack 토큰 읽기
    bot_token = os.environ.get('BOT_TOKEN')
    print(bot_token)
    # Slack 이벤트 데이터 파싱
    body = json.loads(event['body'])
    print(f"Received body: {body}")
    
    # 메시지 이벤트 처리
    if 'event' in body:
        slack_event = body['event']
        
        # 채널 메시지인 경우
        if slack_event['type'] == 'message' and 'channel_type' in slack_event and slack_event['channel_type'] == 'channel':
            user_id = slack_event['user']
            text = slack_event['text']
            
            # "안녕" 메시지에 대한 응답
            if text == 'hello':
                response_text = f"hello, <@{user_id}>님!"
                post_message_to_slack(response_text, slack_event['channel'], bot_token)
                
    return {
        'statusCode': 200,
        'body': json.dumps('Event processed')
    }

def post_message_to_slack(response_text, channel_id, bot_token):
    url = "https://slack.com/api/chat.postMessage"
    headers = {
        'Authorization': f"Bearer {bot_token}",
        'Content-Type': 'application/json'
    }
    payload = json.dumps({
        'channel': channel_id,
        'text': response_text
    }).encode('utf-8')
    
    req = request.Request(url, data=payload, headers=headers)
    response = request.urlopen(req)
    response_data = response.read()

3. 코드 수정이 완료되면, 상단의 [ Deploy ] 버튼을 클릭합니다. 이렇게 하면 수정한 코드가 자동으로 배포됩니다.


#3. Lambda 함수와 Slack 연동 테스트

Bot이 추가된 Slack 채널로 이동하여 테스트 메시지 "hello"를 전송하면 Bot이 "hello, [Your Username]님!"이라고 응답을 한다면 정상적으로  AWS Lambda 함수와 Slack이 올바르게 연동되었는지 확인할 수 있습니다.


#4. AWS CloudWatch를 통한 로그 확인 방법

1. 탭 중에서 "모니터링"을 선택하고 페이지 내에서 "로그"탭에서 [ CloudWatch Logs 보기 ] 버튼을 클릭합니다.

2. 해당 Lambda 함수에 대한 CloudWatch Logs 페이지가 새 탭이나 창에서 열립니다. 여기에서는 함수 실행에 관한 로그를 상세하게 확인할 수 있습니다. 여러 로그 스트림 중 확인하고자 하는 로그 스트림을 선택합니다.

3. 선택한 로그 스트림에서는 Lambda 함수 실행에 관한 로그를 상세하게 확인할 수 있습니다. 여기에서는 함수가 어떻게 실행되었는지, 어떤 이벤트가 발생했는지, 오류는 없었는지 등의 정보를 확인할 수 있습니다.

CloudWatch 로그를 통해 Lambda 함수의 실행 상태, 오류 메시지, 다른 중요한 정보를 쉽게 확인할 수 있습니다.


이 가이드를 통해 AWS Lambda와 Slack을 연동하는 방법에 대해 알아보았습니다. 설정부터 코드 수정, 배포, 그리고 로그 확인까지 여러 단계를 거쳐 실제로 작동하는 봇을 만들어 보았습니다. CloudWatch를 활용한 로그 분석은 특히 문제 해결과 성능 모니터링에 큰 도움이 될 것입니다.

AWS Lambda와 Slack의 연동은 다양한 자동화와 통합 설루션을 가능하게 합니다. 이 기술을 활용하면 팀의 작업 효율을 크게 높일 수 있을 것입니다.

반응형