使用TAG区分AWS费用账单

一、划分费用的方法

为了区分不同部门、不同业务线的费用,如下两个常见方法:

  1. 使用AWS Organization功能,创建独立的子账户,然后自动合并付款。缺点是自账户创建、认证、密码策略、管理维护稍微步骤多一些。详细文档参考这里
  2. 使用Tag区分。在当前账号下,创建资源都填写对应的资源标签。

本文描述的是方法2也就是Tag(标签)。详细文档参见这里的链接

标签由Key和Value组成。简单的用法就是添加一个Owner标签,然后不同的项目或不同的团队,使用不同的部门名称。另一个维度是使用生产/测试/研发等场景类。

如下是一个标签的划分纬度的例子。

二、设置标签

1、EC2实例设置标签

每次创建EC2示例时候,向导其中一个步骤,在配置Security Group之后的步骤,就是询问配置Tag,输入并创建EC2就可以了。

如果是此前已经创建好的EC2,这里可以修改。

2、RDS实例设置标签

RDS设置标签的位置藏的比较深,在开通时候没有设置标签的地方。开通完毕后,即使点击“Modify”修改按钮,也没有设置Tag的地方。设置Tag的入口,是需要对某一个实例点击后,在页面下方的信息标签页里边切换过去。

如下界面,这里两个红框,一个是modify,一个是RDS的实例名字。不要点击modify,那样就设置不了tag了。而是点击实例名字。

点击后切换到最后一个标签页,就可以设置tag了。如下截图。

其他产品,包括负载均衡等就不一一讲解了。

3、查找并修改标签

在设置好标签后,以后要编辑修改,不需要逐个服务界面的找,只要统一从resource group界面下去管理即可。如下截图标记的红色框位置。

在标签页下选择查找区域(例如选所有区域),选择查找服务(例如选所有服务)。然后,输入以前使用过的tag,安search按钮,就可以检索标签了。

以前使用过的标签检索出来后,可以修改标签的字段和值。当然也可以批量修改,方法是选中多个,点击红色框中的编辑按钮。

如此就可以完成标签的调整了。

三、划分成本

1、激活标签

当完成了如上步骤后,去费用账单(Cost Exploer)里边看,会发现tag的下拉框是选不出来任何标签的。这是因为,在计费模块中,标签没有激活。

进入账号的“My Billing Dashboard”,找到左侧导航栏的“Cost Allocation Tags”,然后激活需要显示的标签。例如如下截图。

在这个界面,可以查看所有标签,或者只显示已经激活的、或者只显示未激活的标签。通过这个选项修改,把想要拆分的标签激活。

此外,标签还分成两类,即“AWS生成的标签”和“用户自定义标签”,刚才对EC2和RDS配置的标签都属于用户自定义标签,一般就激活用户自定义标签就可以列。

修改完成后,激活标签,然后需要24小时生效,才能再费用报表中看到。

2、查看费用

进入费用管理器,可以调整显示的时间窗口为“Month-to-date”,缩写MTD,也就是本月开始的第一天到今天的日期。这样就比较关注当前费用。

然后从上方的横栏里边Group by位置,点击tag,如下面的截图的红色框。图标会随着自动更新。

通过以上截图,清晰的看到,我的账单里边 Production(紫色)环境和 Demo(橙色)的费用对比。橙色是我近两天刚开通的资源,因此从本月第一天起是没有的。另外,还有一个绿色部分,是叫做No Tagkey,是没有任何标签的资源发生的费用。

由此可以看到,通过设置tag,不但追踪了成本,还可以进步帮助定位问题,深度挖掘资源使用情况。

3、进一步分析不带tag的费用组成

在上一个小节里边,我们的费用图标,有一部分费用是浅绿色的,叫做No Tagkey,这部分是绿色的,表示是没有费用标签的服务。

原因可能有如下:

  • 1)有一部分服务如EC2、RDS、S3等支持设置标签,但确实有部分服务不支持区分标签,例如Route53域名解析,不支持设置标签。
  • 2)有一部分支持设置标签的服务,忘记设置标签,且一直使用中,费用一直持续发生,在Month-to-date报表上从月初到今天都一直发生。
  • 3)还有一种场景,就是支持设置tag的资源如EC2,但创建时候比较仓促管理员未能正确设置tag,然后测试结束管理员又将资源删除了,这期间发生了一些费用。这种类型的费用在Month-to-date的报表上,一般就到某一特定时间截止,不会一直发生。

为了进一步挖掘不带标签的费用,搞明白它的组成和开销花在那里,接下来,继续操作,在刚才截图的那张图标的位置上,点击右侧的筛选,按tag筛选,把图表设置为筛选并只显示没标签。如下截图红色方框中,选择Stack,然后选择没有key的,在点击筛选按钮。

接下来,在页面上方的分类条件这里,点击按“service”,即按服务分类。如下截图所,列出了这些没有标签的费用。

如上截图,我们就将刚才不带tag的费用,按service类型分类,获得了分析结果。可以看到不支持设置tag的Route53(橘色)、WAF(紫色)、Guardduty(黄色,提供IDS和威胁识别)产生的费用占据了很大一部分,他们无法按照tag拆分。

在如上截图中,还发现了绿色的RDS和深红(棕色)的EC2产生的费用,且RDS是从本月第一天起就一只发生,应该属于是正常使用的资源,开通时候没有设置tag。此外,RDS和EC2还在最后一天爆发,新增量的部分也没设置tag。接下来继续查找下这是哪里发生的费用。

在上图的基础上,继续操作,将右侧的筛选框增加一个筛选条件,只显示EC2服务,下半部分刚才设置的筛选条件显示不带tag的费用这个条件不要删除。由此就是两个条件做查询。然后,在页面上方,把Groupby选择为按Region,这样就一下子定位到没设置tag的资源在什么位置。

经过这一番折腾,如上截图,定位到在美国东部俄亥俄 us-east-2有EC2没有tag标记。

进一步,如果我在us-east-2 俄亥俄有许多EC2,那我要一个个翻EC2的信息,检查哪一个EC2没设置标签还是很麻烦的,那么可以继续调整group by分组。保持刚才右侧筛选类型不要变化,页面上方的分组按照instance type规格类型分组。如下截图。

这一下曝露了,是一个a1规格实例,是我在这天发起了一个基于ARM处理器的Linux实例,运行Amazon Linux,在上边运行了Wordpress,不是X86的,但是都有对应的包build好,直接yum就可以用,很有意思。创建这个EC2时候我并未打tag。这样一下子就定位出来了。继续,完成对剩余资源的清理过程。

4、不支持标签的费用的展现

在继续清理资源的过程中,发现还有一部分RDS费用属于notag的。我们按照刚才的方法,从不同角度筛选,先增加服务类型为RDS的筛选,然后按Region分组显示,可以看到这部分费用从本月第一天起就一直存在。

按Region分列还是不足的。继续调整,把Groupby改成按“Usage Type”。如下截图。

这一下子就真相大白了,这部分没有标签的费用是RDS的磁盘IOPS费用和跨区域的IO复制费用。那么这费用部分是否支持设置tag呢?

很遗憾,目前Aurora RDS数据库的IO还不能设置标签。参考这里的链接

在关于资源组和tag的文档中,也描述了RDS支持tag的类型如下截图。出处的文档链接在这里

由此,关于不支持tag的费用,就只能依靠人工处理报表和账单时候线下归类,或者按一定的比例分摊了。这部分就是IT运营成本的核算问题,这里不继续描述了。

四、获取详细费用报表

为了看到更详细的完成费用清单,步骤如下。

1、进入“My Billing Dashboard”,找到左侧导航栏的Cost & Usage Reports,可以生成报表。

2、报表会自动导出到S3存储上,时间频率是按小时或者按天。

此外,导出报表支持与多种分析工具集成。但本文中不展开论述。

配置完成后,等24小时,看下报表的效果如下图。

五、其他费用相关问题

1、哪些产品支持打tag。

https://docs.aws.amazon.com/zh_cn/ARG/latest/userguide/supported-resources.html#supported-resources-console

注意:确实不是所有服务都支持Tag的,例如Route53、WAF等不支持tag。

2、EC2服务哪些资源支持tag。

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources

3、不支持tag的如何处理。

建议人为分账,或者参考本文开头用多账号的方式,合并付款。

4、如何从AWS的API上获取费用。

https://docs.aws.amazon.com/zh_cn/aws-cost-management/latest/APIReference/API_GetCostAndUsage.html

六、小结

至此,简单使用tag标签做成本和账单的分割介绍完了。

Reference:https://docs.aws.amazon.com/zh_cn/awsaccountbilling/latest/aboutv2/awsaccountbilling-aboutv2.pdf