DynamoDB의 미사용 리소스 식별 - Amazon DynamoDB

DynamoDB의 미사용 리소스 식별

이 섹션에서는 미사용 리소스를 정기적으로 평가하는 방법을 간략히 살펴봅니다. 애플리케이션 요구 사항이 발전함에 따라 미사용 리소스가 없고 이로 인해 불필요한 Amazon DynamoDB 비용이 발생하지 않도록 해야 합니다. 아래 설명된 절차는 미사용 리소스를 식별하는 Amazon CloudWatch 지표를 사용하여 해당 리소스를 식별하고 이에 대한 조치를 취하여 비용을 절감하는 데 도움이 됩니다.

DynamoDB의 원시 데이터를 수집하여 읽기 가능하며 실시간에 가까운 지표로 처리하는 CloudWatch를 통해 DynamoDB를 모니터링할 수 있습니다. 이러한 통계는 일정 기간 동안 유지되므로 기록 정보에 액세스하여 사용률을 더 잘 파악할 수 있습니다. 기본적으로 DynamoDB 지표 데이터는 CloudWatch에 자동으로 전송됩니다. 자세한 내용은 Amazon CloudWatch 사용 설명서Amazon CloudWatch란 무엇인가요?지표 보존 기간을 참조하세요.

미사용 리소스를 식별하는 방법

미사용 테이블 또는 인덱스를 식별하기 위해 30일 동안 다음 CloudWatch 지표를 검토하여 테이블에 활성 읽기나 쓰기가 있는지 또는 글로벌 보조 인덱스(GSI)에 대한 읽기가 있는지 알아보겠습니다.

ConsumedReadCapacityUnits

일정 기간 동안 사용된 읽기 용량 단위의 수로, 이를 통해 사용된 용량이 얼마나 사용되었는지 추적할 수 있습니다. 또한 테이블과 테이블의 모든 글로벌 보조 인덱스 또는 특정 글로벌 보조 인덱스에 대해 소비된 총 읽기 용량을 가져올 수 있습니다.

ConsumedWriteCapacityUnits

일정 기간 동안 사용된 쓰기 용량 단위의 수로, 이를 통해 사용된 용량을 얼마나 사용했는지 추적할 수 있습니다. 또한 테이블과 테이블의 모든 글로벌 보조 인덱스 또는 특정 글로벌 보조 인덱스에 대해 소비된 총 쓰기 용량을 가져올 수 있습니다.

미사용 테이블 리소스 식별

Amazon CloudWatch는 미사용 리소스를 식별하는 데 사용할 DynamoDB 테이블 지표를 제공하는 모니터링 및 관찰 가능 서비스입니다. CloudWatch 지표는 AWS Management Console과 AWS Command Line Interface를 통해 확인할 수 있습니다

AWS Command Line Interface

AWS Command Line Interface를 통해 테이블 지표를 보려면 다음 명령을 사용할 수 있습니다.

  1. 먼저 테이블의 읽기를 평가합니다.

    aws cloudwatch get-metric-statistics --metric-name ConsumedReadCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name>

    테이블을 미사용 테이블로 잘못 식별하지 않으려면 더 오랜 기간 동안 지표를 평가하세요. 적절한 시작 시간 및 종료 시간 범위(예: 30일)와 적절한 기간(예: 86400)을 선택합니다.

    반환된 데이터에서 0보다 큰 모든 합계는 해당 기간 동안 수신된 읽기 트래픽을 평가 중인 테이블을 나타냅니다.

    다음 결과에는 평가 기간에 읽기 트래픽을 수신한 테이블이 표시됩니다.

    { "Timestamp": "2022-08-25T19:40:00Z", "Sum": 36023355.0, "Unit": "Count" }, { "Timestamp": "2022-08-12T19:40:00Z", "Sum": 38025777.5, "Unit": "Count" },

    다음 결과에는 평가 기간에 읽기 트래픽을 수신하지 않은 테이블이 표시됩니다.

    { "Timestamp": "2022-08-01T19:50:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-20T19:50:00Z", "Sum": 0.0, "Unit": "Count" },
  2. 다음으로 테이블의 쓰기를 평가하세요.

    aws cloudwatch get-metric-statistics --metric-name ConsumedWriteCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name>

    테이블을 미사용 테이블로 잘못 식별하지 않으려면 더 오랜 기간 동안 지표를 평가하는 것이 좋습니다. 적절한 시작 시간 및 종료 시간 범위(예: 30 days(30일))와 적절한 기간(예: 86400)을 선택합니다.

    반환된 데이터에서 0보다 큰 모든 합계는 해당 기간 동안 수신된 읽기 트래픽을 평가 중인 테이블을 나타냅니다.

    다음 결과에는 평가 기간에 쓰기 트래픽을 수신한 테이블이 표시됩니다.

    { "Timestamp": "2022-08-19T20:15:00Z", "Sum": 41014457.0, "Unit": "Count" }, { "Timestamp": "2022-08-18T20:15:00Z", "Sum": 40048531.0, "Unit": "Count" },

    다음 결과에는 평가 기간에 쓰기 트래픽을 수신하지 않은 테이블이 표시됩니다.

    { "Timestamp": "2022-07-31T20:15:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-19T20:15:00Z", "Sum": 0.0, "Unit": "Count" },
AWS Management Console

다음 단계에서는 AWS Management Console을 통해 리소스 사용률을 평가할 수 있습니다.

  1. AWS에 로그인하고 https://console.aws.amazon.com/cloudwatch/의 CloudWatch 서비스 페이지로 이동합니다. 필요한 경우 콘솔의 오른쪽 상단에서 해당 AWS 리전을 선택합니다.

  2. 왼쪽 탐색 메뉴에서 Metrics(지표)를 선택한 다음 All metrics(모든 지표)를 선택합니다.

  3. 위 작업을 수행하면 두 개의 패널이 있는 대시보드가 열립니다. 상단 패널에서는 현재 그래프로 표시된 지표를 확인할 수 있습니다. 하단에서는 그래프로 나타낼 수 있는 지표를 선택할 수 있습니다. 하단 패널에서 DynamoDB를 선택합니다.

  4. DynamoDB 지표 선택 패널에서 Table Metrics(테이블 지표) 범주를 선택하여 현재 리전의 테이블에 해당하는 지표를 표시합니다.

  5. 메뉴를 아래로 스크롤하여 테이블 이름을 식별한 후 테이블에 해당하는 ConsumedReadCapacityUnitsConsumedWriteCapacityUnits 지표를 선택합니다.

  6. Graphed metrics (2)(그래프로 표시된 지표 (2)) 탭을 선택하고 Statistic(통계) 열을 Sum(합계)으로 조정합니다.

    그래프로 표시된 지표 탭. 콘솔에서 리소스 사용량 데이터를 보기 위해 통계가 합계로 설정되었습니다.
  7. 테이블을 미사용 테이블로 잘못 식별하지 않으려면 더 오랜 기간 동안 지표를 평가하는 것이 좋습니다. 그래프 패널 상단에서 테이블을 평가할 적절한 기간(예: 1개월)을 선택합니다. Custom(사용자 지정)을 선택하고 드롭다운에서 1 Months(1개월)를 선택한 다음 Apply(적용)를 선택합니다.

    CloudWatch 콘솔. 지표를 평가하기 위해 1개월의 사용자 지정 기간이 선택되었습니다.
  8. 테이블의 그래프로 표시된 지표를 평가하여 사용 중인지 확인하세요. 지표가 0을 초과하면 평가된 기간 동안 테이블이 사용되었음을 나타냅니다. 읽기와 쓰기 모두에 대해 0에 있는 평면 그래프는 미사용 테이블을 나타냅니다.

    다음은 읽기 트래픽이 포함된 테이블이 표시된 이미지입니다.

    DynamoDB 테이블의 ConsumedReadCapacityUnits를 보여주는 그래프로, 테이블이 사용 중임을 나타냅니다.

    다음은 읽기 트래픽이 포함되지 않은 테이블이 표시된 이미지입니다.

    DynamoDB 테이블에 대한 읽기 활동이 없는 것으로 표시된 그래프는 테이블이 사용 중이 아님을 나타냅니다.

미사용 테이블 리소스 정리

미사용 테이블 리소스를 식별한 경우 다음과 같은 방법으로 지속적인 비용을 줄일 수 있습니다.

참고

미사용 테이블을 식별했지만 나중에 액세스해야 할 경우를 대비하여 계속 사용할 수 있으려면 온디맨드 모드로 전환하는 것이 좋습니다. 그렇지 않으면 테이블을 완전히 백업하고 삭제할 수도 있습니다.

용량 모드

DynamoDB는 DynamoDB 테이블의 데이터 읽기, 쓰기 및 저장에 대한 요금을 청구합니다.

DynamoDB에는 테이블에서 읽기 및 쓰기 처리를 위한 특정 결제를 위한 두 가지 용량 모드가 있습니다. 읽기/쓰기 용량 모드는 읽기 및 쓰기 처리량에 대한 청구 방법과 용량 관리 방법을 제어합니다.

온디맨드 모드 테이블의 경우 애플리케이션에서 수행할 것으로 예상되는 읽기 및 쓰기 처리량을 지정할 필요가 없습니다. DynamoDB에서는 읽기 요청 단위 및 쓰기 요청 단위의 측면에서 애플리케이션이 테이블에서 수행하는 읽기 및 쓰기에 대해 요금이 부과됩니다. 테이블/인덱스에 활동이 없는 경우 처리량(throughput)에 대한 비용은 지불하지 않지만 스토리지 요금은 계속 부과됩니다.

테이블 클래스

DynamoDB는 비용을 최적화할 수 있도록 설계된 두 가지 테이블 클래스도 제공합니다. DynamoDB Standard 테이블 클래스가 기본값이며 대다수의 워크로드에 권장됩니다. DynamoDB Standard-Infrequent Access(DynamoDB Standard-IA) 테이블 클래스는 스토리지 비용이 많이 드는 테이블에 최적화되어 있습니다.

테이블이나 인덱스에 활동이 없는 경우 스토리지가 주요 비용이 될 수 있으며 테이블 클래스를 변경하면 상당한 비용 절감 효과를 얻을 수 있습니다.

테이블 삭제

미사용 테이블을 발견하여 삭제하려는 경우 먼저 데이터를 백업하거나 내보내는 것이 좋습니다.

AWS Backup을 통해 수행된 백업은 콜드 스토리지 계층화를 활용하여 비용을 더욱 절감할 수 있습니다. AWS Backup을 통해 백업을 활성화하는 방법에 대한 정보는 DynamoDB와 함께 DynamoDB에서 AWS Backup 사용 설명서를 참조하고, 수명 주기를 사용하여 백업을 콜드 스토리지로 이동하는 방법에 대한 정보는 백업 관리 계획 설명서를 참조하세요.

또는 테이블의 데이터를 S3로 내보내도록 선택할 수도 있습니다. 이렇게 하려면 Amazon S3 S3로 내보내기 설명서를 참조하세요. 데이터를 내보낸 후 S3 Glacier Instant Retrieval, S3 Glacier Flexile Retrieval 또는 S3 Glacier Deep Archive를 활용하여 비용을 더욱 절감하려면 스토리지 수명 주기 관리를 참조하세요.

테이블을 백업한 후 AWS Management Console 또는 AWS Command Line Interface를 통해 테이블을 삭제할 수 있습니다.

미사용 GSI 리소스 식별

미사용 글로벌 보조 서버를 식별하는 단계는 사용하지 않는 테이블을 식별하는 단계와 유사합니다. DynamoDB는 기본 테이블에 작성된 항목에 GSI의 파티션 키로 사용되는 속성이 포함된 경우 해당 항목을 GSI로 복제하므로 기본 테이블이 사용 중인 경우 사용하지 않은 GSI의 ConsumedWriteCapacityUnits 0보다 클 가능성이 여전히 높습니다. 따라서 GSI가 사용되지 않았는지 확인하기 위해 ConsumedReadCapacityUnits 지표만 평가하게 됩니다.

AWS AWS CLI를 통해 테이블 지표를 보려면 다음 명령을 사용할 수 있습니다.

aws cloudwatch get-metric-statistics --metric-name ConsumedReadCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name> Name=GlobalSecondaryIndexName,Value=<index-name>

테이블을 미사용 테이블로 잘못 식별하지 않으려면 더 오랜 기간 동안 지표를 평가하는 것이 좋습니다. 적절한 시작 시간 및 종료 시간 범위(예: 30 days(30일))와 적절한 기간(예: 86400)을 선택합니다.

반환된 데이터에서 0보다 큰 모든 합계는 해당 기간 동안 수신된 읽기 트래픽을 평가 중인 테이블을 나타냅니다.

다음 결과에는 평가 기간에 읽기 트래픽을 수신한 GSI가 표시됩니다.

{ "Timestamp": "2022-08-17T21:20:00Z", "Sum": 36319167.0, "Unit": "Count" }, { "Timestamp": "2022-08-11T21:20:00Z", "Sum": 1869136.0, "Unit": "Count" },

다음 결과에는 평가 기간에 최소 읽기 트래픽을 수신한 GSI가 표시됩니다.

{ "Timestamp": "2022-08-28T21:20:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-15T21:20:00Z", "Sum": 2.0, "Unit": "Count" },

다음 결과에는 평가 기간에 읽기 트래픽을 전혀 수신하지 않은 GSI가 표시됩니다.

{ "Timestamp": "2022-08-17T21:20:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-11T21:20:00Z", "Sum": 0.0, "Unit": "Count" },

미사용 GSI 리소스 정리

미사용 GSI를 식별한 경우 삭제하도록 선택할 수 있습니다. GSI에 있는 모든 데이터는 기본 테이블에도 있으므로 GSI를 삭제하기 전에 추가 백업이 필요하지 않습니다. 나중에 GSI가 다시 필요할 경우 테이블에 다시 추가될 수 있습니다.

자주 사용하지 않는 GSI를 확인했다면 삭제하거나 비용을 줄일 수 있도록 애플리케이션의 설계 변경을 고려해야 합니다. 예를 들어 DynamoDB 스캔은 많은 양의 시스템 리소스를 사용할 수 있으므로 자주 사용하지 않아야 하지만 지원하는 액세스 패턴이 매우 드물게 사용되는 경우 GSI보다 비용 효율적일 수 있습니다.

또한 빈번하지 않은 액세스 패턴을 지원하기 위해 GSI가 필요한 경우 더 제한된 속성 세트를 프로젝션하는 것이 좋습니다. 이렇게 하면 빈번하지 않은 액세스 패턴을 지원하기 위해 기본 테이블에 대한 후속 쿼리가 필요할 수 있지만 이를 통해 스토리지 및 쓰기 비용을 크게 줄일 수 있습니다.

미사용 글로벌 테이블 정리

Amazon DynamoDB 글로벌 테이블은 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전의 다중 활성 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공합니다.

글로벌 테이블은 재해 복구를 위한 보조 영역은 물론 사용자와 가까운 데이터에 대한 액세스 지연 시간을 줄이는 데 적합합니다.

데이터에 대한 액세스 지연 시간을 줄이기 위해 리소스에 글로벌 테이블 옵션을 활성화했지만 재해 복구 전략의 일부가 아닌 경우, CloudWatch 지표를 평가하여 두 복제본 모두 읽기 트래픽을 적극적으로 처리하고 있는지 확인하세요. 한 복제본이 읽기 트래픽을 처리하지 않는 경우 미사용 리소스일 수 있습니다.

글로벌 테이블이 재해 복구 전략의 일부인 경우 활성/대기 패턴에서는 읽기 트래픽을 수신하지 않는 하나의 복제본이 있을 수 있습니다.

미사용 백업 또는 시점 복구(PITR) 제거

DynamoDB는 두 가지 백업 스타일을 제공합니다. 시점 복구는 35일간 연속 백업을 제공하여 실수로 쓰거나 삭제하지 못하도록 보호하며, 온디맨드 백업은 장기간 저장할 수 있는 스냅샷을 생성합니다. 두 가지 유형의 백업 모두 비용이 발생합니다.

테이블에 더 이상 필요하지 않을 수 있는 백업이 활성화되어 있는지 확인하려면 DynamoDB에 대한 백업 및 복원DynamoDB의 시점 백업 설명서를 참조하세요.