1

我们一直在 AWS 上运行多层应用程序,并使用各种 AWS 服务,如 ECS、Lambda 和 RDS。寻找一种将计费项目映射到实际系统组件的解决方案,找到最花钱的组件等。

AWS 改进了其详细的成本使用报告并拥有 Cost Explorer API,但它仅将计费分解为服务或实例。但是,如果您查找每个组件的成本是多少,则每个实例的细分不会带来太大的价值。对此有任何解决方案/建议吗?

4

1 回答 1

0

成本分配标签

您可以创建诸如“系统”或“应用程序”之类的标签并将其应用于所有资源,并将值设置为您希望跟踪的不同应用程序/系统/组件。然后您可以转到计费页面,单击“成本分配标签”并激活您创建的该标签。

然后您可以看到按该标签的不同值细分的成本。它们将显示在 Cost Explorer 中,标签将是可用的过滤器之一。但是,我认为激活后需要 24 小时才能显示出来。

如果您确实需要强制使用标签,并且您有开发多个组件的开发人员,则可以使用 IAM 角色来管理每个组件,每个角色仅限于与具有特定标签的资源进行交互(即他们只能修改现有资源使用该标签,他们只能使用该标签创建新资源)。开发人员可以拥有一个 IAM 用户(或者您可以联合身份,但这是一个完全不同的对话)并允许他们根据他们正在处理的组件承担不同的角色。这具有使跨账户管理更容易的额外好处。然而,它可能需要一个重要的 IAM 大修。

有关成本分配标签的更多信息:https ://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

按 AWS 账户划分成本边界

要攻击不可标记的组件(例如数据传输),您可以围绕成本边界构建账户策略,并为每个成本孤岛设置一个单独的账户(如果可行的话)。这可能会增加成本,因为您必须将系统分成特定的账户(因此也需要特定的 EC2 实例)。

当您集中报告、监控、配置管理、日志分析等时。每个应用程序都会增加一点成本,但通常您只需将集中化本身视为一个系统,并自行单独计算成本。显然,您可以对每个系统进行单独的监控、警报、报告、日志收集、配置管理等,但这将花费更多的总体成本(包括基础设施成本和工程时间)。因此,您必须优先考虑成本可见性与成本优化。

AWS 中仍有大量功能可以连接来自不同账户的资源,并且在一个账户中拥有数据层并在另一个账户中拥有应用层并不难(尽管这不是我经常看到的范例)。

定制工具

也许以上对于您的环境来说是不完美的解决方案,您可以在可行的情况下使用以上方法并编写脚本来估计更难以跟踪的事物的使用情况。对于带宽,如果您有自己的 EC2 实例作为转发代理或 NAT 网关运行,您可以编写一些出站数据传输帐户软件。如果您的 VPC 中的所有内容都有指向这些实例上的 ENI 的路由,那么您可以通过您选择的任何参数更好地跟踪出站传输。这对我来说听起来确实有点脆弱,从网络的角度来看,这可能在某些情况下是站不住脚的,但这是有可能的。

同样,使用 Cloudwatch 指标,您可以使用命名空间,我无法在 Cost Explorer 中找到任何关于按 Cloudwatch 命名空间进行过滤的参考,但可能很容易找出每个命名空间的原始指标并估算每个命名空间的成本命名空间。然后,您可以按名称空间划分 Cloudwatch 中的组件。这可能会导致一些重复,这可能会导致更多的管理工作或增加成本,但这将是更精细的成本可见性的权衡。

Kubernetes

对于您的环境而言,这可能是天方夜谭,但值得一提。如果您使用 EKS 运行集群或在 EC2 上运行自我管理的集群,则可以利用该平台的强大功能,这将允许您预置基本级别的计算资源、将组件划分为命名空间并使用内置或第三方工具获取每个命名空间(甚至每个工作负载)的使用统计信息。这更容易实施,因为您可以让开发人员访问特定的命名空间,并且异常值通常更明显。当您知道每个工作负载随时间使用的 CPU 和内存量时,您可以按组件对单个成本模式进行很好的估计。

当然,您仍然需要为 k8s 管理平面支付成本,这将与您的所有其他应用程序/系统分开。

Istio 虽然不是一项简单的技术,但它允许您收集有关数据出口的细粒度指标,您可以使用这些指标来了解正在运行的数据传输成本。

在每个命名空间中复制监控可能更容易,因为您已经必须将监控工作负载抽象到一定程度才能在 k8s 上运行。然而,这仍然会增加管理和总体成本,但可能比基础设施 (AWS) 层的孤岛要少。

概括

我不知道有多少选项可以达到您在 AWS 中所需的粒度和控制级别。为此而做出的努力可能会增加总体成本和管理开销。AWS 因难以估算成本模型而臭名昭著。也许为您的工作负载寻找 AWS 以外的平台,这些平台可能会更好地了解组件成本。

也很难避免集中操作的系统,并且每个系统的成本难以追踪。其中包括日志管理、配置管理、身份验证系统、警报系统、监控系统等。通常,为所有工作负载集中这些功能更具成本效益且更易于管理,但随后单个应用程序的 TCO 变得困难。根据我的经验,大多数团队将其记为基础设施成本,并通过计算、存储和 AWS 服务使用数据点更多地跟踪应用程序的成本。

于 2020-01-12T03:15:11.400 回答