已解决:帮助我们了解 FinOps 成熟度与 cloud cost 挑战
Source: Dev.to
TL;DR: 云成本超支源于可见性不足和缺乏所有权,典型表现为被遗忘的高成本实例。解决方案是采用多管齐下的 FinOps 方法,结合自动化清理脚本、主动的 policy‑as‑code 防护措施,以及向 showback 和 chargeback 的根本组织转变,以实现持续的财务问责。
核心建议
- 实现“Janitor”脚本(例如,AWS Lambda),自动识别并终止未打标签或被遗弃的云资源——一种被动的成本控制措施。
- 强制执行“Policy as Code”,使用 Sentinel、Open Policy Agent (OPA) 或 Service Control Policies (SCPs) 等工具,在 IaC 或 AWS 组织层面防止高成本或未打标签的资源创建。
- 通过 FinOps 实践推动组织变革,如 showback(展示团队特定的云支出)和 chargeback(将费用分配到团队预算),以培养财务所有权文化。
Source: …
问题
“在与失控的云成本和不成熟的 FinOps 实践作斗争?这份由高级 DevOps 工程师撰写的指南分解了云浪费的真实原因,并提供了三种具体解决方案,从快速脚本到永久性的文化转变,帮助你控制支出。”
我仍然记得财务部门在周一早上的 Slack 消息:
“Darian,你能解释一下这次 AWS 的激增吗?”
打开计费控制台,我的胃一下子沉了下来。一名开发者在周五下午启动了一台 p4d.24xlarge EC2 实例,用于对新机器学习模型进行“快速测试”,随后 忘记 了它。仅在一个周末,这台实例就产生了 五位数 的费用。
我们没有任何防护栏、警报或所有权策略。这是一次自由放任的环境,而我们却为此付费——真的。
这并不是个例。团队被交付了云王国的钥匙,拥有巨大的创新能力,却缺乏财务素养和防护措施来负责任地使用。这正是 FinOps 成熟度挑战的核心。关键不在于“省钱”,而在于 高效 与 可问责。
根本原因
| 问题 | 描述 |
|---|---|
| 缺乏可视性 | 工程师无法实时看到他们所配置基础设施的成本。terraform apply 并不显示价格标签。计费是一个抽象概念,往往要等到几周后才会处理。 |
| 缺乏所有权 | 当没有人对某个资源(例如 dev‑test‑data‑processing‑cluster‑04)直接负责时,就没有人有动力去关闭它。它就会变成“公司的基础设施”,成为一个共享问题。 |
解决方案不仅仅是找出僵尸服务器,更在于从根本上改变团队与云的交互方式。
方案 #1 – 反应式“止血” (清理脚本)
“这是一种反应式的‘止血’方法。你没有在根本上改变文化,但你阻止了眼前的浪费。”
我们构建了一个简单的 AWS Lambda 函数,由 EventBridge 每晚触发,完成以下工作:
- 扫描我们 dev 账户中的所有 EC2 实例和 RDS 数据库。
- 标记缺少 owner 标签或 TTL(生存时间)标签的资源。
- 向 Slack 频道发送警告,并标记创建者(如果可以通过 CloudTrail 识别)。
- 如果资源在 24 小时后仍未打标签,第二个 Lambda 将终止它。
结果: 严厉吗?是的。有效吗?绝对有效。
示例 Python(Boto3) – Lambda 清理器
import boto3
def find_untagged_instances(event, context):
ec2 = boto3.client('ec2', region_name='us-east-1')
instances = ec2.describe_instances(
Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]
)
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
tags = instance.get('Tags', [])
tag_keys = [tag['Key'] for tag in tags]
if 'owner' not in tag_keys:
print(f"ALERT: Instance {instance_id} is missing 'owner' tag.")
# In a real script, you'd post this to Slack or SNS
# and maybe add a "pending_termination" tag
警告: 这是一种权宜之计,而非长期策略。它能清理混乱,但并未教会任何人避免再次出现混乱。你将花时间维护脚本,并处理因“重要测试服务器”被终止而愤怒的开发者。可以用它来快速获得初步控制,但不要止步于此。
Source: …
解决方案 #2 – “左移”预防(Policy‑as‑Code)
“这就是所谓的‘左移’,从一开始就防止问题的发生。与其事后清理混乱,不如让它们根本不可能出现。”
核心原则
将成本控制直接嵌入到你的 IaC 流水线和云账户结构中。
使用 IaC 策略进行强制标签
- 工具: Sentinel(Terraform Cloud)、集成到 CI/CD 的 OPA。
- 策略示例: 如果资源缺少
owner标签,或 S3 存储桶缺少生命周期策略,则使terraform plan失败。 - 结果: 开发者在任何内容部署 之前 就能收到即时反馈。
服务控制策略(SCP)
在 AWS 组织 级别对开发者账户应用 SCP。SCP 类似于“强化版 IAM 策略”,可以让你 拒绝 创建特定实例系列。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyExpensiveInstanceTypesInDev",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:InstanceType": [
"p4d.24xlarge",
"g5.12xlarge",
"g5.24xlarge"
]
}
}
}
]
}
- 使用场景: 在任何非指定 “ML Research” 组织单元(OU)的账户中,阻止所有
p4、g5等实例类型的创建。
方案 #3 – 组织变革(FinOps 实践)
“通过 FinOps 实践(如 ‘showback’ 和 ‘chargeback’)推动‘组织变革’,培养财务所有权文化。”
实施步骤
- Showback – 发布每周/每月仪表盘,按团队、项目或标签拆分云费用。
- Chargeback – 将实际成本分配到各团队预算,使超支直接由团队负责。
- FinOps Council – 组建跨职能小组(工程、财务、产品),审查支出、制定预算并完善政策。
- 教育与培训 – 定期开展云定价、成本效益架构模式和标签标准的研讨会。
预期收益
| 收益 | 描述 |
|---|---|
| 透明度 | 团队能够几乎实时看到其决策的财务影响。 |
| 问责制 | 明确所有权;激励团队进行优化。 |
| 持续改进 | 通过定期审查发现新的浪费模式并推动政策更新。 |
综合运用
| 阶段 | 操作 | 负责人 |
|---|---|---|
| 1️⃣ 响应式 | 部署 Lambda 清理程序 + Slack 警报。 | 云运维 / SRE |
| 2️⃣ 预防式 | 实施 Sentinel/OPA 策略和 SCP。 | 平台工程 |
| 3️⃣ 文化层面 | 推出展示/费用回收仪表盘,组建 FinOps 委员会,开展培训。 | 财务 + 工程领导层 |
底线: 先从快速获胜(清理脚本)入手,阻止眼前的浪费;随后通过策略即代码锁定资源供应;最后将财务责任嵌入组织基因。这个三层方法让你从“灭火”转向“财务智能的云工程”。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:InstanceType": [
"p4d.*",
"p3.*",
"g5.*",
"x2iezn.*",
"u-12tb1.metal"
]
}
}
}
]
}
方法概览
| 方法 | 工作量 | 实施时间 | 长期影响 |
|---|---|---|---|
| 1. 清理脚本 | 低 | 天 | 低(响应式) |
| 2. 策略与防护栏 | 中 | 周 | 高(主动) |
| 3. 组织变革 | 高 | 月/季度 | 变革性 |
最终,成熟的 FinOps 实践会结合以上三者:
- 清理脚本 用于处理遗漏的资源。
- 防护栏 用于防止大多数问题。
- 文化所有权 使每个人都成为云资源的负责管家。
停止追逐意外账单,开始构建一个让财务责任成为最小阻力路径的平台。
👉 阅读原文于 TechResolve.blog
☕ 支持我的工作 – 如果本文对您有帮助,您可以请我喝咖啡:👉