[AWS] Slack을 사용해서 EC2 인스턴스 조작하기 본문
이번 포스팅에서는 AWS Chatbot을 활용하여 Slack을 통해 EC2 인스턴스의 상태를 중지/실행으로 변경해고자 한다.
AWS Chatbot
AWS Chatbot은 Microsoft Teams 및 Slack 채널을 통해 AWS 리소스를 쉽게 모니터링하고 상호 작용하도록 지원하는 대화형 에이전트다. AWS Chatbot을 활용하면 알림을 수신하고 명령을 통해 진단 정보를 반환하고, AWS Lambda 함수를 호출하고 AWS Support 케이스를 생성하여 팀이 더 빠르게 협업하고 이벤트에 대응할 수 있다.
AWS Chatbot은 별도의 요금이 존재하지 않는다. 대신 AWS Chatbot 없이 사용하는 것과 동일한 방식으로 사용하는 기본 서비스(예: Amazon Simple Notification Service, Amazon CloudWatch, Amazon GuardDuty, AWS Security Hub)에 대해서만 비용을 지불한다.
본 포스팅에서 사용되는 AWS 리소스는 AWS Chatbot과 EC2, IAM이기 때문에 프리티어 사용 시 발생 비용은 존재하지 않는다.
EC2 생성
우선 이번 포스팅에서 사용할 EC2 인스턴스를 생성한다. 본 포스팅에서 EC2가 메인이 아니고, EC2에서 추가적으로 수행해야 하는 사항은 없기 때문에 EC2 생성 부분은 각자가 원하는 방식대로 자유롭게 생성하면 된다.
마찬가지로 OS 또한 본 포스팅에서 크게 중요한 부분이 아니기 때문에 아무 OS나 택해도 크게 관계없다. 필자는 가장 친숙한 Ubuntu AMI를 선택했다.
실행 및 중지 테스트를 위한 EC2 인스턴스기 때문에, 보안 그룹은 내 IP에서만 접속을 허용해준다. 인스턴스 유형과 스토리지 또한 프리티어를 사용한다.
EC2가 정상적으로 동작하는 것을 확인한 후, Slack과 AWS를 연동하기 위해 AWS Chatbot을 생성한다.
AWS Chatbot과 연결할 클라이언트를 지정해주자. 필자는 이번 포스팅에서는 Slack과 연동하여 사용할 예정이기 때문에 Slack으로 지정했다.
클라이언트 구성 버튼을 누르면, Slack의 워크스페이스와 연동할 수 있는 페이지가 보인다. 만약 연동 가능한 워크스페이스가 존재하지 않다면 새로운 Slack 워크스페이스를 생성하자.
필자는 AWS 관리를 위한 워크스페이스를 새롭게 생성했다.
워크스페이스를 새롭게 만든 후, 다시 AWS Chatbot의 Slack 연동 페이지를 살펴보면 새롭게 만들어진 워크스페이스와 연동이 가능해진 것을 확인할 수 있다.
허용 버튼을 누르면 다음과 같이 해당 워크스페이스와 연동된 AWS Chatbot의 화면을 확인할 수 있다.
다음은 EC2에 접근할 수 있는 IAM을 만들어 챗봇에 부여해보자. 우선 챗봇에 부여할 역할을 생성한다. 역할 생성 버튼을 누르고 AWS 서비스 중 AWS Chatbot에 적용되는 사용 사례를 선택한다.
이번 포스팅의 목적은 챗봇을 활용하여 EC2 인스턴스를 관리하는 것이기 때문에, Amazon EC2 FullAccess 권한을 챗봇에 부여한다.
다음 버튼을 클릭한 후 해당 역할에 이름과 설명을 적절하게 부여하자. 태그의 경우 선택사항이기 때문에 이번 포스팅에서는 추가하지 않았다.
역할 이름과 설명을 부여한 후 생성 버튼을 클릭하면 다음과 같이 역할이 잘 생성된 것을 확인할 수 있을 것이다.
다음은 가드레일을 위한 정책을 부여할 차례다. 정책 생성 버튼을 누른 뒤, 서비스로는 EC2를 선택한다. 본 포스팅의 목적에 부합하는 EC2 인스턴스를 시작, 정지할 수 있는 정책만 허용한다.
이후 다음 버튼을 누르고 마찬가지로 이름과 설명을 적절히 부여하면 성공적으로 가드레일 정책이 생성된다.
이제 만들어진 역할과 정책을 부여한 챗봇 채널을 생성해보자. 채널 생성 과정은 AWS Chatbot과 Slack 워크스페이스의 채널을 연결하는 작업이다. 다시 AWS Chatbot 페이지로 돌아가 새 채널 생성 버튼을 클릭하자.
AWS Chatbot 또한 CloudWatch와의 연동을 통해 로그를 관리할 수 있다. 필요에 따라 해당 옵션을 활성화하면 된다.
채널에 대한 이름을 정해주고 스크롤을 아래로 내리면 연동하고자 하는 Slack 채널에 대한 ID를 입력하는 폼이 나온다. 각자 생성한 혹은 이미 존재하고 있는 워크스페이스의 채널 ID와 채널 유형을 각각 입력하면 된다.
참고로 채널 ID의 경우, 브라우저 사용 시에는 URL 맨 뒷자리에서 확인이 가능하며, 데스크톱 앱을 사용할 경우 채널의 설정 부분에서 확인할 수 있다.
다음은 채널에 역할과 정책을 부여할 차례다. 위에서 생성한 역할과 가드레일 정책을 부여하자.
알림의 경우 특정 상황에서 발생되는 여러가지 이벤트를 Slack 챗봇을 통해 받고 싶을 때 사용하면 된다. 여기까지 설정이 완료됐다면 구성 버튼을 눌러 채널 생성을 완료하면 된다.
채널을 생성했다고 곧장 AWS와 Slack을 연동해서 사용할 수 있는 것은 아니다. AWS 기능을 Slack을 통해 사용하기 위해서는 챗봇과 연동한 Slack 채널에 AWS Chatbot을 초대해야 한다.
해당 채널의 메시지 입력란에 /invite @aws
라는 메시지를 입력한 후 전송하는 것으로 AWS Chatbot을 해당 채널에 초대할 수 있다.
AWS SNS를 통해 알림 설정을 등록했다면 테스트 메시지 전송을 통해 AWS Chatbot이 잘 등록됐는지 확인할 수 있다. 만약 설정하지 않았더라도 챗봇을 사용하는데 큰 문제는 없다.
이제 Slack에 등록된 AWS Chatbot을 통해 처음 만들어두었던 EC2 인스턴스를 중지시켜보자. 우선 생성해둔 EC2 인스턴스의 ID를 복사한 뒤, Slack의 메시지 입력란에 다음과 같이 입력해보자.
@aws ec2 stop-instances --instance-ids {EC2 Instance ID} --region {Region}
이때 주의할 점은 인스턴스 ID를 링크 상태로 복사하면 안된다. 순수한 문자열인 인스턴스 ID를 복사하도록 하자. 인스턴스 상세 페이지에서 복사 버튼을 클릭하는 방법을 권장한다.
해당 메시지를 전송하게 되면 아래의 사진과 같이 스레드가 생성되고 AWS Chatbot이 성공적으로 명령어를 인식했다는 Reply를 확인할 수 있다. 해당 Reply는 명령어를 실행했다는 Reply가 아닌 명령 수행 전 최종 확인을 위한 것이다.
Reply의 [Run] command 를 클릭해야 AWS Chatbot이 입력한 명령어를 수행한다.
성공적으로 수행했다는 챗봇의 Reply를 다음과 같이 확인할 수 있다.
AWS EC2 페이지에 들어가 직접 EC2의 상태를 확인해보면 실행에서 중지 중 상태로 변환된 것을 확인할 수 있다.
중지된 인스턴스를 다시 실행시키고 싶다면
@aws ec2 start-instances --instance-ids {EC2 Instance ID} --region {Region}
명령어를 통해 인스턴스를 실행 상태로 변경할 수 있다.
'Public Cloud' 카테고리의 다른 글
[EKS] Amazon VPC CNI (1) | 2024.07.26 |
---|---|
[AWS] Elastic Block Storage (EBS) (0) | 2024.07.16 |
[AWS] Elastic Network Interface (ENI) (0) | 2024.07.13 |
[AWS] Elastic Load Balancer (0) | 2024.07.11 |
Jenkins 에서 빌드한 Jar 파일 EC2 Instance 에 배포해서 실행시키기 (0) | 2024.02.22 |