Amazon Web Services 한국 블로그
AWS Chatbot – Microsoft Teams와 통합 기능 제공
오늘부터 AWS Chatbot을 사용하여 Microsoft Teams에서 AWS 리소스를 운영하고 관련 문제를 해결할 수 있게 되었음을 알려드리게 되어 기쁩니다.
채팅 채널을 통해 IT 운영 작업에 대해 소통하고 협업하는 것을 ChatOps라고 합니다. 이를 통해 인프라 및 애플리케이션의 관리를 중앙 집중화하는 것은 물론, 워크플로를 자동화하고 간소화할 수도 있습니다. 익숙한 채팅 인터페이스를 통해 동료와 실시간으로 소통하고 작업하여 작업을 수행할 수 있으므로 보다 인터랙티브하고 협력적인 경험을 제공하는 데 도움이 됩니다.
AWS는 2020년에 Amazon Chime과 Slack을 통합하여 AWS Chatbot을 출시했습니다. 그 이후로 채팅 플랫폼 환경은 빠르게 발전했으며 현재 많은 고객이 Microsoft Teams를 사용하고 있습니다.
AWS Chatbot의 이점
Microsoft Teams용 AWS Chatbot 또는 기타 채팅 플랫폼을 사용하면 채팅 채널에서 직접 AWS 서비스로부터 알림을 수신하고, 다른 도구로 전환하지 않고도 명령을 입력하여 인프라에서 작업을 수행할 수 있습니다.
일반적으로 고객들은 시스템 상태, 예산, 새로운 보안 위협 또는 위험 또는 CI/CD 파이프라인의 상태에 대한 알림을 받아야 합니다. 채팅 채널로 메시지를 보내려면 Amazon Simple Notification Service(SNS) 주제로 메시지를 전송하기만 하면 됩니다. Amazon CloudWatch 경보와 SNS가 기본적으로 통합되므로, 추가 구성 단계 없이 경보가 채팅 채널에 자동으로 전송됩니다. 마찬가지로, Amazon EventBridge와 SNS가 통합되므로, EventBridge로 이벤트를 전송하는 모든 시스템 또는 서비스가 채팅 채널로 정보를 전송할 수 있습니다.
하지만 ChatOps를 구현하려면 단순히 발생하는 문제를 찾아내는 것으로는 부족합니다. AWS Chatbot을 사용하면 사전 정의된 CloudWatch 대시보드가 대화식으로 제공되며, Logs Insights 로그를 검색하여 채팅 스레드에서 직접 문제를 해결할 수 있습니다. 또한 대부분의 AWS Command Line Interface(AWS CLI) 명령을 채팅 채널에 직접 입력하여 추가 텔레메트리 데이터 또는 리소스 정보를 검색하거나 런북을 실행하여 문제를 해결할 수 있습니다.
긴 명령을 입력하고 기억하기는 어렵습니다. AWS Chatbot을 사용하면 자주 사용하는 명령과 해당 파라미터를 참조하는 별칭을 직접 정의할 수 있습니다. 작업을 완료하는 데 필요한 단계 수가 줄어듭니다. 별칭은 유연하게 정의할 수 있으며, 쿼리 시 삽입된 하나 이상의 사용자 지정 파라미터를 별칭에 포함할 수 있습니다.
또한 채팅 채널은 대화를 지원하도록 설계되었으므로, 자연어로 질문할 수도 있고 AWS Chatbot이 AWS 설명서 또는 지원 문서에서 관련 내용을 발췌하여 답변하도록 할 수도 있습니다. 자연어를 이해하므로 “eu-west-3에 있는 내 ec2 인스턴스 보여줘”와 같은 쿼리를 만들 수도 있습니다.
AWS Chatbot과 Microsoft Teams 간의 통합 구성
두 단계로 시작할 수 있습니다. 먼저 Microsoft Teams에서 팀을 구성합니다. Teams 관리자인 저는 AWS Chatbot 애플리케이션을 팀에 추가하고, Microsoft Teams 채널에서 알림을 수신하고 AWS 리소스를 운영하는 데 사용할 채널의 URL을 기록해 둡니다.
다음으로, AWS Chatbot에 Microsoft Teams 채널을 등록합니다. 또한 채널 멤버가 이 채널에서 수행할 수 있는 작업을 결정하는 IAM 권한을 할당하고 SNS 주제를 연결하여 알림을 수신합니다. AWS Management Console, AWS CloudFormation 템플릿 또는 AWS Cloud Development Kit(AWS CDK)를 사용하여 AWS Chatbot을 구성할 수 있습니다. 이 데모에서는 콘솔을 사용하기로 결정했습니다.
Management Console을 열고 AWS Chatbot 섹션으로 이동합니다. 화면 오른쪽 상단의 Configure a chat client(채팅 클라이언트 구성) 상자에서 Microsoft Teams를 선택한 다음 Configure client(클라이언트 구성)를 선택합니다.
Teams 앱에서 적어둔 Microsoft Teams 채널 URL을 입력합니다.
이 단계에서 Chatbot은 인증을 위해 브라우저를 Microsoft Teams로 리디렉션합니다. 이미 인증을 받은 경우 즉시 AWS Console로 다시 리디렉션됩니다. 그렇지 않으면 Microsoft Teams 보안 인증 정보와 일회용 암호를 입력하고 리디렉션될 때까지 기다립니다.
이제 제 Microsoft Teams 팀이 AWS Chatbot에 등록되어 Microsoft Teams 채널을 추가할 준비가 되었습니다. Configure new channel(새 채널 구성)을 선택합니다.
구성 세부 정보를 입력할 수 있는 네 개의 섹션이 있습니다. 첫 번째 섹션에서는 채널의 Configuration name(구성 이름)를 입력합니다. 필요한 경우 Logging(로깅) 세부 정보도 정의합니다. 두 번째 섹션에서는 Microsoft Teams Channel URL(채널 URL)을 다시 붙여 넣습니다.
세 번째 섹션에서는 Permissions(권한)를 구성합니다. 팀의 모든 Microsoft Teams 사용자에 대해 동일한 권한 세트를 선택하거나, User-level roles(사용자 수준 역할) 권한을 설정하여 채널에서 사용자별 권한을 활성화할 수 있습니다. 이 데모에서는 Channel role(채널 역할)을 선택하고 채널에 IAM 역할을 할당합니다. 이 역할은 채널의 모든 사용자가 공유하는 권한을 정의합니다. 예를 들어 사용자가 Amazon EC2의 구성 데이터에는 액세스할 수 있지만 Amazon S3의 데이터에는 액세스하지 못하도록 하는 역할을 할당할 수 있습니다. Channel role(채널 역할)에서 Use an existing IAM role(기존 IAM 역할 사용)을 선택합니다. Existing role(기존 역할)에서 2019년 re:Invent에서 ChatOps에 대한 강연에 사용하기 위해 제가 만든 chatbot-demo
라는 역할을 선택합니다. 이 역할은 모든 AWS 서비스에 대한 읽기 전용 액세스를 제공하지만 Chatbot 사용자가 AWS 리소스에 대해 작업을 수행할 수 있도록 다른 역할을 할당할 수도 있습니다.
팀의 다른 사람이 실수로 채널 또는 사용자 수준 역할에 필요한 것보다 더 많은 권한을 부여할 위험을 줄이기 위해 Channel guardrail policies(채널 가드레일 정책)를 포함할 수도 있습니다. 가드레일 정책은 사용자가 채널을 사용할 때 부여받을 수 있는 최대 권한을 규정합니다. 런타임에서 실제 권한은 채널 또는 사용자 수준 정책과 가드레일 정책의 교집합에 따라 결정됩니다. 가드레일 정책은 채널 사용자가 절대 벗어날 수 없는 경계와 같은 역할을 합니다. 이 개념은 IAM 엔터티의 권한 경계 또는 AWS Organizations의 서비스 제어 정책(SCP)과 유사합니다. 이 예에서는 ReadOnlyAccess 관리형 정책을 연결합니다.
네 번째이자 마지막 섹션에서는 팀의 채널로 전송되는 알림의 소스가 될 SNS 주제를 지정할 수 있습니다. CloudWatch 경보와 같은 애플리케이션 또는 AWS 서비스는 이 주제로 메시지를 보낼 수 있으며, AWS Chatbot은 모든 메시지를 구성된 Microsoft Teams 채널로 릴레이합니다. Amazon EventBridge와 SNS가 통합되므로 EventBridge에 메시지를 보낼 수 있는 모든 애플리케이션은 Microsoft Teams에 메시지를 전송할 수 있습니다.
이 데모에서는 기존 SNS 주제인 us-east-1
리전의 alarmme
를 선택합니다. 다양한 리전에서 경보를 수신하도록 여러 SNS 주제를 구성할 수 있습니다. 그런 다음 Configure(구성)를 선택합니다.
통합 테스트
이것으로 완료되었습니다. 이제 설정을 테스트할 준비가 되었습니다.
AWS Chatbot 구성 페이지에서 먼저 Send test message(테스트 메시지 전송)를 선택합니다. 예상 요금이 500 USD를 초과하면 수신하게 되는 경보도 정의했습니다. Management Console의 CloudWatch 섹션에서 Microsoft Teams와 공유하는 SNS 주제에 메시지를 게시하도록 경보를 구성합니다.
몇 초 안에 Microsoft Teams 채널에서 테스트 메시지와 경보 메시지를 수신하게 됩니다.
그런 다음 명령을 입력하여 요금 경보의 출처를 파악합니다. 이제 실행 중인 EC2 인스턴스의 수를 알고자 합니다.
채팅 클라이언트 채널에서 @aws
를 입력하여 Chatbot을 대상으로 선택한 다음 터미널에서와 마찬가지로 다음과 같은 나머지 CLI 명령을 실행합니다. ec2 describe-instances --region us-east-1 --filters "Name=architecture,Values=arm64_mac" --query "Reservations[].Instances[].InstanceId"
Chatbot이 몇 초 안에 응답합니다.
자주 사용하는 명령의 별칭을 생성할 수 있습니다. 별칭에는 리전 이름과 같이 런타임에 지정할 수 있는 자리 표시자 파라미터가 있을 수 있습니다.
다음 명령을 사용하여 별칭을 생성하고 내 macOS 인스턴스 ID의 목록을 가져옵니다. aws alias create mac ec2 describe-instances --region $region --filters "Name=architecture,Values=arm64_mac" --query "Reservations[].Instances[].InstanceId"
이제 @aws alias run mac us-east-1
을 단축키로 입력하여 위와 동일한 결과를 얻을 수 있습니다. @aws alias list
, @aws alias get
및 @aws alias delete
명령을 사용하여 별칭을 관리할 수도 있습니다.
다른 분들은 어떨지 모르겠지만, 저는 이 명령들을 일일이 기억하기가 힘듭니다. 터미널을 사용할 경우 자동 완성 기능이 다양한 명령과 해당 옵션을 안내해줍니다. AWS Chatbot도 유사한 명령 완성 기능을 제공하며 누락된 파라미터를 추가하도록 안내합니다.
AWS Chatbot을 사용할 때는 자연어(영어)로 질문을 할 수도 있습니다. @aws 내 EC2 인스턴스에 태깅하려면 어떻게 해야 하지?
또는 @aws Lambda 동시성 설정은 어떻게 구성하지?
같은 질문을 입력하여 AWS 문서 및 지원 문서에서 답변을 찾는 데 유용하게 활용할 수 있습니다.
또한 AWS Resource Explorer가 활성화되면 내 계정에서 리소스를 찾을 수 있습니다. 예를 들어 봇에게 @aws 내 ec2 리소스의 태그는 어떤 것들이 있지?
, @aws 내가 어느 리전에서 Lambda 서비스를 사용하고 있지?
같은 질문을 할 수 있습니다.
그 결과 다음과 같은 응답을 받았습니다.
AWS Chatbot 덕분에 ca-central-1
에 악성 Lambda 함수가 남아 있는 것을 발견했습니다. 그리고 AWS Console을 사용하여 삭제했습니다.
정식 출시
지금 바로 Microsoft Teams에서 AWS Chatbot을 사용할 수 있습니다. Microsoft Teams용 AWS Chatbot은 Microsoft Teams 앱에서 추가 비용 없이 다운로드할 수 있습니다. AWS Chatbot은 모든 퍼블릭 AWS 리전에서 추가 비용 없이 사용할 수 있습니다. 사용한 기반 리소스에 대한 요금만 지불하면 됩니다. 채팅 클라이언트에서 요금이 발생할 수 있습니다.
지금 바로 시작하고 Microsoft Teams와의 첫 번째 통합을 구성해보세요.