代码之家  ›  专栏  ›  技术社区  ›  codec

基于标签获取快照成本

  •  3
  • codec  · 技术社区  · 7 年前

    我正在尝试使用Boto3使用Cost Explorer API。我正在尝试获取EC2快照的成本。这些快照具有与之关联的自定义标记。我尝试检索的是具有特定标记的快照的成本。

    我写了以下剧本:

    import boto3
    client = boto3.client('ce')
    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': '2019-01-20',
            'End': '2019-01-24'
        },
        Metrics=['BLENDED_COST','USAGE_QUANTITY','UNBLENDED_COST'],
        Granularity='MONTHLY',
        Filter={
            'Dimensions': {
                           'Key':'USAGE_TYPE_GROUP',
                           'Values': ['EC2: EBS - Snapshots']
         }
    )
    

    这给了我成本。但这是快照使用的总成本,即所有卷的成本。有没有办法根据快照上的标记进行筛选?

    我尝试添加衰减过滤器:

    Filter={
            'And': [{
            'Dimensions': {
                           'Key':'USAGE_TYPE_GROUP',
                           'Values': ['EC2: EBS - Snapshots']
                          }}, #Dimensions end
            {'Tags':{
                 'Key': 'test',
                 'Values': ['aj']
             } # Tags ed
         } ] }# Filter ends
    

    有1个快照,我在其中添加了那个标记。我检查了日期范围,快照是在该时间范围内创建的,仍然可用。我尝试将粒度改为 DAILY 也是。

    但这总是显示0成本。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Logan Bertram    7 年前

    'Tags' 可以按如下方式添加到您的筛选器中:

    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': '2019-01-10',
            'End': '2019-01-15'
        },
        Metrics=['BLENDED_COST','USAGE_QUANTITY','UNBLENDED_COST'],
        Granularity='MONTHLY',
        Filter={
            'Dimensions': {
                'Key':'USAGE_TYPE',
                'Values': ['APN1-EBS:SnapshotUsage']
             },
             'Tags': {
                 'Key': 'keyName',
                 'Values': [
                     'keyValue',
                  ]
             }
         }
    )
    

    您可以在 boto3 cost explorer API reference .

    您还可以按如下标记键分组:

    Filter={
        'Dimensions': {
            'Key':'USAGE_TYPE',
            'Values': ['APN1-EBS:SnapshotUsage']
         }
     },
     GroupBy=[
        {
            'Type': 'DIMENSION'|'TAG',
            'Key': 'string'
        },
    ],
    

    它不会过滤掉标记,但会按标记键对返回的数据进行分组。这将返回与标记键匹配的所有标记值,因此它可能太宽,但您可以使用它来解决任何其他问题。

    我确认你的标签值和钥匙都匹配。