DynamoDB PITR Enabled on Non-Production Table
What does ZopNight detect here?
DynamoDB tables with dev/test evidence (an environment tag or a name like dev, qa, or staging) running Point-in-Time Recovery pay a standalone PITR storage charge. ZopNight prices the reclaim as table-plus-LSI gigabytes times the regional PITR rate (about $0.20 in us-east-1) and abstains under the $5 floor.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-100 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | dynamodb_pitr.go |
Where it applies
Non-prod evidence and the PITR billable footprint
- env tag (env/environment/stage/tier): a prod env tag is an authoritative veto; positive dev/test evidence, either a dev/test env tag OR a dev/test name (dev, test, qa, staging, sandbox), is required before recommending PITR disable (item T0064). The prior name-only classification (NAME_TAG_CLASSIFICATION) is now the no-env-tag fallback. Mirrors the eks_spot_nodepool/elasticache_multiaz classifier.
- Metadata: pitr_enabled (bool, DynamoDB DescribeContinuousBackups, LIVE producer)
- Metadata: pitrBillableSizeBytes (DescribeTable.TableSizeBytes + Σ LOCAL secondary-index IndexSizeBytes): the PITR-billable footprint, stamped by the discoverer only when LSIs add size; else tableSizeBytes (base table) / the populated SizeGB field. AWS bills PITR on table data + local secondary indexes (NOT global secondary indexes), and TableSizeBytes is base-table only, so LSI sizes are folded in, GSIs are deliberately excluded (no over-count).
- SKU rate: dynamodb-pitr-storage (per-region GB-month PITR rate, injected via SetSKURates; declared via TargetSKUCandidates so service.go’s fetchSKURates pre-fetches it, since DynamoDB tables have no billable InstanceType)
Pricing PITR storage at the regional GB-month rate
real PITR backup-storage reclaim: savings = sizeGB × ingested per-region \dynamodb-pitr-storage\ GB-month rate, where sizeGB is the PITR-billable footprint (table + LSIs; GSIs excluded per AWS’s PITR billing basis) (~$0.20 us-east-1, region-specific in AWS’s own rate card; the standalone PITR line item, removed in full; CurrentCost = the PITR charge, OptimizedCost = 0). The reclaim is not a fraction of the table’s compute/storage bill. Abstains when the size basis is absent (size unknown), when the regional rate is not ingested (never a hardcoded constant), or when the reclaim is below the $5 floor, never a $0/advisory placeholder under the cost-driven category.
Disabling PITR and falling back to on-demand backups
- Verify this is a non-production table
- Go to DynamoDB Console → Select table → Backups
- Disable Point-in-Time Recovery for non-production
- Use on-demand backups instead if needed