咨询Amazon DynamoDB写入容量单位按小时计费及闲置期高费用问题
嘿,这俩问题其实是很多刚上手DynamoDB的开发者都会踩的坑,我来给你掰扯清楚:
一、写入容量单位(WCU)按小时计费到底是什么意思?
首先得先搞懂什么是WCU:每个写入容量单位(WCU),简单说就是DynamoDB每秒能处理1次1KB大小的写入操作——要是你写的数据大于1KB,比如2KB,那就要消耗2个WCU,以此类推。
而「按小时计费」的核心,是针对**预配置容量模式(Provisioned Mode)**来说的:你提前给表设置了多少个WCU,不管这个小时里你实际用了多少次写入(哪怕一次都没写),AWS都会按你配置的WCU数量来计费(超出免费层的部分)。
举个直观的例子:DynamoDB免费层每月给5个WCU的免费额度(折算成小时的话,就是每小时可以用5个WCU不花钱)。如果你给表配置了10个WCU,那每小时里超出免费的5个WCU就会产生费用——哪怕你这个小时只写了1条数据,甚至啥都没写,这5个超出的WCU的费用照样会扣。
二、项目搁置几乎没使用,为啥还会有「超出免费层的写入容量单位按小时计费」的高额账单?
大概率是你踩了预配置容量模式的坑!
你应该是把DynamoDB表设置成了预配置容量模式,而且配置的WCU数量超过了免费层的5个,之后搁置项目的时候,忘了调整这个配置!
预配置模式的逻辑就是“先占坑再收费”:你设置了多少WCU,AWS就会为你预留这么多的写入处理能力,不管你用不用,每小时都会按这个预留的容量计费。哪怕你项目停了,表还在那儿,配置的WCU没改,那每小时的费用就会持续产生,日积月累就变成高额账单了。
要是你用的是**按需模式(On-Demand Mode)**就不会这样——按需是按你实际使用的WCU数量计费,不用就不花钱,免费层的额度也会优先抵扣实际使用量。
给你几个解决思路:
- 先去DynamoDB控制台找到对应的表,看看它的容量模式,直接改成按需模式(如果之后不需要稳定的预留写入能力的话);
- 要是还想用预配置模式,就把WCU调整到免费层的5个以内(只要你的写入量不大),这样就不会产生超出免费层的费用了;
- 另外也可以排查一下,有没有什么自动触发的写入操作(比如关联的Lambda定时任务、其他服务的联动)——哪怕你没手动操作,这些自动任务也可能在悄悄消耗WCU。
内容的提问来源于stack exchange,提问作者casolorz

