아마존웹서비스 블로그 - ChatOps를 위한 AWS Lambda를 통한 Slack 통합 샘플 코드

(아래 포스트는 아마존 웹 서비스 AWS Korea 블로그에서 보실 수 있습니다.) 




여러분이 속한 개발팀이 채팅 기반 운영(ChatOps)를 하고 계신가요? 대화를 기반으로 하는 새로운 운영 방식을 의미하는 것으로 하나 이상의 봇(bots)을 활용하여 대화에 빠르게 대응하여 상태 확인 및 보고를 해주는 용어입니다. 채팅 환경은 실시간 소통이 가능하고, 손쉽게 여러 사람이 웹 혹은 모바일 기기를 통해 접근할 뿐만 아니라 이전 메시지 기록까지 볼 수 있는 장점이 있습니다. 봇 기반의 통합 작업은 운영팀이 좀 더 협업을 하는데 도움을 주고, 갑작스런 문제에 동시 다발적으로 함께 추적하여 문제를 해결 할 수 있는 방식을 지원 합니다.

신규 Slack 통합 방식
AWS 고객들이 시스템 환경을 좀 더 새롭고 혁신 적인 방식으로 운영을 하기 위해, 최근 AWS Lambda 기반의 Slack 통합 함수 예제 를추가하였습니다.

여러분은 이러한 샘플 예제를 통해 채팅 기반 운영을 할 수 있는 도구를 만들어, 현재 사용하고 계신  Slack 대화안에 넣으실 수 있습니다.slack-echo- 샘플 코드는 특정 명령어에 대응하는 봇을 만들 수 있게 해주고, cloudwatch-alarm-to-slack- 샘플 코드는 알림 및 상태 보고를 도와줍니다. 여러분이 봇에게 AWS API 접근 권한을 부여하기 때문에, (봇을 통해) AWS 자원과 원하는 방법으로 상호 작용할 수 있습니다. 상태를 조회하거나, 오류 조건, 설정 변경 및 새로운 자원 생성도 가능합니다.

CloudWatch 알람을 통해 오토 스케일링 그룹을 모니터링하고, 제한 용량이 초과했을 경우 이를 Slack 채널의 ChatOps 팀에 메시지를 보낸다고 가정해 봅시다. 운영팀에서는 상황을 좀 더 자세히 살펴 보고 빠르게 스케일업을 통해 문제를 해결 할 수 있습니다. 다양한 AWS  자원과 Slack 통합을 통해, 아래와 같이 전체적은 운영 프로세스의 효율화가 가능합니다. (붉은 화살표는 알림, 녹색은 그에 대한 대응입니다.)

이러한 시스템 개발을 위해, 채널에 메시지를 보내기 위한 Slack webhook 을 사용하고, 메시지 내용은  cloudwatch-alarm-to-slack-python 샘플 예제로 보내면 됩니다. 샘플 예제를 기반으로  AWS Key Management Service (KMS) 키를 만든 후, webhook 주소를 암호화하고 base-64 인코딩을 통해  데이터 보안을 할 수 있습니다. 그리고, IAM Role을 통해 KMS Decrypt 함수를 호출 할 수 있는 권한을 부여하면, 됩니다. 슬랙 채널에 메시지를 전달하는 간단한 이벤트 핸들러 함수는 다음과 같습니다.

Python
slack_message = {
    'channel': SLACK_CHANNEL,
    'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
}

req = Request(HOOK_URL, json.dumps(slack_message))

이벤트 핸들러를 통해 호출을 통해 나오는 모든 예외 처리를 할 수 있으며, 샘플 코드에 포함되어 있습니다.

또한, 맞춤형 슬랙 명령어를 구현하는 함수를 만들 수도 있습니다. 이를 위해 Amazon API Gateway를 활용하여, 각 함수의 HTTP 엔드 포인트를 만들고 엔드 포인트에서 명령어를 실행할 슬랙 채널을 설정하면 됩니다. 예를 들어, 아래 설정은 /scale 맟 /forcealarm 명령어를 위한 것입니다.

이벤트 핸들러 함수는 사용자, 명령어, 채널 등에 대한 접근 권한이 있습니다.

Python
def lambda_handler(event, context):
    req_body = event['body']
    params = parse_qs(req_body)

    user = params['user_name'][0]
    command = params['command'][0]
    channel = params['channel_name'][0]
    command_text = params['text'][0]

POST 메서드에 대한 엔드 포인트를 설정하고 NONE에게 권한을 설정하면 됩니다. 또한, JSON에 요청하는 본문을 연결하면 됩니다. 각 샘플 코드에 포함되어 있는 상단의 주석 부분에 좀 더 자세한 정보들이 있으니 참고하시면 됩니다.

— Jeff이 글은 New – Slack Integration Blueprints for AWS Lambda의 한국어 번역입니다.


메가존은 국내 최초 아마존 웹 서비스의 프리미어 파트너 입니다.  


http://awscloud.kr/ 


저작자 표시
신고
Posted by 메가존 호스팅

티스토리 툴바