国际版亚马逊云(AWS)使用信用卡注册即可获得一年免费套餐,其中包含一个 t2.micro 型号的虚拟机(EC2)和 100GB 的免费数据传输,听起来似乎只要不用超这 100GB 流量就可以免费使用,但实际上就算“用量”在免费套餐范围内,也仍然有可能被收费。
要做到完全免费使用需要注意什么呢?答案是跨 AWS 区域的流量。从账单(Billing)控制台开启成本分配标签后我们可以从 Cost Explorer 中的标签和使用类型分组定位到账单费用的来源。如果你被计费后在 Cost Explorer 里看到的使用类型是两个区域代号后面跟着 AWS-Out-Bytes
就说明你踩上这个坑了。
对于 AWS 计费而言,无论是通过 VPC 对等连接还是互联网网关,只要是到其他 AWS 区域的出向流量通通按标准数据传输费用计费,价格在每 GB 流量 0.01 到 0.02 美元之间,不算在 100GB 的免费额度里面。
这一收费项其实很难控制,因为你也无法事先确定你使用的第三方 SaaS 服务是否有资源在 AWS 上,或者端口开放给互联网后会不会被部署在其他 AWS 区域的网络爬虫扫描。无论哪一种情况只要产生了到其他区域的出向流量,就有可能产生费用。
那么如何避免被收费呢?其实也是有几点小技巧的。
首先你可以在账单控制台里配置一个 Budget,然后配置上超过 0% 的使用量就推送一个 Slack 警报,这样能在费用发生后的第二天收到通知及时处理,在用量不多的情况下也不会实际产生账单费用。
然后是对 EC2 配置严格的安全组,只允许来自特定范围内的 IP 访问的话可以杜绝被爬虫扫描导致产生收费流量的情况。
最后是无论在机器上进行什么变更都不要着急进行大量(超过 500MB)数据传输,先进行小流量测试,第二天在 Cost Explorer 中验证没有意料之外的费用后再继续享受免费的 100GB 流量。
只要发现及时,产生的费用不会很多。即使把等同于免费额度的 100GB 数据传输全用在跨区域传输上也只会收不到 2 美元的费用。如果支付不起的话也不用太惊慌,先尝试在支持中心创建一个案例,向客服说明是意料之外产生的费用,也是有可能获得 credit 抵消掉费用的。
从 AWS 的定价看应该是想用更低的价格吸引用户在多区域的业务场景下也只使用亚马逊云,但对免费套餐的处理却一点也不上心。如果这免费的 100GB 额度包含了所有流量类型,新用户的体验会好很多。
P.S. 需要注意的是 AWS 在中国(宁夏)区域也有一个免费套餐,但是这个免费套餐是不包含数据传输的。跨区域的单独计费虽然更便宜但只对同在中国的北京区域有效。