标签规范模板
| 标签键 | 示例值 | 用途 | 是否必填 |
|---|---|---|---|
| CostCenter | retail-ecommerce | 成本归属到业务线,对应财务成本中心 | 必填 |
| Environment | prod / staging / dev | 环境区分,非生产可做定时启停 | 必填 |
| Owner | owner@example.com | 责任人,异常时直接找到人 | 必填 |
| Application | order-service | 应用维度,看单个应用的总成本 | 必填 |
| Project | 2026-Q3-upgrade | 项目维度,用于项目预算核算 | 选填 |
| DataClass | confidential / internal | 数据分级,驱动加密与访问策略 | 敏感资源必填 |
| AutoShutdown | true / false | 驱动自动化启停,非生产默认 true | 选填 |
标签键区分大小写,务必统一规范。我们见过同一个组织里 CostCenter、costcenter、Cost-Center 三种写法并存。
可视化建设四步
-
01
定规范并对齐财务
标签键值必须和财务的成本中心口径一致,否则做出来的报表财务不认。
交付物:标签规范文档、财务口径确认单
1 周
-
02
存量资源补标
扫描全量资源,未打标的按归属推断后批量补齐。跑不通的走人工认领流程。
交付物:未打标资源清单、批量补标脚本、覆盖率报告
1-2 周
-
03
增量强制与自动化
SCP 或 Config 规则拦截未打标的创建行为,Lambda 自动补齐可推断的标签。
交付物:标签策略、自动打标 Lambda、违规告警
1 周
-
04
报表与看板
基于 CUR 建 Athena 表,QuickSight 出多维看板,按月自动推送给各负责人。
交付物:CUR 数据管道、成本看板、月度推送流程
1-2 周
CUR 成本分析 SQL
-- 基于 Cost and Usage Report 的业务线成本归因分析
-- 前置:CUR 已导出到 S3 并通过 Glue Crawler 建表
WITH monthly AS (
SELECT
DATE_TRUNC('month', line_item_usage_start_date) AS month,
COALESCE(NULLIF(resource_tags_user_cost_center, ''),
'__UNTAGGED__') AS cost_center,
COALESCE(NULLIF(resource_tags_user_environment, ''),
'__UNKNOWN__') AS env,
product_product_name AS service,
line_item_line_item_type AS item_type,
SUM(line_item_unblended_cost) AS unblended,
SUM(CASE WHEN line_item_line_item_type = 'SavingsPlanCoveredUsage'
THEN savings_plan_savings_plan_effective_cost
WHEN line_item_line_item_type = 'DiscountedUsage'
THEN reservation_effective_cost
ELSE line_item_unblended_cost END) AS amortized
FROM cur_database.cur_table
WHERE line_item_usage_start_date >= DATE_ADD('month', -6, CURRENT_DATE)
AND line_item_line_item_type NOT IN ('Tax', 'Refund', 'Credit')
GROUP BY 1, 2, 3, 4, 5
)
SELECT
month,
cost_center,
env,
ROUND(SUM(amortized), 2) AS amortized_cost,
ROUND(SUM(unblended), 2) AS unblended_cost,
-- 环比变化,用于识别异动
ROUND(SUM(amortized) - LAG(SUM(amortized)) OVER (
PARTITION BY cost_center, env ORDER BY month
), 2) AS mom_delta,
ROUND(100.0 * (SUM(amortized) - LAG(SUM(amortized)) OVER (
PARTITION BY cost_center, env ORDER BY month
)) / NULLIF(LAG(SUM(amortized)) OVER (
PARTITION BY cost_center, env ORDER BY month
), 0), 1) AS mom_pct
FROM monthly
GROUP BY month, cost_center, env
ORDER BY month DESC, amortized_cost DESC;
-- 未打标资源专项:这部分必须持续压缩到 5% 以内
SELECT
line_item_product_code AS service,
line_item_resource_id AS resource_id,
ROUND(SUM(line_item_unblended_cost), 2) AS cost_30d
FROM cur_database.cur_table
WHERE line_item_usage_start_date >= DATE_ADD('day', -30, CURRENT_DATE)
AND COALESCE(NULLIF(resource_tags_user_cost_center, ''), '') = ''
AND line_item_resource_id <> ''
GROUP BY 1, 2
HAVING SUM(line_item_unblended_cost) > 10
ORDER BY cost_30d DESC
LIMIT 100;
看成本要用 amortized(摊销)成本而不是 unblended,否则买 Savings Plans 那个月的账单会显得异常高。