mcpField
A
azure-cost-calculator

azure-cost-calculator

github.com/ahmadabdalla云与 DevOps20148 次安装13 周前更新
代码仓库

关于 azure-cost-calculator

azure-cost-calculator 是用于估算 Azure 架构成本的技能,依据实时 Retail Prices API 数据定价。它引导用户补充必要参数,并完成服务查询、成本计算与结果整理。

主要功能

  1. 01查询实时 Azure Retail Prices API
  2. 02按环境选择 Bash 或 PowerShell
  3. 03澄清估算所缺参数
  4. 04查找服务资料并处理依赖
  5. 05计算成本并核验算术
  6. 06整理月度成本明细

适用场景

  1. 01估算指定 Azure 架构的月度成本
  2. 02找出缺失的资源规格或用量
  3. 03变更区域或服务后更新估算

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ahmadabdalla/azure-cost-calculator --skill azure-cost-calculator

安装后在 Claude Code 中输入/azure-cost-calculator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
pitfalls.md
regions-and-currencies.md
reserved-instances.md
service-routing.md
references/examples/
3-tier-web-app.md
data-analytics-platform.md
enterprise-datacenter-migration.md
event-driven-serverless.md
security-observability-platform.md
references/services/ai-ml/
ai-content-understanding.md
ai-services.md
bot-service.md
content-safety.md
discovery.md
document-intelligence.md
foundry-agents.md
genomics.md
language.md
machine-learning-studio.md
machine-learning.md
openai-service.md
speech.md
translator.md
video-indexer.md
vision.md
references/services/analytics/
analysis-services.md
data-explorer.md
data-factory.md
databricks.md
fabric.md

详细介绍

Azure 成本计算器

使用公开的 Retail Prices API 进行确定性的 Azure 成本估算。绝不猜测价格;始终通过脚本查询实时 API。

运行时检测

根据可用情况选择脚本运行时:

运行时条件定价脚本探索脚本
Bash(首选)curl 和 jq 可用scripts/get-azure-pricing.shscripts/explore-azure-pricing.sh
PowerShell 7+pwsh 可用scripts/Get-AzurePricing.ps1scripts/Explore-AzurePricing.ps1
Windows PowerShell 5.1powershell.exe 可用(仅限 Windows)。需要 -ExecutionPolicy RemoteSigned(参见关键规则 6)。scripts/Get-AzurePricing.ps1scripts/Explore-AzurePricing.ps1

两者都会生成完全相同的 JSON 输出。Bash 标志使用与 PowerShell -PascalCase 参数对应的 --kebab-case 格式(例如,-ServiceName → --service-name)。

声明式参数

服务参考文件以 Key: Value 键值对的形式指定查询参数。请将其转换为 Bash --kebab-case 或 PowerShell -PascalCase 标志;包含空格的字符串值需加引号。完整的参数表、转换示例和输出格式请参阅 workflow.md。

工作流

阶段 1:分析(不查询 API)
  1. 解析:从用户的架构中提取资源类型、数量和规格

  2. 澄清:如果符合以下任一情况,请暂停并先询问:

    • 资源对应某个类别,但未指定具体服务(例如“一个数据库”)→ 列出 2–4 个选项
    • 资源未提供数量、规格/层级或工作负载规模 → 询问具体信息
    • 资源未提供预期月用量:传输/摄取的数据量(GB)、事务数、请求数、消息数、token 数或用户/设备数 → 询问预计用量
    • 多模型或多功能服务(例如 Azure OpenAI、AI Services、Defender for Cloud)未指定模型或功能变体 → 询问具体选项(成本可能相差 15–30 倍)
    • 用户描述了目标,但未说明托管模式(例如“一个 Web 应用”)→ 提供 2–3 个选项并说明利弊
    • 将所有缺失项合并到一次提问中。提供具体且合理的选项(例如“每月 100 GB?”、“GPT-4o 还是 GPT-4o-mini?”)。最多询问一轮;如果用户拒绝提供某个参数,仅对安全默认值类缺失项应用安全默认值,并披露这些默认值;如果仍有任何绝不可假设类缺失项,则不要继续;说明缺少哪些输入,因此无法估算。
  3. 定位:按照 shared.md 中的查找工作流定位每项服务;执行 glob services/**/*<keyword>*.md;如果结果为 0 个或不明确(匹配多个),则在 service-routing.md 中 grep 名称/别名,并打开匹配行中嵌入的路径

  4. 读取匹配的服务文件;检查 billingNeeds 并遵循依赖链(例如 AKS → VM → Managed Disks)

  5. 分类:按照 shared.md 中的消歧协议对每个参数分类:

    • 已指定:用户已提供值(原样使用)
    • 绝不可假设的缺失项:缺少必填参数(必须询问)
    • 安全默认值类缺失项:缺少可选参数(使用默认值并披露)
  6. 规格审查:提供摘要:

    服务已指定缺失(将询问)默认值(将采用)
    • 如果缺少任何绝不可假设的参数 → 继续前先询问用户
    • 如果仅剩安全默认值类缺失项 → 披露默认值并继续执行阶段 2
    • 单服务捷径:对于所有参数均已指定的单服务估算,跳过此规格审查表;仍需提供阶段 2 的假设说明块
阶段 2:估算
  1. 查询:使用服务文件中的参数、用户输入和已确定的默认值,为每项服务运行定价脚本
  2. 计算:应用服务文件中的成本公式;乘以数量
  3. 核验算术:对于每个明细项,使用实际数字重述公式、计算并确认结果。如果任何中间计算涉及两个都大于 10 的数相乘,则分步计算(例如 14.5 × 640 → 14 × 640 → 10 × 640 = 6,400;4 × 640 = 2,560;小计 = 8,960;0.5 × 640 = 320;总计 = 9,280)。多位数运算不要依赖心算。
  4. 呈现:按以下格式输出估算结果:
  • 假设说明块(参见 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:脚本参数和输出格式

关键规则

  1. 绝不猜测价格:始终针对实时 API 运行脚本
  2. 根据用户上下文推断货币和区域:如果未指定,请询问用户,或默认使用 USD 和 eastus
  3. 先询问,再做假设:如果必需参数存在歧义或缺失,请停止,澄清并询问用户。绝不要对必须询问的参数擅自设定默认值。在请求层面,使用第 2 步中的澄清检查(例如月用量、数据传输量以及模型/功能变体)。在参数层面,使用 shared.md 中权威的消歧协议表。
  4. 默认输出格式为 Json:绝不要使用 Summary(Agent 不可见)
  5. 按需加载服务参考资料:仅直接读取用户查询所必需的 references/services/ 文件。使用文件搜索工作流(第 2 步)查找特定文件。
  6. 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 表达式语法,会将数组合并为单个字符串。
  7. 使用准确的类别名称:按 shared.md 中 Category Index 的准确名称逐字对项目分组(例如,“Compute”、“Databases”、“AI + ML”)。不得改述、缩写或重命名。
  8. 限定为用户指定的资源:仅包含用户架构中明确指定的资源。只有在数量已指定或服务文件中有说明时,才为 billingNeeds 配套资源计价;否则将其列为单独计费的依赖项,并排除在总价之外。未指定 billingNeeds 数量不属于必须询问的缺口;此例外不适用于 privateEndpoint 子资源。
  9. MeterId:用户请求计量 ID 时,添加 --include-meter-id / -IncludeMeterId。无需额外调用 API。

服务文件元数据

YAML 前置元数据字段。可选字段采用默认值省略规则;省略即表示使用默认值。

字段必填默认值操作
billingNeeds-省略读取列出的依赖服务;为数量已知的服务定价,其余服务列为单独计费
billingConsiderations-省略计算前询问用户列出的定价因素
primaryCost✔-用一行概述计费情况,快速了解成本
apiServiceName-省略在 API 查询中代替 serviceName
queryServiceNames-省略其他允许的查询模式 ServiceName 值
hasMeters-truefalse → 跳过 API,使用已知费率表
pricingRegion-regionalglobal → Region: Global;api-unavailable → 跳过 API;empty-region → 省略区域
hasKnownRates-falsetrue → 文件包含手动定价表
hasFreeGrant-falsetrue → 从成本公式中扣除免费额度
privateEndpoint-falsetrue → 通过 networking/private-link.md 汇总 PE 成本

通用陷阱

以下规则适用于每个查询:

  1. serviceName 和所有筛选值区分大小写:使用服务参考文件中的准确值
  2. 未筛选的查询会返回混合 SKU 变体:始终使用 productName/skuName 筛选出所需的特定变体
  3. 具有多个计量项的资源需要分别查询:每个计量项运行一次查询,并使用 -MeterName

批量估算模式

估算 3 项或更多服务时,请遵循以下规则以减少 Token 消耗:

  1. 部分读取:对于每个服务文件,使用 grep 搜索其章节标题(^## ),找到 ## Query Pattern 章节的结束位置(下一个 ## 标题),然后从第 1 行读取至该位置。这样既能获取 YAML 前置元数据、trap 和完整的 Query Pattern(所有计量项),又无需读取文件其余部分。
  2. 根据前置元数据分流:使用 YAML 元数据跳过不必要的工作(跳过 API、替换 serviceName、应用 grants/PE),具体参见上方的 Service File Metadata 表。
  3. 完整读取的触发条件:部分读取中没有 query pattern、使用非默认配置、结果为 0 或不符合预期,或者适用 billingConsiderations。
  4. 并行查询:并行运行相互独立的服务查询,但将并发请求限制在 3–5 个,以避免 API 速率限制。如果查询的服务超过 5 项,请分批错开启动。
  5. 跳过重复参考资料:在开始时读取一次 shared.md 和 pitfalls.md,不要在处理各服务期间重复读取。
  6. 逐步提炼:每项服务查询返回后,先输出一行摘要,再继续处理: | Category | Service | Resource | Unit Price | Unit | Qty | Monthly Cost | Notes | 多计量项服务的每个明细项各占一行。所有查询完成后,根据已汇总的行生成最终估算结果。除非需要完整读取,否则不要重新读取已提炼的服务文件。在估算后迭代期间,对于重新查询的服务,替换其提炼行。
  7. 精简输出:批量查询时使用 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 格式。

评论

支持 Markdown