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를 통해 확인할 수 있습니다
미사용 테이블 리소스 정리
미사용 테이블 리소스를 식별한 경우 다음과 같은 방법으로 지속적인 비용을 줄일 수 있습니다.
참고
미사용 테이블을 식별했지만 나중에 액세스해야 할 경우를 대비하여 계속 사용할 수 있으려면 온디맨드 모드로 전환하는 것이 좋습니다. 그렇지 않으면 테이블을 완전히 백업하고 삭제할 수도 있습니다.
용량 모드
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의 시점 백업 설명서를 참조하세요.