4.17 云成本优化——FinOps 实践与 Spot Instance 策略

预计阅读时间:20 分钟

📖 目录

4.15:Terraform 入门 介绍了 Terraform 管理云资源,6.10:云网络基础 讲了云网络基础。但上云之后,成本控制同样重要——云账单是持续支出。FinOps(Cloud Financial Operations)是一套将财务责任引入云支出决策的实践框架。

学习目标

学完本章,你将能够:

  • 理解 FinOps 三阶段循环(Inform / Optimize / Operate)的核心思想
  • 掌握资源标签规范与成本分摊、预算告警的落地方法
  • 掌握资源右配(Right-Sizing)的识别手段与定时开关机自动化
  • 理解 Spot Instance 的定价机制、适用场景与回收风险
  • 掌握预留实例与混合计费策略的选购方法
  • 理解"先建立可见性、再优化支出"的治理顺序

前置知识

FinOps 框架

FinOps 基金会定义的三个阶段循环:

阶段核心活动指标
Inform(可见)成本分配、预算告警、单位成本分析总支出、按团队/项目分配
Optimize(优化)资源右配、预留实例、Spot 使用利用率、节省金额
Operate(运营)自动化策略、持续改进成本偏差、预测准确率

1. 成本可见性——先看清钱花在哪

# 阿里云:通过费用中心查看账单
# 按实例、项目、标签维度分析支出

# AWS:Cost Explorer + Cost Allocation Tags
# 启用标签后,按 team/project/env 维度汇总

# 资源标签规范(推荐)
Environment: production | staging | dev
Team: backend | frontend | data
Project: order-service | user-service
CostCenter: engineering
标签是成本分配的基础 所有云资源必须打标签。没有标签的资源 = 不知道谁花了钱 = 无法优化。建议在 Terraform 中用 default_tags 强制统一标签。

成本分摊模型

标签解决"谁拥有",分摊模型解决"钱怎么算"。三种常见模型:

模型原理优点缺点适用
直接分摊资源费用 100% 计入拥有团队清晰无争议共享资源无人认领应用服务器、专有数据库
比例分摊按用量/流量占比拆分共享成本共享成本可追溯拆分规则需持续维护共享 K8s 集群、NAT 网关
阶梯分摊基础量计入平台池,超额计入使用方激励节省,平台责任明确规则较复杂大数据 / ML 算力池

云厂商成本分析工具

# AWS Cost Explorer API:按标签维度拉取月度成本
aws ce get-cost-and-usage \
  --time-period Start=2026-06-01,End=2026-07-01 \
  --granularity MONTHLY \
  --metrics "UnblendedCost" \
  --group-by Type=TAG,Key=Team

# 阿里云账单 API:按实例与标签维度查询
aliyun bssopenapi QueryInstanceBill \
  --BillingCycle 2026-06 --Granularity Monthly \
  --ProductCode ecs

# 腾讯云:DescribeBillDetailByUin 账单明细接口
# 建议将多云账单统一导入 ClickHouse / Grafana 成本面板,
# 用同一套 SQL 做跨云对账,避免在每家控制台反复下钻。

成本归因:从账单到责任人

账单明细是「资源」视角,归属需要「责任人」视角。三级归因把两者串起来:

  1. 资源 → 团队:靠 env / project / team 标签,先定位到哪个团队的资源
  2. 团队 → 服务:project 标签对应到具体服务与负责人(owner)
  3. 服务 → 用途:结合创建人、创建时间与用量日志确认是生产负载还是临时实验

每一级都能被脚本自动查证(标签 API + 实例元数据),第三级通常需要人工确认——所以归因链路的终点不是数据库,而是负责人的承诺。

多云成本看板

# 每周把三家云账单导入 ClickHouse 统一表结构:
# bill_date / cloud / product / team / env / project / amount_cny
# 用一套 SQL 做跨云对比与异常检测:
SELECT team, SUM(amount_cny) FROM bills
WHERE bill_date >= today() - 30 GROUP BY team ORDER BY 2 DESC;

# 异常检测:环比突增 > 20% 的产品自动打标进告警队列
SELECT product, SUM(amount_cny) AS cur
FROM bills WHERE bill_date >= today() - 7
GROUP BY product HAVING cur > 1.2 * (
  SELECT SUM(amount_cny) FROM bills
  WHERE bill_date BETWEEN today() - 14 AND today() - 7);
# Grafana 画月度趋势 + 单位成本线,周会直接打开看板讲数据

标签策略实战

标签规范必须先行定义并强制注入,否则三个月后账单又变回一团乱麻。以下是一套可以直接照抄的规范:

标签命名规范

标签键取值示例用途必填
envprod / staging / dev区分环境,支撑分环境预算与定时开关机
projectorder-service / user-service项目级成本归集与产品对账
teambackend / frontend / data团队责任归属与分摊口径
ownerzhangwei个人责任人与告警接收人
cost-centereng / marketing / finance财务核算科目选填
ttl2026-12-31临时资源到期自动回收日期选填

强制标签策略

# Terraform 层:default_tags 兜底,新资源自动注入
provider "aws" {
  region = "ap-southeast-1"
  default_tags {
    tags = {
      env     = "dev"
      team    = "backend"
      project = "order-service"
      owner   = "zhangwei"
    }
  }
}

# 平台层:AWS Organizations SCP / Config 规则、阿里云标签策略
# 组织策略禁止创建"未带必填标签"的资源(标签自动继承)
# 事后再加一道扫描兜底(见下节)

未打标资源治理

  • 识别——用云平台"未标记资源"报告 + 脚本定期扫描(AWS Resource Groups Tagging API、阿里云 TagResources 接口),生成未打标资源清单。
  • 追责——按资源类型分组派给对应团队限期 3 天补标;到期未补且无归属的,费用计入公共池并在月度复盘中点名。
  • 清理——超过 30 天仍无人认领的资源(孤立 EIP、未挂载云盘、空闲 NAT 网关)直接回收,这部分往往是账单里的隐形漏洞。
# 未打标资源扫描(AWS:拉取全部资源再与已打标清单对比)
aws resourcegroupstaggingapi get-resources --no-include-compliance-details \
  | jq -r '.ResourceTagMappingList[].ResourceARN' > /tmp/all.txt
aws resourcegroupstaggingapi get-resources \
  --tag-filters Key=team,Values=backend \
  | jq -r '.ResourceTagMappingList[].ResourceARN' > /tmp/tagged.txt
comm -23 <(sort /tmp/all.txt) <(sort /tmp/tagged.txt)

账单分析案例

案例一:某月账单突增 40% 的排查过程

背景:6 月账单环比增长 40%,财务要求 3 天内定位原因。按"总 → 分"逐层下钻:

# 第 1 步:按服务下钻,找出增长最多的产品
aws ce get-cost-and-usage \
  --time-period Start=2026-06-01,End=2026-06-30 \
  --granularity MONTHLY --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=SERVICE

# 第 2 步:锁定 EC2 后按 region 下钻
aws ce get-cost-and-usage \
  --time-period Start=2026-06-01,End=2026-06-30 \
  --granularity MONTHLY --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=REGION \
  --filter '{"Dimensions":{"Key":"SERVICE","Values":["Amazon EC2"]}}'

定位过程:EC2 增长 62% → 集中在 ap-southeast-1 → 按实例 ID 核对用量,发现一台 8C32G 实例自 6 月 10 日起 24x7 运行。该实例未打 owner 标签,账单系统无法自动定位归属,最终靠资源创建人联系方式找到使用者。

根因:数据分析师手动在控制台创建实例做临时实验后忘记删除;实例没有 ttl 标签,自动化回收任务将其视为正常资源跳过。修复:立即删除实例,补上"手动创建资源必须携带 ttl"的规范;为所有临时资源设置到期自动回收。复盘:新增"资源创建 24 小时内未打全必填标签"自动告警。

案例二:跨区域流量费异常

现象:某月 NAT 网关与跨区域流量费突增 25%,业务方确认没有发布新功能。

  • 按产品对比:VPC 内网流量正常,NAT 网关出口流量异常 → 锁定出口方向。
  • 结合 VPC Flow Logs 按目的 IP 聚合:大量流量指向某云厂商对象存储域名,单日超过 200GB。
  • 根因:开发环境一个数据同步脚本写死了生产环境备份桶地址,并开启递归下载,把生产备份反复同步到开发区域,产生大量跨区域流量费。
  • 修复:修正脚本配置、限制开发环境出网白名单。复盘:为跨区域与出网流量单独设预算,异常波动 3 天内必须排查。

案例三:云盘费用翻倍

现象:块存储账单翻倍,业务无感知。下钻发现大量"孤盘"——实例已删除但云盘未随删。根因:开发同学手动删除 ECS 实例时未勾选"同时释放云盘",一个月内反复创建/删除实例,留下 47 块 100GB SSD 云盘空转计费。修复:一键清理孤盘,并在 Terraform 中设置 delete_with_instance = true(或 delete_on_termination);复盘:定期拉取"未挂载云盘"报告自动回收。

账单分析的通用套路

无论哪种异常,都按「总 → 分 → 定位 → 修复 → 复盘」五步走,前两步用 API 下钻,后三步靠流程:

# 1. 总:月度环比对比,定位异常产品与区域(见案例一)
# 2. 分:按标签 / 实例 ID 拆分到具体资源
# 3. 定位:核对资源创建时间、owner 标签、运行时长与用量日志
# 4. 修复:删资源 / 改配置 / 加规范,并补上自动化兜底
# 5. 复盘:把新规则写进标签规范与告警配置,防止复发
# 关键:异常必须在 3 天内定位——账单数据 T+1~T+3 才出账,
# 拖过一周再追,创建者自己都想不起来这资源是干嘛的

2. 资源右配(Right-Sizing)

最常见的浪费:实例规格过大、磁盘过大、带宽闲置。

场景问题优化
开发环境24x7 运行的 8C16G 实例用 Schedule 脚本工作时间开机
数据库4C8G 实例 CPU 利用率 < 10%降配到 2C4G
磁盘500GB SSD,使用 30GB缩容或换 HDD
带宽100Mbps 固定,峰值 10Mbps换按量计费
# 阿里云:通过 Terraform 自动化定时开关机
# 开发环境实例:工作日 9:00-20:00 开机
resource "alicloud_cms_rule" "dev_schedule" {
  rule_name   = "dev-instance-schedule"
  group_id    = alicloud_cms_group.default.id
  rule_targets {
    json_expression = <

3. Spot Instance(竞价实例)

Spot Instance 是云厂商用闲置资源以折扣价出售的实例,价格通常是按需价的 10%-30%。适合无状态、可中断、容错性好的工作负载。

适用不适用
K8s 工作节点(Pod 可被驱逐)数据库主节点
CI/CD Runner(构建可重试)单点服务
批处理任务(可中断重跑)需要持续运行的 API 服务
开发/测试环境生产核心链路
# K8s Spot 节点池配置(阿里云 ACK)
apiVersion: v1
kind: NodePool
metadata:
  name: spot-pool
spec:
  instanceTypes: ["ecs.g7.2xlarge", "ecs.g7.xlarge"]
  scalingConfig:
    minSize: 0
    maxSize: 10
    desiredSize: 3
  labels:
    node-type: spot
  taints:
  - key: spot
    value: "true"
    effect: NoSchedule
---
# 工作负载容忍 Spot 节点
apiVersion: apps/v1
kind: Deployment
metadata:
  name: batch-worker
spec:
  template:
    spec:
      tolerations:
      - key: spot
        operator: Equal
        value: "true"
        effect: NoSchedule
      nodeSelector:
        node-type: spot

Spot 回收应对:被回收不是事故

Spot 的意义在于「便宜但可能被回收」。回收前云平台会提前通知(AWS 约 2 分钟、阿里云约 5 分钟),应用只需回答一个问题:收到通知后能否在时限内优雅退出?

# K8s 侧三条防线:
# 1. PDB:保证回收时存活副本数不低于底线
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: batch-worker-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: batch-worker

# 2. 节点打污点 + topologySpreadConstraints 分散副本,避免单节点故障全灭
# 3. 工作负载监听 SIGTERM 优雅退出:批处理任务记录 checkpoint,
#    重启后从断点续跑——这是「可重试」的真正含义
测试回收 不要等真实回收才验证。定期手动删除一个 Spot 节点,观察应用是否在时限内完成优雅退出——这本身就是一个最廉价的混沌实验。

4. 预留实例与节省计划

类型折扣承诺适合
包年包月30-50%1-3 年确定长期运行的核心服务
预留实例20-40%1 年稳定工作负载
节省计划15-30%1-3 年灵活实例类型
按量0%临时/弹性负载
承诺风险 预留/节省计划意味着 1-3 年的财务承诺。业务变化大时不要锁定长期合约。建议核心负载(数据库、核心 API)用预留,弹性负载用按量 + Spot。

5. 自动化成本治理

# 成本告警脚本(阿里云账单 API)
#!/bin/bash
# 每月 1 号检查上月支出
COST=$(aliyun bssopenapi QueryBill --BillingCycle 2026-01 \
  | jq -r '.Data.OutstandingAmount')

if (( $(echo "$COST > 5000" | bc -l) )); then
    echo "上月云支出 $COST 元,超过预算 5000 元" | \
      curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=xxx" \
      -H 'Content-Type: application/json' \
      -d '{"msgtype":"text","text":{"content":"'"告警:云支出 $COST 元"'"}'
fi

开发环境定时开关机

# cron + 云 API:工作日 9 点开机、20 点关机(阿里云)
0 9 * * 1-5  ali sh ecs StartInstance --InstanceId i-xxx
0 20 * * 1-5 ali sh ecs StopInstance --InstanceId i-xxx
# AWS 版:aws ec2 start-instances / stop-instances

# 更稳的做法:按标签批量操作,新实例自动纳入,不用维护实例清单
aliyun ecs DescribeInstances --Tag key=env,value=dev \
  | jq -r '.Instances.Instance[].InstanceId' | while read id; do
    aliyun ecs StopInstance --InstanceId $id
  done
# 批量停 20 台以上实例前先发群通知,防止误停有人正在用的

闲置资源回收 runbook

# 每周巡检四项,发现即回收(先发群通知,24 小时无人认领再执行):
# 0. 先导出本月全量资源清单,与上月的 diff 找出新增资源
# 1. 孤立 EIP / 弹性公网 IP:未绑定实例的按小时计费
aliyun ecs DescribeEipAddresses --Status Available \
  | jq -r '.EipAddresses.EipAddress[].AllocationId' \
  | xargs -r -I{} aliyun ecs ReleaseEipAddress --AllocationId {}

# 2. 未挂载云盘:删除实例未随删的孤盘
# 3. 空闲 NAT 网关 / SLB:7 天无流量(看监控指标)即回收
# 4. 未使用快照:超过 180 天的重复快照按策略删除
# 5. 回收后更新资源台账,月度汇总「自动化回收总节省」

# 巡检脚本放入 cron + 告警:每周一 9 点自动跑,
# 产出「待回收清单 + 预估节省金额」推到群,确认后执行

回收原则:先通知、再回收、后复盘。任何回收动作前 24 小时发群通知并附预估节省金额;回收后记录实际节省,月度复盘汇总自动化回收的总节省——这是治理效果最直观的证明。

进阶优化手段

RI / Spot / 按需混合策略

负载类型建议组合理由
核心数据库、网关预留 100%必须稳定,锁定最大折扣
K8s 在线服务节点按需 60% + 预留 40%保留兜底容量,防止 Spot 回收引发雪崩
CI/CD、批处理Spot 80% + 按需 20%任务可重试,Spot 优先
开发测试按需 + 定时开关机弹性最大,不做长期承诺

Karpenter 与 Cluster Autoscaler

集群按需扩缩容能直接消除空闲节点成本:Cluster Autoscaler 以"存在 Pending Pod"为信号增减节点;Karpenter 更进一步,按 Pod 实际资源请求直接选择最便宜的实例,原生支持 Spot 混合与碎片整理。

# Cluster Autoscaler:配合 HPA,按负载水平扩缩
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-server
spec:
  minReplicas: 2
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-server

# Karpenter:NodePool 声明可用实例类型与预算
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      requirements:
      - key: karpenter.sh/capacity-type
        operator: In
        values: ["spot", "on-demand"]
      - key: node.kubernetes.io/instance-type
        operator: In
        values: ["m6i.large", "m6i.xlarge", "c6i.large"]
  disruption:
    consolidationPolicy: WhenUnderutilized
    expireAfter: 720h

存储分层(S3 / OSS 生命周期)

# S3 生命周期:日志 30 天转低频、90 天转归档、临时目录 7 天删除
aws s3api put-bucket-lifecycle-configuration --bucket my-app-data \
  --lifecycle-configuration '{
    "Rules": [
      {"ID": "tier-logs", "Status": "Enabled",
       "Filter": {"Prefix": "logs/"},
       "Transitions": [
         {"Days": 30, "StorageClass": "STANDARD_IA"},
         {"Days": 90, "StorageClass": "GLACIER"}]},
      {"ID": "expire-tmp", "Status": "Enabled",
       "Filter": {"Prefix": "tmp/"},
       "Expiration": {"Days": 7}}
    ]}'

# 阿里云 OSS:控制台"生命周期管理"或 ossutil 配置
ossutil lifecycle --method put oss://my-bucket --config lifecycle.xml

日志类数据通常占对象存储费用的 60% 以上:按"30 天转低频、90 天转归档、180 天删除"落地,存储成本可下降 70-80%。

6. 单位成本(Unit Economics)

总成本会随业务增长自然上升,只有「单位成本」才能衡量优化是否真实有效——成本涨幅是否跑赢业务涨幅:

业务指标单位成本定义观察方式
电商每笔订单的基础设施成本月成本 / 订单量
API 服务每百万请求成本月成本 / 请求数
数据分析每 TB 处理成本算力成本 / 处理数据量
SaaS 租户每活跃租户成本月成本 / 活跃租户数
# 用 Cost Explorer 数据 + 业务表 JOIN 生成单位成本曲线
# 月成本(按 product/team 标签汇总)÷ 当月业务量(从业务库导出)
# 单位成本环比下降 → 优化有效;持平或上升 → 成本增速跑赢业务,立即复盘
# 建议把单位成本做成月度看板并写入周会,比绝对金额更能推动决策

FinOps 组织实践

FinOps 不是财务部门单方面的事,而是财务、技术、产品三方协作的持续流程。以下是可落地的组织运转方式:

责任矩阵

阶段财务技术产品
Inform出账、分摊规则、预算发布标签注入、账单数据接入与清洗确认业务归属与成本负责人
Optimize测算节省收益、审核承诺采购右配、Spot、预留、架构优化评估优化动作对业务的影响
Operate月度复盘、偏差报告告警自动化、回收执行需求变更前同步成本影响

例会节奏

  • 每日(自动)——未打标资源、预算超支 120%、环比突增超过 20% 的异常自动推送到钉钉/企微群,无需人工开会。
  • 每周——15 分钟站会:只过 Top 5 变化项与待办,技术侧汇报优化进度。
  • 每月——成本复盘会:按团队/项目出趋势图,识别异常,确定下月优化目标并写入团队 OKR。
  • 每季度——预留实例/节省计划利用率审查,决定续购或释放;同时检讨分摊模型是否仍然合理。

预算与告警机制

# 预算基线:历史 3 个月平均支出 +20% 作为预算上限
# 告警分级:
#   一级 90% 预算  → 通知团队负责人
#   二级 100%     → 通知财务与 CTO
#   三级 120%     → 自动执行降级动作(暂停开发环境、Spot 缩容)

# AWS Budgets 示例:月度 5 万美元预算,90% 触发邮件告警
aws budgets create-budget \
  --account-id 123456789012 \
  --budget '{"BudgetName":"monthly-cost",
             "BudgetLimit":{"Amount":"50000","Unit":"USD"},
             "TimeUnit":"MONTHLY","BudgetType":"COST"}' \
  --notifications-with-subscribers \
  '[{"Notification":{"ComparisonOperator":"GREATER_THAN",
      "Threshold":90,"NotificationType":"ACTUAL"},
     "Subscribers":[{"Address":"finops@example.com",
      "SubscriptionType":"EMAIL"}]}]'

# 阿里云:费用中心"预算管理"同样支持按百分比分级通知

常见错误

  1. 资源未打标签导致无法分摊成本:部分云资源(如 ELB、NAT 网关)创建时未打标签,月底账单无法归属到团队。解决:在 Terraform 中用 default_tags 强制统一标签,定期用云平台的"未标记资源"报告清理遗漏。
  2. Spot 实例频繁被回收导致服务中断:将有状态服务(如数据库)部署在 Spot 节点上。排查:检查云平台的回收通知,确认工作负载是否真正无状态;对核心服务使用按量或预留实例,Spot 仅用于可中断的批处理任务。
  3. 预留实例到期后费用飙升:忘记续费或业务缩减后预留实例闲置。排查:设置到期前 30 天告警,定期审查预留实例利用率,利用率低于 60% 的考虑在到期后切换为按量。
  4. 开发环境 24x7 运行浪费严重:开发/测试实例未设置定时开关机,下班和周末持续计费。排查:用云平台的"实例运行时长"报告识别高时长实例,配置 Terraform 或云监控定时任务在非工作时间自动关机。
  5. 成本告警阈值设置不合理:告警过于频繁导致"狼来了"效应,或过于宽松导致超支未发现。解决:按历史支出的 120% 设置一级告警,150% 设置二级告警并自动通知负责人,避免无效告警。
  6. 单位成本没有业务量分母:只看绝对金额,业务增长 30% 时成本增长 20% 会被误判为「控制住了」。必须把成本除以业务指标(订单/请求/租户数)再环比。
  7. Spot 回收前未做优雅退出演练:批处理任务没有 checkpoint,节点回收时任务从头重跑,Spot 节省的成本被重跑算力吃掉。定期手动回收节点验证。

最佳实践

  1. 标签规范先行:在创建任何云资源之前定义标签规范(Environment、Team、Project、CostCenter),并在 Terraform provider 块中用 default_tags 强制注入,从源头杜绝遗漏。
  2. 混合计费策略:核心稳定负载(数据库、API 网关)用预留/包年包月锁定折扣,弹性负载(CI/CD、批处理)用按量 + Spot 组合,开发环境用定时开关机。不要"一刀切"全用按量或全用预留。
  3. 定期做成本复盘:每月召开 FinOps 会议,拉出按团队/项目的成本趋势图,识别异常增长。将成本指标纳入团队 OKR,让"省钱"成为每个人的责任而不是财务部门的事。
  4. 自动化治理:用脚本或云平台原生工具实现:未标记资源自动告警、闲置资源自动回收、预算超支自动暂停非核心服务。减少人工干预,避免"知道该省但没人做"。
  5. 先看见,再优化:不要跳过 Inform 阶段直接砍资源。先花 2-4 周建立完整的成本可见性(标签、分账、告警),再基于数据做优化决策,否则可能误砍关键资源。
  6. 按标签批量治理:所有运维动作(关机、扩容、扫描)都按标签执行而非维护实例清单——实例是流动的,标签是稳定的。
  7. 单位成本进周报:把单位成本做成月度看板并写入周会,比绝对金额更能推动优化决策。
  8. 回收先通知再执行:任何闲置资源回收前 24 小时发群通知并附预估节省金额,无人认领再执行——回收是治理手段,不是惊喜。

练习题

  1. 用 Terraform 为你的云项目编写一个标签检查脚本:扫描所有 ECS 实例,输出未打 TeamProject 标签的实例列表,并生成 CSV 报告。
  2. 设计一个 Spot + 按量混合的 K8s 节点池方案:编写 YAML 配置,要求批处理任务(batch-worker)调度到 Spot 节点,API 服务(api-server)调度到按量节点,并配置相应的污点容忍和节点选择器。
  3. 编写一个成本告警脚本,每天检查云账户余额,当余额低于 1000 元时发送钉钉告警,低于 500 元时自动停止所有非生产环境实例。思考:如何避免误停生产环境?
  4. 给你的业务算一次单位成本:定义合适的业务指标(订单/请求/租户),画出最近 6 个月的单位成本曲线,找出成本增速跑赢业务增速的月份并归因。
  5. 写一个「Spot 回收演练」脚本:手动终止一台 Spot 节点,记录批处理任务的断点恢复行为,输出一份演练报告。
  6. 模拟一次账单突增排查:人为创建一台无标签实例并制造跨区域流量,用账单 API 从产品 → 区域 → 实例 ID 逐层下钻定位它,记录每一步耗时。

本章总结

FinOps 的核心是把云成本责任带回每个团队:先用标签与分账建立完整可见性,再通过右配、Spot 与预留实例的组合优化支出。优化决策必须基于数据,并配合预算告警、定期复盘与自动化治理持续运营。

延伸阅读

↑ 回到顶部