반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

DevOps Tasks

Event Driven Architecture with AWS Infra Monitoring 본문

AWS

Event Driven Architecture with AWS Infra Monitoring

데밥스 2024. 8. 4. 19:29
728x90
반응형

EDA (Event Driven Architecture) AWS Infra Monitoring

 


관리하는 콘솔이 증가함에 따라 AWS EventBridge를 활용하여 각 콘솔의 인프라 변경 사항을 중앙 DevOps 콘솔로 라우팅 하는 EDA 구현합니다.

구체적으로, 각 콘솔에서 발생하는 인프라 변경 이벤트를 AWS EventBridge를 통해 중앙 이벤트 버스로 전송합니다.

이 이벤트는 Lambda 함수를 트리거하여 처리되며, 동시에 Slack 으로 알람을 전송합니다.

 

AWS EventBridge Lambda를 활용한 EDA는 비용 절감과 운영 효율성을 극대화하여 DevOps 환경을 효과적으로 개선할 수 있습니다.

이 아키텍처는 여러 가지 이점을 제공합니다.

 

AS IS

 

분산된 Lambda 함수 및 리소스 관리

각 콘솔에서 별도로 Lambda 함수와 AWS SNS를 관리하여 유지보수성이 낮았고, 인프라의 분산으로 인해 통합과 관리가 복잡했습니다.

코드의 복잡성과 통합의 어려움

소스 코드가 여러 콘솔에 분산되어 있었으며, 코드가 모듈화 되지 않고 한 파일에 모든 코드가 포함되어 있어 확장성이 제한되었습니다.

비효율적인 모니터링

각 콘솔의 인프라 변경 사항을 모니터링하기 위해 상당한 비용이 소모되었습니다.

버전 관리 미흡

Lambda 함수의 버전 관리가 체계적이지 않아, 배포와 업데이트에 어려움이 있었습니다.

 

TO BE

 

중앙집중식 인프라 관리

AWS EventBridge와 Lambda를 결합하여 중앙 DevOps 콘솔에서 모든 콘솔의 인프라 변경 사항을 실시간으로 관리할 수 있게 되었습니다.

이제 하나의 Lambda 함수와 하나의 AWS SNS로 모든 인프라를 효율적으로 관리할 수 있습니다.

Lambda 함수 최적화와 체계적인 버전 관리

EventBridge Rule을 통해 Lambda 함수 호출 빈도를 최적화하고 Lambda Alias를 통해 개발과 운영 간의 명확한 구분을 지원하고, 이를 통해 코드 배포와 업데이트가 효율적이고 체계적으로 이루어집니다.

Zero Cost Monitoring

Python 으로 리팩토링하고 기능을 모듈화 하여 코드의 재사용성과 유지보수성을 높였습니다.

이로 인해 모든 인프라를 비용 없이 신속하게 모니터링할 수 있으며, 추가 기능을 쉽게 확장할 수 있는 확장성도 제공합니다.

AWS 인프라 리소스를 최대한 활용하여 모니터링 비용을 0원으로 줄일 수 있었습니다.


AWS Events

{
  "detail-type" : [
    "EC2 Instance Launch Unsuccessful",
    "EC2 Instance Terminate Unsuccessful"
  ],
  "source" : [
    "aws.autoscaling"
  ]
}

Auto Scaling Instance Launch Unsuccessful

  • Auto Scaling에서 인스턴스 시작이 실패한 경우에 대한 이벤트 알림입니다.

 

{
  "detail-type" : [
    "CodeDeploy Deployment State-change Notification"
  ],
  "detail" : {
    "state" : [
      "FAILURE"
    ]
  },
  "source" : [
    "aws.codedeploy"
  ]
}

CodeDeploy Deployment State-change Notification

  • CodeDeploy에서 배포 상태 변경 알림을 통해 배포 과정을 모니터링합니다.

 

{
  "source": ["aws.ecs"],
  "detail-type": ["ECS Task State Change"],
  "detail": {
    "clusterArn": ["arn:aws:ecs:{REGION}:*"]
  }
}

ECS Task State Change

  • ECS (Elastic Container Service)에서 Task의 상태 변경 이벤트를 감지하고 처리합니다.

 

{
  "detail-type" : [
    "RDS DB Instance Event",
    "RDS Blue Green Deployment Event",
    "RDS DB Security Group Event",
    "RDS DB Parameter Group Event"
  ],
  "source" : [
    "aws.rds"
  ]
}

RDS DB Instance Event

  • RDS (Relational Database Service)에서 발생하는 DB 인스턴스 관련 이벤트를 모니터링합니다.

RDS Blue Green Deployment Event

  • RDS의 Blue Green 배포 이벤트에 대한 알림을 처리합니다.

 


Lambda Overview

aws-noti/
├── src/
│   ├── event_processors
│   │  ├── *_event_processor.py
│   ├── handler
│   │  ├── sns_event_handler.py
│   ├── parsers
│   │  ├── *_event_processor.py
│   ├── slack_block_kits
│   │  ├── *_block_kit.py
│   ├── utils
│   │  ├── account_converter.py
│   │  ├── logger.py
│   │  ├── slack_utils.py
│   │  ├── time_converter.py
├── lambda_function.py
├── requirements.txt

event_processors

AWS 리소스에 따른 이벤트 처리 로직을 정의하는 모듈들이 포함되어 있습니다.

handler

AWS EventBridge에서 수신한 이벤트를 분류하고 처리하는 핸들러 코드가 위치합니다.

parsers

수신한 이벤트에서 필요한 데이터를 추출하고 변환하는 파서 모듈들이 포함되어 있습니다.

slack_block_kits

Slack 메시지의 Block Kit 형식에 맞게 구성된 모듈들이 위치합니다.

utils

프로젝트 전반에서 사용되는 공통 함수들이 정의된 유틸리티 모듈들이 포함되어 있습니다. 예를 들어, AWS 계정 변환, 로깅, Slack 메시지 전송 등을 관리합니다.

lambda_function.py

AWS Lambda 함수의 진입점 역할을 하는 메인 파일입니다. 이 파일에서 Lambda 함수의 핵심 로직이 구현됩니다.

requirements.txt

Python 라이브러리 및 의존성들이 명시된 파일입니다. pip install -r requirements.txt 명령을 사용하여 필요한 라이브러리를 설치할 수 있습니다.

deploy.sh

사용자가 선택한 환경(develop 또는 stable)에 따라 Docker 이미지를 빌드하고 푸시한 후, Lambda 함수를 업데이트하고 별칭으로 버전을 관리합니다.


Cost

 

AWS EventBridge

Billing 상 호출 수

결제 월 수량 비용
5월 5,673 64K-Chunks USD 0.01
4월 3,699 64K-Chunks USD 0.00
3월 4,980 64K-Chunks USD 0.00
2월 4,211 64K-Chunks USD 0.00

 

Event Bridge SuccessfulInvocationAttempts

6월 총 호출 수 155,000

  • AWS 서비스에서 게시하는 모든 상태 변경 이벤트는 기본적으로 무료입니다.
  • CloudWatch Events PutEvents
    • $1.00 per million EventBridge custom events received in Asia Pacific (Seoul)

 

AWS SNS

결제 월 수량 비용
5월 53,148 Requests USD 0.00
4월 54,971 Requests USD 0.00
3월 63,835 Requests USD 0.00
2월 37,090 Requests USD 0.00
  • 매월 첫 1백만 개 Amazon SNS 요청은 무료이며, 이후 요청 1백만 개당 USD 0.50 요금이 부과됩니다.

 

AWS Lambda

 

1일 합계 Invocations 7일 합계 Invocations  1일 합계 Duration  7일 합계 Duration
4,650 30,000 81.3 sec 2,060 sec

 

ARM 요금

  • 처음 75억GB-초/월 GB-초당 0.0000133334 USD
  • 요청 1백만 건당 0.20 USD

 

Apply Content filtering in Amazon EventBridge event patterns

 

# ECS Rule
{
  "detail-type" : [
    "ECS Task State Change"
  ],
  "detail" : {
    "group" : [
      {
        "wildcard" : "*kr-pr*"
      }
    ],
    "desiredStatus" : [
      "STOPPED"
    ]
  },
  "source" : [
    "aws.ecs"
  ]
}

# RDS Rule
{
  "detail-type" : [
    "RDS DB Instance Event",
    "RDS Blue Green Deployment Event",
    "RDS DB Security Group Event",
    "RDS DB Parameter Group Event"
  ],
  "detail" : {
    "EventID" : {
      "anything-but" : [
        "RDS-EVENT-0001",
        "RDS-EVENT-0002"
      ]
    },
    "SourceIdentifier" : [
      {
        "prefix" : "kr-pr"
      }
    ]
  },
  "source" : [
    "aws.rds"
  ]
}

Filtering content in event patterns를 통해 Lambda Invocations 10배 감소

 

AWS Service Catalog를 통한 Tag 기반 비용 모니터링

728x90
반응형