如何获取AWS实例过去一个月的运行成本?现有示例无法生效
修复AWS实例月度运行成本查询的PowerShell代码
原代码无法运行的核心问题在于没有正确处理Cost Explorer的返回结构,以及缺少必要的分组/过滤参数。以下是修正后的代码,以及问题说明:
原代码的主要问题
- 未通过
GroupBy参数指定按实例ID分组,导致返回结果中没有直接的ResourceId字段 - 过滤条件仅限定了服务,未关联目标实例ID
- 使用了错误的Metric(
UsageQuantity是使用量,而非成本) - 硬编码的日期不符合"过去一个月"的需求
修正后的代码
# Step 1: 指定目标实例ID(已知ID可直接赋值,无需自动获取) $targetInstanceId = "i-xxxxxxxxx" # 替换为你的实例ID # 如需自动获取所有实例ID,保留下面两行: # $instances = Get-Ec2Instance # $targetInstanceId = $instances.Instances.InstanceId # Step 2: 自动计算过去一个月的日期范围 $endDate = Get-Date -Format "yyyy-MM-dd" $startDate = (Get-Date).AddMonths(-1).ToString("yyyy-MM-dd") # Step 3: 构造Cost Explorer查询参数 $costParams = @{ TimePeriod = @{ Start = $startDate End = $endDate } Granularity = "MONTHLY" # 按月度汇总,可改为DAILY查看每日明细 GroupBy = @( @{ Type = "DIMENSION" Key = "INSTANCE_ID" } ) Filter = @{ And = @( @{ Dimensions = @{ Key = "SERVICE" Values = "Amazon Elastic Compute Cloud - Compute" } }, @{ Dimensions = @{ Key = "INSTANCE_ID" Values = $targetInstanceId } } ) } Metrics = "UnblendedCost" # 查询实际产生的未混合成本 } # Step 4: 获取并解析成本数据 $costData = Get-CECostAndUsage @costParams foreach ($group in $costData.ResultsByTime.Groups) { $instanceId = $group.Keys[0] $costAmount = $group.Metrics.UnblendedCost.Amount $formattedCost = "{0:C}" -f [double]$costAmount Write-Host "实例ID: $instanceId | 过去一个月运行成本: $formattedCost" }
关键修正说明
- 日期自动计算:用
Get-Date动态生成过去一个月的起止日期,无需手动修改 - 分组与过滤:通过
GroupBy = INSTANCE_ID让结果按实例ID分组,同时在Filter中指定目标实例ID,确保只查询指定实例的数据 - Metric修正:使用
UnblendedCost获取实际成本(而非使用量) - 结果解析:遍历
ResultsByTime.Groups数组,从Keys中提取实例ID,从Metrics中提取成本金额
内容的提问来源于stack exchange,提问作者Stuart Smith
相关产品推荐
相关产品推荐

