亚马逊AWS官方博客

AWS 成本管理与优化之五:成本的治理和预警

成本的系统化治理

随着企业在 AWS 上的发展和深入使用,除了可以自由地在云中进行实验和创新,保持对成本、治理和安全性的控制也会变得愈发重要。在 TAM 的日常工作中,我们发现成本的系统化治理对最终高质量实现成本优化起着至关重要的作用。

统一账单

我应该如何查看过去一段时间的费用和发票副本?我应该如何追踪我的整体支出,并按服务和账户查看我的成本明细?这些问题是客户上云以后对于成本系统化治理的最直接也是最原始的需求。为了满足这些需求,AWS 推出并不断改进账单控制面板来为客户提供统一的账单查看平台,这是一个集中式的平台可以统一查看所有的当前和历史成本。如果企业使用了 Amazon Organization 账户管理服务,那对于多个账户的账单同样可以在这个统一的账单控制面板来查看。账单控制面板的主要功能包括(不限于):

  • 成本摘要(本月的总预测成本、累计支出、与前一月对比、使用的服务和 AWS 区域信息、活跃的账户信息等)
  • 最高的服务费用/账户支出/ AWS 区域支出
  • 前五大服务的成本趋势
  • 按服务/按账户的成本明细和趋势
  • 详细账单明细
  • 发票管理

成本和用量治理

除了查看账单这种滞后性的操作以外,您还希望能够主动出击,在成本失控之前就能采取一些预防性措施来对成本进行统一的管控和治理。比如通过权限控制来确保只有授权用户才能访问特定的 AWS 服务,这样做可以防止资源被随意创建,避免浪费。管理员可以通过使用 Amazon Identity & Access Management (IAM) 来控制个人和群组对 AWS 资源的访问。

示例 1:限制用户在特定区域内使用有限服务

IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"rds:*",
"s3:*"
],
"Resource": "*",
"Condition": {"StringEquals": {"aws:RequestedRegion": "us-east-1"}}
}
]
}

该策略限制了用户只能在区域(us-east-1)创建和使用 EC2/RDS/S3 资源,如果用户尝试在该区域创建其他类型的资源,或者尝试在另外的区域创建任何资源都会收到类似 “You are not authorized to perform this operation.” 的错误提示。

示例 2:限制用户使用特定的 EC2 实例家族或者大小

AWS 针对 EC2 服务提供了大约几十种不同的实例家族,根据其底层硬件和实现的不同,单位小时的价格也各不相同,最经济的做法是根据业务的实际需求来选择合适的实例家族运行工作负载。比如:如果购买了某种实例家族的 Savings Plans 或者预留实例,为了提高这些折扣计划的利用率,应该在创建新资源的时候,尽可能的选择被这些折扣计划覆盖的资源类型。又比如,使用 AWS 自研的 Gravtion 实例,可以大幅度的降低 EC2 使用成本,可以优先安排大家使用来控制成本等等。但是,在 TAM 支持客户的工作中,我们常常发现,并不是所有的情况都是这样,照成这种状况的原因有很多,有的时候是工程师对各种实例家族的特性不够了解,有的时候是缺少流程监管,工程师可以随意的创建任何资源,而没有将成本因素考虑进来。通过如下 IAM 策略可以帮助我们来实现限制用户使用特定的 EC2 实例家族的目的。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"ForAllValues:StringLike": {
"ec2:InstanceType": [
"t4g.*",
"m6g.*",
"m6i.*"
]
}
}
}
]
}

如果我们还需要对使用的 EC2 资源做更加精细的控制,比如不仅要限制家族类型还要限制实例的大小,依然可以通过 IAM 策略来进行设置:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"ForAllValues:StringLike": {
"ec2:InstanceType": [
"t4g.medium",
"m6g.large",
"m6i.xlarge"
]
}
}
}
]
}

示例 3:限制用户对特定 EBS 卷类型的使用

同样对于使用比较多的存储资源 EBS,也可以使用同样的策略来进行权限管控。对于 EBS 来说,不同的卷类型在价格上差别也很大,选择经济实惠的 EBS 卷类型有助于企业做好成本管理。如下 IAM 策略的目的是禁止用户创建类型为 IO1 的 EBS 卷。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:VolumeType": "io1"
}
}
}
]
}

成本的预测和规划

在传统的数据中心模式里,采购流程大致是这样的:首先,技术团队提交所需资源的申请;接着,采购团队审批并洽谈采购合同;然后,供应链会负责具体的资源准备工作并持续推进,最后,财务团队会在预定的生命周期内跟踪并公布该笔资本开支和资产的使用情况。这种传统的采购流程对应的是相对静态、长期、瀑布式的预算和预测。迁移上云以后,采购会变成一个更加动态的持续过程,这就要求企业组织去调整对成本的预测和预算方式来适用更为动态的云适用情况。

如何预测成本?

企业上云之后经常会问:我应该如何预测项目成本?AWS 提供了 Cost Explorer,其采用机器学习和基于规则的模型来预测每日或每月的成本和使用情况。这是对历史数据的线性推断,并给出 80% 的置信区间。您可以按任何 Cost Explorer 过滤器值进行预测,例如账户、成本分配标签或特定 AWS 服务。如果 Cost Explorer 没有足够的历史数据来预测 80% 的预测区间,它将不会生成预测。通过使用 Cost Explorer 对成本进行预测是最简便的方法。但是,Cost Explorer 在预测成本时并没有提供丰富的客制化选项,它是一个面向所有客户的通用方案。如果您希望通过提供更多数据来精细的控制预测的准确度,那么也可以使用 AWS 提供的 AI 类服务来进行更精确的成本预测。

示例 4:通过 Cost Explorer 进行成本预测

Cost Explorer 既可以基于每日进行预测,也可以基于每月进行预测。当基于每日进行预测的时候,支持的最长预测时间为 3 个月,当基于每月进行预测的时候,支持的最长预测时间为 12 个月。

如何管理预算?

如何跟踪、监控预算以及将成本保持在预算范围内是做好成本管理最重要的措施之一。尽管财务人员可以每天去查看账单,或者使用诸如 Cost Explorer 的工具去判断截至到当前的成本支出是否还在预算内,但是这种靠人员去检查的方式费时费力,不够自动化,也不智能。为了帮助您管理好预算,AWS 提供了两个相关的工具:Amazon Budget 和 Amazon成本异常检测。TAM 在跟客户的日常工作中,都会建议和指导客户根据实际的业务需求设置并利用这两个工具来管理预算,并在检测出成本异常时及时的通知到相关人员,避免成本的高支出和浪费。

客户可以使用 Amazon Budget 设置自定义预算,当成本或者使用量超出或预计超出预算金额时收到提醒。同时还可以使用 Amazon Budget 为其购买的预留实例和 Savings Plans 设置利用率和覆盖率目标,当利用率或覆盖率低于其定义的阈值时接收提醒。接收提醒的方式有多种,主要有:电子邮件接收提醒、Amazon SNS 提醒和 Amazon Chatbot 报警,客户可以根据自己的警报系统灵活的进行选择。

Amazon Budget 除了可以设置提醒,还支持在目标参数值超过阈值时触发自定义动作。这些自定义动作包含以下三类:

IAM 策略

为特定的 IAM 用户、组或角色附加任一 IAM 策略来对资源的使用进行权限管控,以达到成本管理的目的。

服务控制策略(Service Control Policy, SCP)

与上述 IAM 策略的作用相同,SCP 也是用来对资源的使用进行权限管控的,不同点是 SCP 的使用对象是组织的根账户和组织单元(Organization Unit, OU)。

自动停止 EC2 或者 RDS 实例

Amazon Budget 的自定义动作支持自动停止 EC2 或者 RDS 实例,当成本的增长主要来自这两个服务的时候,您可以根据实际业务的情况去设置是否自动停止相关的 EC2 或者 RDS 实例,已达到控制成本的目的。

如何检测成本异常?

在日常的工作中,TAM 经常会主动的观察到或者被动的知晓客户的成本有异常波动,这种波动有的时候是业务上量的正常反应,有的时候是因为遭受到了外部攻击和账号劫持。为了避免不必要的经济损失,主动及时的对成本进行异常检测就至关重要。

Amazon 成本异常检测作为一项免费服务,在对成本进行持续监控的基础上,利用先进的机器学习技术来检测异常情况,识别出异常支出并可基于此分析其根本原因,以便客户可以接收到通知并采取必要的行动,来降低成本异常上升的风险。在收到成本异常的警报以后,客户可以对这些警报提供反馈来改进异常识别,通过进一步训练机器学习模型,对成本异常通知的反馈可以逐渐提高准确性。

当前,Amazon 成本异常检测,主要支持从以下四个维度进行成本监控和检测:

AWS 服务

此监控会单独评估所使用的每项服务,有利于检测出较小的异常情况狂。异常情况阈值将根据历史服务支出模式自动进行调整。

关联账户

此监控会评估单个关联账户的总支出。如果组织使用关联账户定义团队(或产品、服务、环境),此监控将非常有用。

成本类别

此监控会评估单个成本类别值的总支出。如果组织使用 Cost Categories 定义团队(或产品、服务、环境),此监控将非常有用。

成本分配标签

此监控可评估单个标签键值对的总支出。如果组织使用成本分配标签定义团队(或产品、服务、环境),此监控将非常有用。

总结

在本文中我们主要介绍了可以通过 AWS 账单控制面板来统一的查看所有服务和所有的账户的成本明细,同时也通过了几个示例来演示了如何使用 IAM 策略来对资源的创建和使用进行管控,通过这些服务可以帮助客户在提高业务敏捷性的同时保持对治理的控制权。在本文的后半部分,我们讲解了如何通过预测成本和管理预算来进行成本管理,最后介绍了如何通过工具来进行异常成本的预警。

本篇作者

朱修磊

亚马逊云科技技术客户经理,负责企业级客户的架构和成本优化、技术支持等工作,拥有多年的产品研发、技术布道、IT 架构设计和运维经验。