Amazon Web Services 한국 블로그

Amazon CloudWatch Events 서울 리전 서비스 개시 – AWS 자원 변경에 대한 실시간 추적 기능

지난 1월에 처음 소개된 Amazon CloudWatch Events 서비스를 오늘 부터 Asia Pacific (Seoul) 리전에서 사용하실 수 있습니다.

본 서비스를 활용하시면, EC2 인스턴스, RDS 인스턴스 및 CloudTrails를 통한 다양한 API 실행 등의 이벤트를 CloudWatch를 통해 스트림 방식으로 실시간으로 얻을 수 있고, 이를 통해 빠르게 대응할 수 있는 기능입니다.

이를 통해 EC2  인스턴스가 종료되었을 때, SNS 토픽을 통해 알림을 받을 수도 있고, EBS 볼륨을 분 단위로 스냅샷을 만들 수도 있습니다.

아래 글은 Amazon CloudWatch Events를 설명한 New CloudWatch Events – Track and Respond to Changes to Your AWS Resources의 한국어 편집본입니다.

AWS에서 실행되는 응용 프로그램에서는 많은 이벤트들이 일어나고 있습니다. 시스템 부하에 따라 자동 스케일링(Auto Scaling) 정책을 통해 EC2 인스턴스 생성 및 제거를 할 수도 있고, DynamoDB 테이블이나 SNS 토픽, SNS 큐가 삭제 될 수 있습니다. 기존 클라우드 자원에 관해 AWS 관리 콘솔, AWS API, AWS Command Line Interface (CLI) 에서 다양하게 각 속성이 변경 될 수 있습니다.

대부분 고객들은 직접 높은 수준의 도구를 개발하여, AWS 자원 환경 전체 상황을 추적 및 감시, 운용하고 있습니다. 그리고 이러한 도구들은 지금까지 폴링(Polling) 형식으로 운영하고 있습니다. 즉, 정기적으로 DescribeInstances, DescribeVolumesListQueues (여기에서는 EC2 인스턴스, EBS 볼륨 및 SQS 큐) 등 AWS 함수를 호출하여 다양한 종류의 AWS 자원 상태를 추적합니다. 각 목록을 얻을 다른 API를 호출해야만, 과거의 데이터와 비교하여 변화를 감지하고 조치를 취할 수 있습니다. 따라서, 시스템이 커지고 복잡한게 될때는 이 부분에 대한 상태 관리가 어려워지게 됩니다.

CloudWatch Events 신규 기능
AWS 자원의 상태 변화를 보다 쉽고 효율적으로 관리할 수​​ 있는 CloudWatch Event를 출시합니다.

CloudWatch Event는 AWS 자원 변경 정보를 바로 스트리밍 방식으로 전달합니다. 간단한 전달 규칙을 몇 분 안에 쉽게 만들 수 있고, 여러 방식으로 이 기능을 연계할 수 있습니다. (AWS Lambda 함수, Amazon Kinesis 스트림, Amazon SNS 등과 연계 가능)

CloudWatch Event는 AWS 환경에서 주요 신경계와 같은 것이라고 생각하시면 됩니다. 각 자원 내 세부적인 환경 변화를 감지하도록 연결되어 있습니다. 특정 규칙에 따라 기능을 수행하여, 상태 확인 후 바로 조치를 취할 수 있도록 메시지를 전달합니다.

현재 대표적인 AWS 서비스에 대응하고 있으며, 추가적으로 나머지 서비스도 지원할 예정입니다.

CloudWatch Events 처리 방식
CloudWatch Events를 이용할 때, 이벤트(Events), 규칙(Rules), 대상(Targets) 등 세 가지 구성 요소에 대해 우선 이해하고 있어야합니다.

이벤트(Events): JSON 형식의 Blob으로 로 반환되는 blob으로 네 가지 방법으로 생성됩니다. 우선 첫 번째로 AWS 환경에서 상태가 변경되었을 때 생성됩니다. 예를 들어 EC2의 상태가 Pending에서 Running으로 변경되거나 AutoScaling 의해 EC2 인스턴스가 새로 만들어졌을 때와 같은 상황입니다. 두 번째는 API를 통해 호출되는 이벤트는 CloudTrial을 통해 CloudWatch Event에 전달됩니다. 세 번째로 여러분이 직접 개발한 코드를 통해 응용 프로그램 수준의 이벤트를 만들어 CloudWatch Event에 전달할 수 있습니다. 마지막으로 스케줄 기반에 일정 간격으로 Cron 형태 이벤트 작성도 가능합니다.

규칙(Rules): 생성된 이벤트와 규칙이 일치하는 경우 대상(Targets)에 대해 처리를 실행합니다. 규칙 적용에 특별히 정해진 순서가 있지 않습니다. 이벤트에 일치하는 모든 규칙이 적용됩니다 (이를 통해 독립적인 이벤트 처리가 가능합니다).

대상(Targets): 규칙을 통해 설정된 이벤트 처리 방식이 원하는 대상에 전달됩니다. 네 가지 타겟 타입을 준비하고 있습니다. 빌트인(Built-in), Lambda 함수, Kinesis 스트림과 SNS 토픽, SQS 큐 우선 해당되지만, 다른 방식 역시 계획 중입니다. (2016년 6월 현재 서울 리전에서는 Lambda 함수는 지원하지 않습니다.) 하나의 규칙에서 여러 대상을 설정할 수 있습니다. 모든 이벤트는 JSON 형식으로 대상에 전달되며 대상에 전달하거나 및 JSON으로 가공 할 수 있습니다. 또한, 이벤트를 그대로 전달할 수 있으며, 특정 Key (Value 값도 함께)를 전달하거나 문자열을 전달할 수 있습니다.

CloudWatch Events 직접 해보기
CloudWatch Events Console에 가서, Create rule을 누르고 이벤트 소스를 선택합니다. (여러 가지 선택 메뉴가 있습니다.)

일부 AWS 서비스는 이벤트를 직접 만들어 상단 메뉴에 표시됩니다. 그 외에는 CloudTrail 로그를 기반으로 작성되는 것도 있기 때문에 서비스는 CoudTrail를 활성화해야합니다. 이제 “EC2 Instances”를 선택하고 관련 규칙을 만듭니다.

위의 규칙은 새로 생성 된 인스턴스가 “running” 되는 것을 감시합니다. 현재 리전 전체 인스턴스에 적용 할 수 있으며, 특정 인스턴스에 적용 할 수 있습니다.

이제 무엇을 할 것인가를 설정합니다. 이번에는 대상을 선택합니다. 여기서는 SNS 토픽을 선택합니다.

규칙에 대해 간단하게 설명을 적고 Create rule을 선택합니다.

이제 설정이 완료되었습니다.

이제 테스트로 EC2 인스턴스 하나를 새로 시작해 보겠습니다. 인스턴스가 시작된 지 바로 SNS 토픽을 통해 메일을 통해 아래와 같이 알림을 받을 수 있습니다.

이벤트 내용에는 새로 시작된 인스턴스 정보 등 다양한 정보를 포함하고 있으며, 이를 통해  DescribeInstances API 호출로 더 다양한 정보를 얻어 올 수 있습니다.

규칙 실행 주기 설정
앞서 설명드린 대로, 각 이벤트는 Cron 형식으로도 설정할 수 있습니다.

API 접근하기
다른 AWS 서비스 처럼 CloudWatch Events 역시 API를 통해 제공합니다.

  • PutRule : 규칙 만들기
  • PutTargets 및  RemoveTargets : 대상 만들기 및 제거하기
  • ListRules, ListTargetsByRuleDescribeRule : 기존 규칙 찾기
  • PutEvents :  CloudWatch Events 만들기. 본 기능을 통해 CLI 기반으로 다양한 애플리케이션을 만들 수 있습니다.

이벤트 통계 보기
CloudWatch Events 역시 CloudWatch에 다양한 통계 수치를 제공합니다. AWS/Events 네임 스페이스를 살펴 보시면, 규칙에 따른 다양한 정보를 얻을 수 있습니다.

아래 수치를 보실 수 있습니다.

  • Invocations – 대상이 실행된 횟수
  • FailedInvocations – 대상에 대한 실행 실패 횟수
  • MatchedEvents – 규칙에 해당되는 실행 횟수
  • TriggeredRules – 규칙이 실행된 횟수

각 규칙에 대한 수치는 아래와 같습니다.

  • Invocations – 대상에 대해 규칙이 실행된 횟수
  • TriggeredRules – 규칙이 직접 실행된 횟수

다른 AWS 서비스 처럼  CloudWatch Events 서비스 역시 기본 기능으로 시작하지만,   AWS CloudFormation 지원 및 리전 확대 등 다양한 기능을 제공할 예정입니다.  더 자세한 것은 기술 문서를 참고하시기 바랍니다.