BLOG

AWS Cloud Formation 매크로를 통한 Amazon CloudWatch 경보 자동화
작성일: 2019년 8월 23일

여러분은 혹시 AWS CloudFormation에서 작업 자동화가 가능한지 궁금하셨던 적이 없으신가요? 오늘 테크블로그에선 오래된 골칫거리였던 CloudFormation 템플릿 내에서 각 경보를 작성하는 방법에 대한 대안을 제시해 드리겠습니다. 그것은 바로 CloudFormation 매크로를 통해 템플릿을 가져와 경보를 추가하는 방식인데요. 이 매크로를 사용하면 템플릿을 작성할 때 시간을 절약 할 수 있을 뿐만 아니라 중요한 리소스가 적절히 모니터링 되도록 설정할 수 있습니다.

 

해당 매크로의 코드를 사용하여 고유 경보 및 리소스 유형을 수정하고 추가할 수 있습니다. 본 예제에는 포함되어 있진 않지만 사용자 지정 지표를 기반으로 하는 경보 또한 지원 가능 합니다.

 

오늘 블로그 게시글에선 다음과 같은 내용을 다룰 예정입니다.

 

  • AWS CloudFormation 매크로 기능 소개
  • 매크로 작동 방식
  • 매크로 배포
  • CloudFormation 템플릿에서의 매크로 사용

 

 

전제 조건

 

  • CloudFormation 스택의 생성 권한이 있는 액세스 키 및 비밀 키: 키는 명령 행을 통해 템플릿과 함께 로컬 아티팩트를 배치하는 데 필요합니다. 액세스 키와 비밀 API키에 대한 자세한 내용은 AWS 설명서를 참고해 주십시오.
  • AWS Command-Line Interface(AWS CLI). AWS CLI 설정에 대한 자세한 내용은 AWS CLI의 설명서를 참고해 주십시오.

 

 

CloudFormation 매크로 기능

 

매크로를 사용하면, 변경 세트가 생성되기 전에 템플릿에서 사용자 정의 처리가 가능합니다. 서버리스 템플릿을 배포한 적이 있다면, 이는 매크로를 사용하여 호환되는 CloudFormation 템플릿으로 변환한 것입니다. 매크로는 두 가지 주요 구성 요소로 구성됩니다.

 

  • CloudFormation 매크로 리소스 유형
  • 로직을 처리하는 해당 Lambda 함수

 

매크로는 사용될 각 AWS 리전에 배치됩니다. 템플릿 내에서 매크로를 사용할 경우, 매크로를 템플릿에 나열된 순서대로 배치하도록 유의해 주십시오. 매크로를 사용하여 템플릿에서 사용자 정의 처리를 수행하는 방법에 대해 알고 싶으시다면 AWS CloudFormation 설명서를 참고해 주시기 바랍니다.

 

 

매크로의 작동 방식

 

다음은 이 프로세스를 보여주는 다이어그램 입니다.

 

CloudFormation이 템플릿 내에서 변환 매크로 참조를 감지하면, 매크로가 호출되는 것을 볼 수 있습니다. 거기에서 템플릿은 매크로의 논리를 처리하는 Lambda 함수로 전송됩니다.

 

이 경우 Lambda 함수는 JSON의 전체 템플릿 인 템플릿 조각을 가져 와서 유형별로 각 리소스를 필터링합니다. 해당 유형이 지원되는 경우 적용 가능한 일련의 경보가 추가됩니다. Lambda 함수는 새 템플릿을 AWS CloudFormation으로 다시 전송하여 스택을 생성합니다.

 

아래 표에는 Amazon Elastic Compute Cloud (Amazon EC2), 로드 밸런서, Lambda 및 NAT (Network Address Translation) 게이트웨이용 매크로에 미리 작성된 알람이 요약되어 있습니다. 필요에 따라 매크로는 조정하여 사용할 수 있습니다.

 

서비스 알람 설명
Amazon EC2 CPUUtilization CPU사용률
Amazon EC2 StatusCheckFailed_Instance 인스턴스 상태 점검
Application Load Balancer HTTPCode_ELB_5XX_Count 로드 밸런서에서 발생한 HTTP 5XX서버 에러 코드의 수
Application Load Balancer RejectedConnectionCount 로드 밸런서가 최대 접속 수에 도달하여 접속이 거부 된 연결
Network Load

Balancer

UnHealthyHostCount 비 정상적이라고 판단된 타겟의 수
Network Load

Balancer

HealthyHostCount 정상이라고 판단 된 타겟의 수
Lambda Errors 함수 오류로 인해 실패한 호출의 수 (응답 코드 4XX)
Lambda Invocations 이벤트 또는 호출 API의 호출에 대한 응답으로 함수가 호출 된 횟수
NAT gateway ErrorPortAllocatio NAT게이트웨이가 소스 포트를 할당 할 수 없는 횟수
NAT gateway ActiveConnectionCount NAT게이트웨이를 통한 동시 활성 TCP연결의 수

 

매크로 배포

GitHub 저장소에서 매크로를 보고 복제 할 수 있습니다.

 

AWS CLI를 사용하여 적절한 프로파일 / API 키를 설정해 주십시오. 터미널을 열고, 저장소의 디렉토리 루트에서 다음과 같이 입력하여,  $BUCKET과 $STACKNAME를 자신의 값으로 바꾸어 줍니다.

 

aws cloudformation package –template-file MacroTemplate.yaml –s3-bucket $BUCKET  –output-template-file packaged-template.yaml

 

aws cloudformation deploy –template-file packaged-template.yaml –capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND –stack-name $STACKNAME

 

패키지 및 배치 명령에 대한 자세한 내용은 AWS CLI 설명서를 참고해 주시기 바랍니다..

 

 

매크로 사용

 

매크로를 사용하려면 템플릿 맨 위에 다음 줄을 추가하십시오.

 

Transform: AlarmMacro

 

서버리스 템플릿을 사용하는 경우 먼저 서버리스 매크로를 호출해야 합니다.

 

Transform: [“AWS::Serverless-2016-10-31”, “AlarmMacro”]

 

 

결론

 

오늘은 특정 매크로가 어떻게 CloudFormation의 개발 속도를 높일 수 있는가에 대한 예를 보여드리며, CloudFormation 매크로의 이점에 대해 설명해 드렸습니다. 현재 이 글을 읽고 계시는 모든 분들이 많은 도움을 얻어 가시길 바랍니다.

 

 

 

 

원문 URL:  https://aws.amazon.com/ko/blogs/infrastructure-and-automation/automating-amazon-cloudwatch-alarms-with-an-aws-cloudformation-macro/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.