grep

DevOps

비용 최적화 & AWS Compute Optimizer를 이용한 EC2 Instance Right-sizing

백인출Cash(캐쉬) / SRE팀여기어때

2024년 1월 2일

원문에서 보기 ↗

안녕하세요. 여기어때컴퍼니 SRE팀 캐쉬입니다.

AWS re:Invent에서 들은 세션 중에서 앞서 소개드린 Keynote에 이어 비용 최적화 및 Rightsizing 관련하여 글을 작성해 보려고 합니다.

세션 제목 : Cost-optimization strategies for your non-production workloads

서론

이 교육에서는 AWS 솔루션 아키텍트로 6, 8년 차 일하고 있는 두 분이 함께 강의를 진행했습니다. 교육 내용을 요약해 보면,

AWS는 비즈니스 요구 사항에 따라 다양한 환경을 지원합니다. 상용 환경은 실제 고객을 대상으로 하는 운영 환경을 의미하며, Non-Production 환경은 상용 환경을 제외한 모든 환경을 의미합니다.

Non-Production 환경은 무엇이 있을까요?

개발, 테스트, QA, 교육, 마이그레이션 등 다양한 목적으로 사용되는 환경이 포함됩니다. 또한, Non-production 환경의 비용을 최적화하는 방법을 설명했습니다. Non-Production 환경은 상용 환경에 비해 사용량이 적기 때문에 비용 절감의 여지가 많습니다. AWS에서는 비용을 최적화하기 위한 다양한 전략을 제공합니다.

비용 최적화의 마지막 상태

본문

  1. 인스턴스 태그를 활용한 가독성 향상

Non-Production 환경의 인스턴스를 태그로 구분하면 비용 관리 및 모니터링을 쉽게 할 수 있습니다. 예를 들어, 환경, 보안, 시간, 사용 목적 등의 태그를 사용하여 인스턴스를 분류할 수 있습니다. 태그를 사용하면 인스턴스의 사용량을 추적하고, 사용량이 적은 인스턴스를 식별하여 비용을 절감할 수 있습니다.

또한 태깅은 운동과 같습니다. 모든 사람들이 운동을 해야 한다는 것에 동의합니다. 그러나 일관성을 유지하는 것은 어렵습니다. 인스턴스들마다 전부 태그(Technical tags, Business tags, Tags for automation, Security tags, Time tags 등)를 작성하여 가독성을 높일 수 있고 일관성을 유지해야 합니다. 즉, 태깅을 하는 것은 책임감의 산물입니다*.*

  1. 스토리지 및 스냅샷 삭제

Non-Production 환경의 인스턴스를 삭제해도 스토리지 및 스냅샷이 남아있으면 비용이 발생할 수 있습니다. 따라서 인스턴스를 삭제하기 전에 스토리지 및 스냅샷을 삭제하여 비용을 절감해야 합니다.

  1. 계정 분리

Non-Production 환경의 인스턴스를 별도의 계정으로 분리하면 비용을 더 효율적으로 관리할 수 있습니다. 예를 들어, 상용 환경의 인스턴스와 Non-Production 환경의 인스턴스를 별도의 계정으로 분리하면 각 계정의 사용량을 개별적으로 추적하고 관리할 수 있습니다.

  1. 스팟 인스턴스 사용

스팟 인스턴스는 온디맨드 인스턴스보다 저렴한 가격으로 사용할 수 있는 유연한 인스턴스입니다. Non-Production 환경에서는 스팟 인스턴스를 사용하여 비용을 절감할 수 있습니다. 단, 스팟 인스턴스는 가용성 문제가 발생할 수 있으므로, 사용 목적에 따라 적절하게 사용해야 합니다.

  1. Rightsizing

Rightsizing은 인스턴스의 크기와 성능을 실제 사용량에 맞게 조정하는 것을 의미합니다. Non-Production 환경의 인스턴스를 Rightsizing 하면 비용을 절감할 수 있습니다.

Rightsizing을 위해서는 다음과 같은 단계를 수행해야 합니다.

  1. 인스턴스의 사용량을 모니터링합니다.
  2. 사용량에 맞는 인스턴스 유형 및 크기를 결정합니다.
  3. 인스턴스를 업그레이드하거나 다운그레이드 합니다.

문득,

교육 중에 떠올랐던 아이디어에 따라, EC2 인스턴스의 태그를 활용하여 Production 및 Non-Production 환경을 손쉽게 구분하고 Rightsizing을 효과적으로 수행할 수 있을 것이라는 생각이 들었습니다. 그래서 이 아이디어를 기반으로 개발 작업에 착수하게 되었습니다.

먼저 AWS의 기능 중 AWS Cost Optimizer를 사용할 것 인데, 간략하게 Cost Optimizer를 설명을 하면 AWS 리소스의 사용량과 비용을 분석하여 비용 절감 기회를 식별하고 권장 사항을 제공하는 서비스입니다. Rightsizing을 위한 도구로도 사용할 수 있습니다.

AWS Cost Optimizer는 다음과 같은 방법으로 Rightsizing을 지원합니다.

AWS 리소스 유형별 권장 사항: AWS Cost Optimizer는 인스턴스 유형 및 크기를 변경하여 비용을 절감할 수 있는 권장 사항을 제공합니다.

AWS Cost Optimizer는 사용량 데이터를 분석하여 각 인스턴스의 최적 크기를 결정합니다. 그런 다음, AWS Cost Optimizer는 인스턴스 유형 및 크기를 변경하여 비용을 절감할 수 있는 권장 사항(EC2 인스턴스 , Auto Scaling, Lambda, Fargate의 ECS 서비스)을 제공합니다.

제가 AWS Cost Optimizer를 사용하여 EC2 Instance Rightsizing을 수행할 때 사용하는 기능과 그 이용 방법은 아래와 같습니다.

기능:

컴포넌트:

  1. AWS Client Libraries: boto3 라이브러리를 사용하여 AWS 서비스에 연결합니다. EC2 인스턴스 상태 및 성능 데이터를 가져옵니다. Compute Optimizer 서비스를 사용하여 권장 사항을 얻습니다.
  2. PDF Report Generator: 권장 사항을 HTML 형식으로 변환합니다. PDFkit 라이브러리를 사용하여 HTML을 PDF로 변환합니다.
  3. Slack Integration: Slack Bolt 라이브러리를 사용하여 Slack 앱과 연결합니다. Slack 메시지를 보내 권장 사항을 전달합니다. 파일 API를 사용하여 PDF 보고서를 Slack에 업로드합니다.
  4. Command Handler: Slack slash 명령 “/rightsized”를 처리합니다. 권장 사항을 얻고 PDF 보고서를 생성합니다. Slack에 메시지와 PDF 보고서를 전송합니다.

데이터 흐름:

  1. 사용자가 Slack 명령 “/rightsized”를 실행합니다.
  2. Slack 앱은 AWS Client Libraries를 사용하여 EC2 인스턴스 데이터와 Compute Optimizer 권장 사항을 가져옵니다.
  3. PDF Report Generator는 권장 사항을 HTML로 변환하고 PDFkit를 사용하여 PDF를 생성합니다.
  4. Slack Integration은 Slack 메시지를 보내고 파일 API를 사용하여 Slack에 PDF 보고서를 업로드합니다.

아키텍처 다이어그램

이 다이어그램은 Slack 앱이 EC2 인스턴스 권장 사항을 생성하고 Slack에 메시지를 보내는 간단한 흐름을 나타냅니다

즉, Slack Commands를 사용하고 AWS Compute Optimizer를 이용하여 CPU와 Memory가 과다 사용 중인 것을 추출하고 EC2 인스턴스의 Team Tags를 이용하여 Team 별로 Right-sizing 추천을 받은 PDF 파일을 만들고 Slack에 최종 전송합니다.

이 아키텍처를 사용하면 다음과 같은 이점을 얻을 수 있습니다.

수행 절차 및 결과

  1. Slack에서 Slack slash “/rightsized” 명령어 입력

  1. Slack 채널에 Team 별로 비용 최적화 추천이 완료된 PDF 파일을 자동 전송

  1. PDF 보고서 파일 상세 내용 및 추천 결과

결론

AWS Cost Optimizer를 사용하여 EC2 인스턴스를 Rightsizing 하는 것은 비용을 절감하고 성능을 향상시키는 데 효과적인 방법이라는 것을 알게 되었습니다. 이러한 방법을 통해 더 효율적이고 효과적인 EC2 인스턴스 Rightsizing을 수행할 수 있을 것으로 기대됩니다.

특히 Non-Production 환경에서는 자동으로 업무 외 시간에 인스턴스 타입을 조정하고 실행하는 기능을 추가로 구현하면, 비용 최적화 뿐만 아니라 팀 간의 원활한 협력과 업무 효율성 향상에 기여할 것으로 기대됩니다. 또한, 비용 최적화에 관한 정보와 경험을 나눔으로써 향후 프로젝트에서도 더 나은 결정을 내릴 수 있을 것입니다. 이 방법을 통해 EC2 인스턴스의 비용을 절감하고 성능을 향상시키는 데 도움이 되길 기대하며, 비용 최적화에 대한 통찰과 경험은 앞으로의 업무에 큰 지원이 될 것으로 기대하고 있습니다. 글을 끝까지 읽어주셔서 감사합니다.

참고 : AWS Compute Optimizer, 서울 리전 출시 | Amazon Web Services