这是我们如何在不到两周的时间内将 AWS 成本削减 80% 的故事。 AWS 是开发者的糖果店 我需要先介绍一下。自 2018 年以来,我们一直在所有项目中使用 AWS,它为我们创造了奇迹。我们是一个完全分布式的团队,在世界某个地方拥有自己的数据中心将会出现问题。从 AWS 租用资源并跳过所有资本支出要容易得多。 AWS 的问题在于,开发人员基本上可以创建任何资源,而无需经过我们财务部门的批准。对于传统数据中心来说,情况并非如此——购买额外的服务器需要从商店获得发票并要求财务部门支付费用。 因此,基本上,问题的根本在于,使用 AWS,开发人员可以按自己想要的数量、在需要的时间购买资源。 我们采取了哪些措施来降低 AWS 成本? 我们不是一家大公司,所有 AWS 账户的 AWS 成本每月仅略高于 7000 美元。另外,值得一提的是,我们仅托管 DEV 和 QA 展位,因为 PROD 展位由我们的客户付费。我们的资源主要是个人开发机器、测试数据库以及用于研究项目的各种自定义资源,例如 Kinesis Firehose、Sage Maker 等。因此,我们拥有大量难以分类、结构化、预测和控制的随机资源。 那么,我们如何降低 AWS 成本呢? ,我们开始研究 Cost Explorer 并确定了最昂贵的项目: 首先 我们发现一个比特币节点在过去四个月内运行,每月费用为 600 美元,因为它需要具有额外配置速度的大型 SSD。我们对比特币序号进行了小型研究,但没有移除机器。 解决方案:我们对该卷进行了存档(费用为 6 美元/月)并终止了虚拟机。 节省:$594/月 我们找到了一台 Nvidia Tesla GPU 机器,每月费用为 531 美元。直到今天,我们仍将其用于生成人工智能实验。我们正在考虑构建自己的应用程序来生成文本到视频,因此我们需要这台机器。 解决方案:将卷移至竞价实例。 节省:360 美元/月 这不是最昂贵的,但最令人惊讶的发现是,我们忘记移除一个未使用区域中的演示 PROD 站,我们在该区域部署了 terraform 脚本以“从头开始”测试 PROD 的推出。 节省:340 美元/月。 许多较小的物品。 分辨率:各不相同。 节省:1700 美元/月 ,我们开始采取一切可能的措施来发现实例。这是一个简单的过程。对于单个机器,您需要将其关闭,分离卷(记住记下安装路径),然后终止机器。然后您创建一个新的 Spot 实例(无论什么 AMI,只要确保 CPU 架构与您之前的卷兼容即可)。创建 Spot 实例后,分离(不要忘记删除!)新卷,并将以前的卷附加到与原始计算机上相同的安装路径上。对于 Beanstalk 环境,它更简单 - 我们只是更改了容量设置以仅使用现货实例。 其次 节省:1000 美元/月 ,我们清理了未使用的S3存储桶(我们做了一些自动交易机器人,积累了大量的流数据)。并设置自动删除多个 S3 存储桶中的数据,这样我们就不会存储交易数据超过一年,因为它会完全过时且无用。 第三 节省:300 美元/月 是缩减了一些资源。这是检查消耗的 CPU 和 RAM 的问题,如果我们看到持续使用率低于 50%,我们就会降低级别。 四 节省:每月 300 美元(按需实例节省 3 倍) ,我们对个别机器设置自动关闭。我们为不同类型的任务创建了多个 lambda 函数:在 1 小时不活动后关闭 SageMaker Jupyter VM、关闭单个 VM、DEV 和 QA 代表无人工作的夜间时段。这些 lambda 函数每天在 cloudwatch 事件上运行。还有 lambda 可以启用 DEV 和 QA 站,以促进该过程。 第五 节省:$500/月 此外,我们还实施了一些较小的解决方案以进一步节省成本,但本文未介绍这些解决方案。 到目前为止,我们每月 7000 美元的账单中节省了约 5500 美元,约占所有成本的 80%!我知道我们在 AWS 上超支了,但从来不知道竟然有这么多。全年下来,这意味着可节省约 66,000 美元。 组织如何实现云成本优化? 在获得了我们自己的云成本优化经验后,我明白了仔细跟踪云成本的重要性。基本上,如果您将节省的资金投入营销,云成本优化可以节省足够的资金来促进业务发展。或者你可以把它作为股息拿出来买一辆新车。这笔钱是巨大的,而且可以用它做很多事情。 既然云成本优化无疑是一项绝对必要的努力,那么企业如何应对呢?让我们考虑一下实施云废物管理的方法,从最简单到最先进。 1. 只购买虚拟机 您可以用最传统的方式解决这个问题。否认AWS提供的无数可能性,只是限制你的开发人员购买EC2机器。 SQS?不。DynamoDB?不需要。只需使用 EC2 虚拟机并在其上安装所有内容即可。 优点: 您可以很好地预测支出,因为每种类型的 EC2 VM 都有固定费率 开发人员将在可用的机器中填充他们需要的软件。就像在传统的物理本地数据中心一样,从而提高资金支出的有效性 缺点: 您错过了自动缩放的好处 您的开发人员浪费时间来实现已经存在的东西 您错过了自动应用的软件自动更新 总而言之,像在 GoDaddy 上租用托管一样使用云并不是一个好的策略。 2. 审查每个请求 如果您允许开发人员使用和扩展任何资源,但他们必须与控制成本的特殊部门进行谈判,该怎么办?开发者没有自己购买/扩展资源的权利,但他们可以要求专人为他们购买/扩展资源。 假设开发人员需要 Kinesis Firehose 端点(是的,我提到了一项您很可能从未听说过的服务)。对于开发人员来说,向控制器解释他/她想要什么是一个简单的任务吗?然后开发人员还应该解释扩展背后的原因,甚至可能证明架构选择是好的,并且在成本管理方面不会浪费。 提供一个具体的例子后,人们就会发现这种方式行不通。只有由专家组成的成本管理团队才能发挥作用。 这只是冰山一角。现在考虑: 由于架构变更而不再需要资源 开发人员离开工作,但没有删除他们用于个人开发目的的资源 需要快速扩展资源以避免业务故障时的紧急情况 优点: 开发人员可以充分利用AWS托管资源的优势 支出控制得很好 缺点: 云浪费仍然可能来自未删除的不需要的资源 成本管理团队需要高水平的 AWS 知识 官僚主义水平可能会损害业务 3. 聘请 FinOps 团队 更先进的方法是实际寻找并聘请 AWS 专家来控制支出。他们可以使用 AWS 提供的工具来控制开箱即用的支出。它有: 成本探索者 标签子系统 预留实例 储蓄计划 成本异常 多得多 这些工具不是用户友好的,需要受过良好教育的人员知道如何使用它们。但是,您实际上可以开始控制云成本。这种方法不仅需要工具和高技能的工人,还需要团队工作的框架:定期检查未充分利用的资源、收缩和清洁程序等。 基本上是具有财务意识的 DevOps 团队称为 FinOps。 优点: 开发人员拥有AWS的全部权力 开发商的官僚开销很小 财务团队完全控制各个方面的支出:每个项目、每个团队等。 开发人员有意识地消耗资源 缺点: 需要受过高等教育的员工,而这些员工大多还不存在,因此您需要培训一名员工 易受人为因素影响 反应时间与两次检查之间的时间一样快 — 未使用的 EC2 机器可以运行 1-2 周或更长时间 4.使用云废物管理软件 一旦您认真考虑雇用(或发展自己的)FinOps 团队,您还应该考虑第 3 方云成本优化软件,例如 Infinops。它是您的自动 FinOps 团队成员,全天候 24/7 工作,不易出现人为错误。此类软件会自动控制您的云以获取未充分利用的资源和其他已知的节省方式,例如: 使用竞价实例 使用预留实例 减少 QA 环境中 OpenSearch 集群的数量 晚上禁用个人虚拟机 使用 Jupyter 自动关闭昂贵的 SageMaker VM ETC 所有这些提示都会自动出现,因为您的系统会不断扫描更改。这样的建议可以 。这通常意味着一年中至少节省数万美元。 为您节省高达 80% 的每月账单 优点: FinOps 团队的绝佳工具 通过优化技术帮助 FinOps 新手 减少人为因素 强制定期审查资源消耗 强制执行标签、生命周期管理等 允许同时跟踪多个 AWS 账户 缺点: 有自己的成本(通常远低于它节省的成本) ,我想说管理 AWS 成本可能很棘手。该公司 80% 的节省表明,采取正确的措施可以减少开支。无论您是设置资源限制、获得批准、使用专家团队还是自动化工具,都必须密切关注费用。毕竟,使用云应该让事情变得更容易,而不是更昂贵。 总之