aws 对系统组件和工件的计费细分
aws billing breakdown to system components and artifacts
我们一直在 运行 aws 上使用多层应用程序并使用各种 aws 服务,如 ECS、Lambda 和 RDS。寻找将计费项目映射到实际系统组件的解决方案,找到花费最多的组件等
AWS 改进了其详细的成本使用报告并拥有 Cost Explorer API,但它仅将计费细分为服务或实例。但是,如果您寻找每个组件的成本是多少,那么每个实例的细分并不会带来太多价值。有什么 solutions/recommendations 吗?
成本分配标签
您可以创建一个标签,例如 "system" 或 "app",并将其应用于您的所有资源,并将值设置为您希望跟踪的不同 applications/systems/Components。然后您可以转到计费页面,单击 "Cost Allocation Tags" 并激活您创建的标签。
然后您可以看到按该标签的不同值细分的费用。它们将显示在 Cost Explorer 中,标签将是可用的过滤器之一。但是,我认为激活后需要 24 小时才能显示出来。
如果您确实需要强制使用标签,并且您有开发人员处理多个组件,则可以使用 IAM 角色来管理每个组件,每个角色仅限于与具有特定标签的资源进行交互(即他们只能修改具有该标签的现有资源,并且他们只能创建具有该标签的新资源)。开发人员可以拥有一个 IAM 用户(或者您可以联合身份,但这是完全不同的对话)并允许他们根据他们正在处理的组件承担不同的角色。这具有使跨账户管理更容易的额外好处。但是,它可能需要进行重要的 IAM 大修。
有关成本分配标签的更多信息:https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html
按 AWS 账户划分成本界限
要攻击不可标记的组件,例如数据 t运行sfer,您可以围绕成本边界构建您的帐户策略,并为每个成本筒仓设置一个单独的帐户(如果可行的话)。这可能会增加成本,因为您必须将系统分成特定的帐户(因此也分为特定的 EC2 实例)。
当你集中报告、监控、配置管理、日志分析等时。每个应用程序都会增加一点成本,但通常你只需要考虑集中化本身就是一个系统,并在它自己的。显然,您可以为每个系统分别进行监控、警报、报告、日志收集、配置管理等,但这将花费更多的总体成本(包括基础设施成本和工程时间)。因此,您必须优先考虑成本可见性与成本优化。
AWS 中仍然有很多功能可以连接来自不同账户的资源,并且在一个账户中拥有一个数据层,在另一个账户中拥有一个应用层并不困难(尽管这不是我的范例经常看到)。
自定义工具
也许以上对于您的环境来说是不完美的解决方案,您可以尽可能使用以上的方法,并编写脚本来估计更难以跟踪的事物的使用情况。对于带宽,如果您有自己的 EC2 实例 运行 作为转发代理或 NAT 网关,您可以编写一些出站数据 t运行sfer 帐户软件。如果您的 VPC 中的所有内容都有指向这些实例上的 ENI 的路由,那么您可以通过您选择的任何参数更好地跟踪出站 t运行sfer。这对我来说听起来确实有点脆弱,从网络的角度来看,在某些情况下这可能是站不住脚的,但这是一种可能性。
同样,对于 Cloudwatch 指标,您可以使用命名空间,我无法在 Cost Explorer 中找到任何关于通过 Cloudwatch 命名空间进行过滤的能力的参考,但可能很容易根据每个指标得出原始指标命名空间并估算每个命名空间的成本。然后,您可以按命名空间划分 Cloudwatch 中的组件。这可能会导致一些重复,这可能会导致更多的管理工作或成本增加,但这是获得更多 g运行 平均成本可见性的权衡。
Kubernetes
对于您的环境来说,这可能是天方夜谭,但值得一提。如果您 运行 使用 EKS 的集群或 EC2 上的自我管理集群,您可以利用该平台的强大功能,这将允许您配置基本级别的计算资源,将组件划分到命名空间并使用内置或第三方工具来获取每个命名空间(甚至每个工作负载)的使用统计信息。这更容易实施,因为您可以让开发人员访问特定的命名空间,并且离群值通常更明显。当您知道每个工作负载随时间使用的 CPU 和内存量时,您可以很好地估算各个组件的成本模式。
当然,您仍然会有 k8s 管理平面的成本,它将与您的所有其他 applications/systems 分开在一个成本桶中。
Istio 虽然无论如何都不是一项简单的技术,但它允许您收集有关数据出口的 g运行 数据量,您可以使用它来了解有多少数据 t运行sfer成本正在 运行 上升。
在每个命名空间中重复监控可能更容易,因为您已经必须在一定程度上将监控工作负载抽象到 运行 在 k8s 上。但是,这仍然会增加管理和总体成本,但可能比基础设施 (AWS) 层的孤岛要少。
总结
据我所知,要达到您在 AWS 中所需的 g运行通用性和控制级别的选项不多。为此目的所做的努力可能会增加总体成本和管理开销。 AWS 因其难以估算成本模型而臭名昭著。也许为您的工作负载考虑 AWS 以外的平台,这些平台可能会更好地了解组件成本。
也很难避免集中运行且每个系统的成本难以追踪的系统。其中包括日志管理、配置管理、身份验证系统、警报系统、监控系统等。通常,为所有工作负载集中这些功能更具成本效益且更易于管理,但单个应用程序的 TCO 变得困难。根据我的经验,大多数团队将其记为基础设施成本,并更多地通过计算、存储和 AWS 服务使用数据点来跟踪应用程序的成本。
我们一直在 运行 aws 上使用多层应用程序并使用各种 aws 服务,如 ECS、Lambda 和 RDS。寻找将计费项目映射到实际系统组件的解决方案,找到花费最多的组件等
AWS 改进了其详细的成本使用报告并拥有 Cost Explorer API,但它仅将计费细分为服务或实例。但是,如果您寻找每个组件的成本是多少,那么每个实例的细分并不会带来太多价值。有什么 solutions/recommendations 吗?
成本分配标签
您可以创建一个标签,例如 "system" 或 "app",并将其应用于您的所有资源,并将值设置为您希望跟踪的不同 applications/systems/Components。然后您可以转到计费页面,单击 "Cost Allocation Tags" 并激活您创建的标签。
然后您可以看到按该标签的不同值细分的费用。它们将显示在 Cost Explorer 中,标签将是可用的过滤器之一。但是,我认为激活后需要 24 小时才能显示出来。
如果您确实需要强制使用标签,并且您有开发人员处理多个组件,则可以使用 IAM 角色来管理每个组件,每个角色仅限于与具有特定标签的资源进行交互(即他们只能修改具有该标签的现有资源,并且他们只能创建具有该标签的新资源)。开发人员可以拥有一个 IAM 用户(或者您可以联合身份,但这是完全不同的对话)并允许他们根据他们正在处理的组件承担不同的角色。这具有使跨账户管理更容易的额外好处。但是,它可能需要进行重要的 IAM 大修。
有关成本分配标签的更多信息:https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html
按 AWS 账户划分成本界限
要攻击不可标记的组件,例如数据 t运行sfer,您可以围绕成本边界构建您的帐户策略,并为每个成本筒仓设置一个单独的帐户(如果可行的话)。这可能会增加成本,因为您必须将系统分成特定的帐户(因此也分为特定的 EC2 实例)。
当你集中报告、监控、配置管理、日志分析等时。每个应用程序都会增加一点成本,但通常你只需要考虑集中化本身就是一个系统,并在它自己的。显然,您可以为每个系统分别进行监控、警报、报告、日志收集、配置管理等,但这将花费更多的总体成本(包括基础设施成本和工程时间)。因此,您必须优先考虑成本可见性与成本优化。
AWS 中仍然有很多功能可以连接来自不同账户的资源,并且在一个账户中拥有一个数据层,在另一个账户中拥有一个应用层并不困难(尽管这不是我的范例经常看到)。
自定义工具
也许以上对于您的环境来说是不完美的解决方案,您可以尽可能使用以上的方法,并编写脚本来估计更难以跟踪的事物的使用情况。对于带宽,如果您有自己的 EC2 实例 运行 作为转发代理或 NAT 网关,您可以编写一些出站数据 t运行sfer 帐户软件。如果您的 VPC 中的所有内容都有指向这些实例上的 ENI 的路由,那么您可以通过您选择的任何参数更好地跟踪出站 t运行sfer。这对我来说听起来确实有点脆弱,从网络的角度来看,在某些情况下这可能是站不住脚的,但这是一种可能性。
同样,对于 Cloudwatch 指标,您可以使用命名空间,我无法在 Cost Explorer 中找到任何关于通过 Cloudwatch 命名空间进行过滤的能力的参考,但可能很容易根据每个指标得出原始指标命名空间并估算每个命名空间的成本。然后,您可以按命名空间划分 Cloudwatch 中的组件。这可能会导致一些重复,这可能会导致更多的管理工作或成本增加,但这是获得更多 g运行 平均成本可见性的权衡。
Kubernetes
对于您的环境来说,这可能是天方夜谭,但值得一提。如果您 运行 使用 EKS 的集群或 EC2 上的自我管理集群,您可以利用该平台的强大功能,这将允许您配置基本级别的计算资源,将组件划分到命名空间并使用内置或第三方工具来获取每个命名空间(甚至每个工作负载)的使用统计信息。这更容易实施,因为您可以让开发人员访问特定的命名空间,并且离群值通常更明显。当您知道每个工作负载随时间使用的 CPU 和内存量时,您可以很好地估算各个组件的成本模式。
当然,您仍然会有 k8s 管理平面的成本,它将与您的所有其他 applications/systems 分开在一个成本桶中。
Istio 虽然无论如何都不是一项简单的技术,但它允许您收集有关数据出口的 g运行 数据量,您可以使用它来了解有多少数据 t运行sfer成本正在 运行 上升。
在每个命名空间中重复监控可能更容易,因为您已经必须在一定程度上将监控工作负载抽象到 运行 在 k8s 上。但是,这仍然会增加管理和总体成本,但可能比基础设施 (AWS) 层的孤岛要少。
总结
据我所知,要达到您在 AWS 中所需的 g运行通用性和控制级别的选项不多。为此目的所做的努力可能会增加总体成本和管理开销。 AWS 因其难以估算成本模型而臭名昭著。也许为您的工作负载考虑 AWS 以外的平台,这些平台可能会更好地了解组件成本。
也很难避免集中运行且每个系统的成本难以追踪的系统。其中包括日志管理、配置管理、身份验证系统、警报系统、监控系统等。通常,为所有工作负载集中这些功能更具成本效益且更易于管理,但单个应用程序的 TCO 变得困难。根据我的经验,大多数团队将其记为基础设施成本,并更多地通过计算、存储和 AWS 服务使用数据点来跟踪应用程序的成本。