关于 azure-cost-calculator
azure-cost-calculator 是用于估算 Azure 架构成本的技能,依据实时 Retail Prices API 数据定价。它引导用户补充必要参数,并完成服务查询、成本计算与结果整理。
主要功能
- 01查询实时 Azure Retail Prices API
- 02按环境选择 Bash 或 PowerShell
- 03澄清估算所缺参数
- 04查找服务资料并处理依赖
- 05计算成本并核验算术
- 06整理月度成本明细
适用场景
- 01估算指定 Azure 架构的月度成本
- 02找出缺失的资源规格或用量
- 03变更区域或服务后更新估算
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ahmadabdalla/ azure-cost-calculator --skill azure-cost-calculator安装后在 Claude Code 中输入/azure-cost-calculator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/pitfalls.mdregions-and-currencies.mdreserved-instances.mdservice-routing.mdreferences/examples/3-tier-web-app.mddata-analytics-platform.mdenterprise-datacenter-migration.mdevent-driven-serverless.mdsecurity-observability-platform.mdreferences/services/ai-ml/ai-content-understanding.mdai-services.mdbot-service.mdcontent-safety.mddiscovery.mddocument-intelligence.mdfoundry-agents.mdgenomics.mdlanguage.mdmachine-learning-studio.mdmachine-learning.mdopenai-service.mdspeech.mdtranslator.mdvideo-indexer.mdvision.mdreferences/services/analytics/analysis-services.mddata-explorer.mddata-factory.mddatabricks.mdfabric.md详细介绍
Azure 成本计算器
使用公开的 Retail Prices API 进行确定性的 Azure 成本估算。绝不猜测价格;始终通过脚本查询实时 API。
运行时检测
根据可用情况选择脚本运行时:
| 运行时 | 条件 | 定价脚本 | 探索脚本 |
|---|---|---|---|
| Bash(首选) | curl 和 jq 可用 | scripts/get-azure-pricing.sh | scripts/explore-azure-pricing.sh |
| PowerShell 7+ | pwsh 可用 | scripts/Get-AzurePricing.ps1 | scripts/Explore-AzurePricing.ps1 |
| Windows PowerShell 5.1 | powershell.exe 可用(仅限 Windows)。需要 -ExecutionPolicy RemoteSigned(参见关键规则 6)。 | scripts/Get-AzurePricing.ps1 | scripts/Explore-AzurePricing.ps1 |
两者都会生成完全相同的 JSON 输出。Bash 标志使用与 PowerShell -PascalCase 参数对应的 --kebab-case 格式(例如,-ServiceName → --service-name)。
声明式参数
服务参考文件以 Key: Value 键值对的形式指定查询参数。请将其转换为 Bash --kebab-case 或 PowerShell -PascalCase 标志;包含空格的字符串值需加引号。完整的参数表、转换示例和输出格式请参阅 workflow.md。
工作流
阶段 1:分析(不查询 API)
-
解析:从用户的架构中提取资源类型、数量和规格
-
澄清:如果符合以下任一情况,请暂停并先询问:
- 资源对应某个类别,但未指定具体服务(例如“一个数据库”)→ 列出 2–4 个选项
- 资源未提供数量、规格/层级或工作负载规模 → 询问具体信息
- 资源未提供预期月用量:传输/摄取的数据量(GB)、事务数、请求数、消息数、token 数或用户/设备数 → 询问预计用量
- 多模型或多功能服务(例如 Azure OpenAI、AI Services、Defender for Cloud)未指定模型或功能变体 → 询问具体选项(成本可能相差 15–30 倍)
- 用户描述了目标,但未说明托管模式(例如“一个 Web 应用”)→ 提供 2–3 个选项并说明利弊
- 将所有缺失项合并到一次提问中。提供具体且合理的选项(例如“每月 100 GB?”、“GPT-4o 还是 GPT-4o-mini?”)。最多询问一轮;如果用户拒绝提供某个参数,仅对安全默认值类缺失项应用安全默认值,并披露这些默认值;如果仍有任何绝不可假设类缺失项,则不要继续;说明缺少哪些输入,因此无法估算。
-
定位:按照 shared.md 中的查找工作流定位每项服务;执行 glob
services/**/*<keyword>*.md;如果结果为 0 个或不明确(匹配多个),则在 service-routing.md 中 grep 名称/别名,并打开匹配行中嵌入的路径 -
读取匹配的服务文件;检查
billingNeeds并遵循依赖链(例如 AKS → VM → Managed Disks) -
分类:按照 shared.md 中的消歧协议对每个参数分类:
- 已指定:用户已提供值(原样使用)
- 绝不可假设的缺失项:缺少必填参数(必须询问)
- 安全默认值类缺失项:缺少可选参数(使用默认值并披露)
-
规格审查:提供摘要:
服务 已指定 缺失(将询问) 默认值(将采用) - 如果缺少任何绝不可假设的参数 → 继续前先询问用户
- 如果仅剩安全默认值类缺失项 → 披露默认值并继续执行阶段 2
- 单服务捷径:对于所有参数均已指定的单服务估算,跳过此规格审查表;仍需提供阶段 2 的假设说明块
阶段 2:估算
- 查询:使用服务文件中的参数、用户输入和已确定的默认值,为每项服务运行定价脚本
- 计算:应用服务文件中的成本公式;乘以数量
- 核验算术:对于每个明细项,使用实际数字重述公式、计算并确认结果。如果任何中间计算涉及两个都大于 10 的数相乘,则分步计算(例如
14.5 × 640 → 14 × 640 → 10 × 640 = 6,400;4 × 640 = 2,560;小计 = 8,960;0.5 × 640 = 320;总计 = 9,280)。多位数运算不要依赖心算。 - 呈现:按以下格式输出估算结果:
- 假设说明块(参见 shared.md 中的消歧协议),列在成本数字之前
- 明细项:服务、单价、数量/小时数、月成本
- 总计:独立重新汇总所有明细项的月成本;如果结果不一致,采用重新汇总后的数值
估算后的迭代
呈现估算结果后,用户可能会要求更改(切换区域、添加 RI、调整实例规格、添加/移除服务)。只重新运行受影响的查询;不要从头开始整个工作流。
参考索引(按需加载)
| 条件 | 阅读 |
|---|---|
| 始终(入口) | references/shared.md:常量、类别索引、别名查找 |
| 查询返回 0 条结果或错误数据 | references/pitfalls.md:故障排查和注意事项 |
| 用户询问预留实例或节省计划 | references/reserved-instances.md |
| 使用非 USD 货币或非 eastus 区域 | references/regions-and-currencies.md |
| 用户请求私有终结点或私有访问;向用户确认 PE 意图 | references/services/networking/private-link.md:PE 定价,references/services/networking/private-dns.md:DNS 区域定价 |
| 文件搜索返回 0 条或有歧义的结果 | references/service-routing.md:搜索名称或别名,并打开匹配行中嵌入的路径;不要完整读取 |
| 首次运行脚本或不熟悉参数 | references/workflow.md:脚本参数和输出格式 |
关键规则
- 绝不猜测价格:始终针对实时 API 运行脚本
- 根据用户上下文推断货币和区域:如果未指定,请询问用户,或默认使用 USD 和 eastus
- 先询问,再做假设:如果必需参数存在歧义或缺失,请停止,澄清并询问用户。绝不要对必须询问的参数擅自设定默认值。在请求层面,使用第 2 步中的澄清检查(例如月用量、数据传输量以及模型/功能变体)。在参数层面,使用 shared.md 中权威的消歧协议表。
- 默认输出格式为 Json:绝不要使用 Summary(Agent 不可见)
- 按需加载服务参考资料:仅直接读取用户查询所必需的
references/services/文件。使用文件搜索工作流(第 2 步)查找特定文件。 - PowerShell:使用
-File,而非-Command:使用pwsh -File或powershell.exe -File运行脚本;在 Linux/macOS 上,bash 会剥除内联命令中的 OData 引号。PS 5.1 注意事项: (a) 使用powershell.exe时,始终在-File前添加-ExecutionPolicy RemoteSigned;默认 Windows 策略会静默阻止脚本执行。(b) 传递数组参数时(例如-Region 'eastus','australiaeast'),使用-Command而非-File,因为-File模式无法解析 PowerShell 表达式语法,会将数组合并为单个字符串。 - 使用准确的类别名称:按 shared.md 中 Category Index 的准确名称逐字对项目分组(例如,“Compute”、“Databases”、“AI + ML”)。不得改述、缩写或重命名。
- 限定为用户指定的资源:仅包含用户架构中明确指定的资源。只有在数量已指定或服务文件中有说明时,才为
billingNeeds配套资源计价;否则将其列为单独计费的依赖项,并排除在总价之外。未指定billingNeeds数量不属于必须询问的缺口;此例外不适用于privateEndpoint子资源。 - MeterId:用户请求计量 ID 时,添加
--include-meter-id/-IncludeMeterId。无需额外调用 API。
服务文件元数据
YAML 前置元数据字段。可选字段采用默认值省略规则;省略即表示使用默认值。
| 字段 | 必填 | 默认值 | 操作 |
|---|---|---|---|
billingNeeds | - | 省略 | 读取列出的依赖服务;为数量已知的服务定价,其余服务列为单独计费 |
billingConsiderations | - | 省略 | 计算前询问用户列出的定价因素 |
primaryCost | ✔ | - | 用一行概述计费情况,快速了解成本 |
apiServiceName | - | 省略 | 在 API 查询中代替 serviceName |
queryServiceNames | - | 省略 | 其他允许的查询模式 ServiceName 值 |
hasMeters | - | true | false → 跳过 API,使用已知费率表 |
pricingRegion | - | regional | global → Region: Global;api-unavailable → 跳过 API;empty-region → 省略区域 |
hasKnownRates | - | false | true → 文件包含手动定价表 |
hasFreeGrant | - | false | true → 从成本公式中扣除免费额度 |
privateEndpoint | - | false | true → 通过 networking/private-link.md 汇总 PE 成本 |
通用陷阱
以下规则适用于每个查询:
serviceName和所有筛选值区分大小写:使用服务参考文件中的准确值- 未筛选的查询会返回混合 SKU 变体:始终使用
productName/skuName筛选出所需的特定变体 - 具有多个计量项的资源需要分别查询:每个计量项运行一次查询,并使用
-MeterName
批量估算模式
估算 3 项或更多服务时,请遵循以下规则以减少 Token 消耗:
- 部分读取:对于每个服务文件,使用 grep 搜索其章节标题(
^##),找到## Query Pattern章节的结束位置(下一个##标题),然后从第 1 行读取至该位置。这样既能获取 YAML 前置元数据、trap 和完整的 Query Pattern(所有计量项),又无需读取文件其余部分。 - 根据前置元数据分流:使用 YAML 元数据跳过不必要的工作(跳过 API、替换
serviceName、应用 grants/PE),具体参见上方的 Service File Metadata 表。 - 完整读取的触发条件:部分读取中没有 query pattern、使用非默认配置、结果为 0 或不符合预期,或者适用
billingConsiderations。 - 并行查询:并行运行相互独立的服务查询,但将并发请求限制在 3–5 个,以避免 API 速率限制。如果查询的服务超过 5 项,请分批错开启动。
- 跳过重复参考资料:在开始时读取一次 shared.md 和 pitfalls.md,不要在处理各服务期间重复读取。
- 逐步提炼:每项服务查询返回后,先输出一行摘要,再继续处理:
| Category | Service | Resource | Unit Price | Unit | Qty | Monthly Cost | Notes |多计量项服务的每个明细项各占一行。所有查询完成后,根据已汇总的行生成最终估算结果。除非需要完整读取,否则不要重新读取已提炼的服务文件。在估算后迭代期间,对于重新查询的服务,替换其提炼行。 - 精简输出:批量查询时使用
OutputFormat: Compact(或在 Bash 中使用--output-format Compact)。Compact 仅返回成本计算所需的 9 个字段(MeterName、ProductName、SkuName、UnitPrice、UnitOfMeasure、MonthlyCost、Currency、ReservationTerm、TierMinUnits);不包含查询回显或摘要区块。使用--include-meter-id时,Compact 会将 MeterId 作为第 10 个字段返回。调试意外结果或服务文件需要 Compact 集合中没有的字段时,使用完整的Json格式。