AWS Cost Explorer Service

2018/06/05 - AWS Cost Explorer Service - 1 updated api methods

Changes  Cost Explorer API is providing programmatic access to RI saving metrics to enable customers to optimize their reservations.

GetReservationUtilization (updated) Link ¶
Changes (response)
{'Total': {'AmortizedRecurringFee': 'string',
           'AmortizedUpfrontFee': 'string',
           'NetRISavings': 'string',
           'OnDemandCostOfRIHoursUsed': 'string',
           'TotalAmortizedFee': 'string',
           'TotalPotentialRISavings': 'string'},
 'UtilizationsByTime': {'Groups': {'Utilization': {'AmortizedRecurringFee': 'string',
                                                   'AmortizedUpfrontFee': 'string',
                                                   'NetRISavings': 'string',
                                                   'OnDemandCostOfRIHoursUsed': 'string',
                                                   'TotalAmortizedFee': 'string',
                                                   'TotalPotentialRISavings': 'string'}},
                        'Total': {'AmortizedRecurringFee': 'string',
                                  'AmortizedUpfrontFee': 'string',
                                  'NetRISavings': 'string',
                                  'OnDemandCostOfRIHoursUsed': 'string',
                                  'TotalAmortizedFee': 'string',
                                  'TotalPotentialRISavings': 'string'}}}

Retrieves the reservation utilization for your account. Master accounts in an organization have access to member accounts. You can filter data by dimensions in a time period. You can use GetDimensionValues to determine the possible dimension values. Currently, you can group only by SUBSCRIPTION_ID .

See also: AWS API Documentation

Request Syntax

client.get_reservation_utilization(
    TimePeriod={
        'Start': 'string',
        'End': 'string'
    },
    GroupBy=[
        {
            'Type': 'DIMENSION'|'TAG',
            'Key': 'string'
        },
    ],
    Granularity='DAILY'|'MONTHLY',
    Filter={
        'Or': [
            {'... recursive ...'},
        ],
        'And': [
            {'... recursive ...'},
        ],
        'Not': {'... recursive ...'},
        'Dimensions': {
            'Key': 'AZ'|'INSTANCE_TYPE'|'LINKED_ACCOUNT'|'OPERATION'|'PURCHASE_TYPE'|'REGION'|'SERVICE'|'USAGE_TYPE'|'USAGE_TYPE_GROUP'|'RECORD_TYPE'|'OPERATING_SYSTEM'|'TENANCY'|'SCOPE'|'PLATFORM'|'SUBSCRIPTION_ID'|'LEGAL_ENTITY_NAME'|'DEPLOYMENT_OPTION'|'DATABASE_ENGINE'|'CACHE_ENGINE'|'INSTANCE_TYPE_FAMILY',
            'Values': [
                'string',
            ]
        },
        'Tags': {
            'Key': 'string',
            'Values': [
                'string',
            ]
        }
    },
    NextPageToken='string'
)
type TimePeriod

dict

param TimePeriod

[REQUIRED]

Sets the start and end dates for retrieving Reserved Instance (RI) utilization. The start date is inclusive, but the end date is exclusive. For example, if start is 2017-01-01 and end is 2017-05-01 , then the cost and usage data is retrieved from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01 .

  • Start (string) -- [REQUIRED]

    The beginning of the time period that you want the usage and costs for. The start date is inclusive. For example, if start is 2017-01-01 , AWS retrieves cost and usage data starting at 2017-01-01 up to the end date.

  • End (string) -- [REQUIRED]

    The end of the time period that you want the usage and costs for. The end date is exclusive. For example, if end is 2017-05-01 , AWS retrieves cost and usage data from the start date up to, but not including, 2017-05-01 .

type GroupBy

list

param GroupBy

Groups only by SUBSCRIPTION_ID . Metadata is included.

  • (dict) --

    Represents a group when you specify a group by criteria, or in the response to a query with a specific grouping.

    • Type (string) --

      The string that represents the type of group.

    • Key (string) --

      The string that represents a key for a specified group.

type Granularity

string

param Granularity

If GroupBy is set, Granularity can't be set. If Granularity isn't set, the response object doesn't include Granularity , either MONTHLY or DAILY . If both GroupBy and Granularity aren't set, GetReservationUtilization defaults to DAILY .

type Filter

dict

param Filter

Filters utilization data by dimensions. You can filter by the following dimensions:

  • AZ

  • CACHE_ENGINE

  • DATABASE_ENGINE

  • DEPLOYMENT_OPTION

  • INSTANCE_TYPE

  • LINKED_ACCOUNT

  • OPERATING_SYSTEM

  • PLATFORM

  • REGION

  • SERVICE

  • SCOPE

  • TENANCY

GetReservationUtilization uses the same `` Expression `` object as the other operations, but only AND is supported among each dimension, and nesting is supported up to only one level deep. If there are multiple values for a dimension, they are OR'd together.

  • Or (list) --

    Return results that match either Dimension object.

    • (dict) --

      Use Expression to filter by cost or by usage. There are two patterns:

      • Simple dimension values - You can set the dimension name and values for the filters that you plan to use. For example, you can filter for INSTANCE_TYPE==m4.xlarge OR INSTANCE_TYPE==c4.large . The Expression for that looks like this: { "Dimensions": { "Key": "INSTANCE_TYPE", "Values": [ "m4.xlarge", “c4.large” ] } } The list of dimension values are OR'd together to retrieve cost or usage data. You can create Expression and DimensionValues objects using either with* methods or set* methods in multiple lines.

      • Compound dimension values with logical operations - You can use multiple Expression types and the logical operators AND/OR/NOT to create a list of one or more Expression objects. This allows you to filter on more advanced options. For example, you can filter on ((INSTANCE_TYPE == m4.large OR INSTANCE_TYPE == m3.large) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer) . The Expression for that looks like this: { "And": [ {"Or": [ {"Dimensions": { "Key": "INSTANCE_TYPE", "Values": [ "m4.x.large", "c4.large" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] } } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"] }}} ] }

      Note

      Because each Expression can have only one operator, the service returns an error if more than one is specified. The following example shows an Expression object that creates an error.

      { "And": [ ... ], "DimensionValues": { "Dimension": "USAGE_TYPE", "Values": [ "DataTransfer" ] } }

  • And (list) --

    Return results that match both Dimension objects.

    • (dict) --

      Use Expression to filter by cost or by usage. There are two patterns:

      • Simple dimension values - You can set the dimension name and values for the filters that you plan to use. For example, you can filter for INSTANCE_TYPE==m4.xlarge OR INSTANCE_TYPE==c4.large . The Expression for that looks like this: { "Dimensions": { "Key": "INSTANCE_TYPE", "Values": [ "m4.xlarge", “c4.large” ] } } The list of dimension values are OR'd together to retrieve cost or usage data. You can create Expression and DimensionValues objects using either with* methods or set* methods in multiple lines.

      • Compound dimension values with logical operations - You can use multiple Expression types and the logical operators AND/OR/NOT to create a list of one or more Expression objects. This allows you to filter on more advanced options. For example, you can filter on ((INSTANCE_TYPE == m4.large OR INSTANCE_TYPE == m3.large) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer) . The Expression for that looks like this: { "And": [ {"Or": [ {"Dimensions": { "Key": "INSTANCE_TYPE", "Values": [ "m4.x.large", "c4.large" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] } } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"] }}} ] }

      Note

      Because each Expression can have only one operator, the service returns an error if more than one is specified. The following example shows an Expression object that creates an error.

      { "And": [ ... ], "DimensionValues": { "Dimension": "USAGE_TYPE", "Values": [ "DataTransfer" ] } }

  • Not (dict) --

    Return results that don't match a Dimension object.

  • Dimensions (dict) --

    The specific Dimension to use for Expression .

    • Key (string) --

      The names of the metadata types that you can use to filter and group your results. For example, AZ returns a list of Availability Zones.

    • Values (list) --

      The metadata values that you can use to filter and group your results. You can use GetDimensionValues to find specific values.

      • (string) --

  • Tags (dict) --

    The specific Tag to use for Expression .

    • Key (string) --

      The key for a tag.

    • Values (list) --

      The specific value of a tag.

      • (string) --

type NextPageToken

string

param NextPageToken

The token to retrieve the next set of results. AWS provides the token when the response from a previous call has more results than the maximum page size.

rtype

dict

returns

Response Syntax

{
    'UtilizationsByTime': [
        {
            'TimePeriod': {
                'Start': 'string',
                'End': 'string'
            },
            'Groups': [
                {
                    'Key': 'string',
                    'Value': 'string',
                    'Attributes': {
                        'string': 'string'
                    },
                    'Utilization': {
                        'UtilizationPercentage': 'string',
                        'PurchasedHours': 'string',
                        'TotalActualHours': 'string',
                        'UnusedHours': 'string',
                        'OnDemandCostOfRIHoursUsed': 'string',
                        'NetRISavings': 'string',
                        'TotalPotentialRISavings': 'string',
                        'AmortizedUpfrontFee': 'string',
                        'AmortizedRecurringFee': 'string',
                        'TotalAmortizedFee': 'string'
                    }
                },
            ],
            'Total': {
                'UtilizationPercentage': 'string',
                'PurchasedHours': 'string',
                'TotalActualHours': 'string',
                'UnusedHours': 'string',
                'OnDemandCostOfRIHoursUsed': 'string',
                'NetRISavings': 'string',
                'TotalPotentialRISavings': 'string',
                'AmortizedUpfrontFee': 'string',
                'AmortizedRecurringFee': 'string',
                'TotalAmortizedFee': 'string'
            }
        },
    ],
    'Total': {
        'UtilizationPercentage': 'string',
        'PurchasedHours': 'string',
        'TotalActualHours': 'string',
        'UnusedHours': 'string',
        'OnDemandCostOfRIHoursUsed': 'string',
        'NetRISavings': 'string',
        'TotalPotentialRISavings': 'string',
        'AmortizedUpfrontFee': 'string',
        'AmortizedRecurringFee': 'string',
        'TotalAmortizedFee': 'string'
    },
    'NextPageToken': 'string'
}

Response Structure

  • (dict) --

    • UtilizationsByTime (list) --

      The amount of time that you utilized your RIs.

      • (dict) --

        The amount of utilization, in hours.

        • TimePeriod (dict) --

          The period of time over which this utilization was used.

          • Start (string) --

            The beginning of the time period that you want the usage and costs for. The start date is inclusive. For example, if start is 2017-01-01 , AWS retrieves cost and usage data starting at 2017-01-01 up to the end date.

          • End (string) --

            The end of the time period that you want the usage and costs for. The end date is exclusive. For example, if end is 2017-05-01 , AWS retrieves cost and usage data from the start date up to, but not including, 2017-05-01 .

        • Groups (list) --

          The groups that are included in this utilization result.

          • (dict) --

            A group of RIs that share a set of attributes.

            • Key (string) --

              The key for a specific RI attribute.

            • Value (string) --

              The value of a specific RI attribute.

            • Attributes (dict) --

              The attributes for this group of RIs.

              • (string) --

                • (string) --

            • Utilization (dict) --

              How much you used this group of RIs.

              • UtilizationPercentage (string) --

                The percentage of RI time that you used.

              • PurchasedHours (string) --

                How many RI hours that you purchased.

              • TotalActualHours (string) --

                The total number of RI hours that you used.

              • UnusedHours (string) --

                The number of RI hours that you didn't use.

              • OnDemandCostOfRIHoursUsed (string) --

                How much your RIs would cost if charged On-Demand rates.

              • NetRISavings (string) --

                How much you saved due to purchasing and utilizing RIs. This is calculated by subtracting the TotalAmortizedFee from the OnDemandCostOfRIHoursUsed .

              • TotalPotentialRISavings (string) --

                How much you could save if you use your entire reservation.

              • AmortizedUpfrontFee (string) --

                The upfront cost of your RI, amortized over the RI period.

              • AmortizedRecurringFee (string) --

                The monthly cost of your RI, amortized over the RI period.

              • TotalAmortizedFee (string) --

                The total cost of your RI, amortized over the RI period.

        • Total (dict) --

          The total number of RI hours that were used.

          • UtilizationPercentage (string) --

            The percentage of RI time that you used.

          • PurchasedHours (string) --

            How many RI hours that you purchased.

          • TotalActualHours (string) --

            The total number of RI hours that you used.

          • UnusedHours (string) --

            The number of RI hours that you didn't use.

          • OnDemandCostOfRIHoursUsed (string) --

            How much your RIs would cost if charged On-Demand rates.

          • NetRISavings (string) --

            How much you saved due to purchasing and utilizing RIs. This is calculated by subtracting the TotalAmortizedFee from the OnDemandCostOfRIHoursUsed .

          • TotalPotentialRISavings (string) --

            How much you could save if you use your entire reservation.

          • AmortizedUpfrontFee (string) --

            The upfront cost of your RI, amortized over the RI period.

          • AmortizedRecurringFee (string) --

            The monthly cost of your RI, amortized over the RI period.

          • TotalAmortizedFee (string) --

            The total cost of your RI, amortized over the RI period.

    • Total (dict) --

      The total amount of time that you utilized your RIs.

      • UtilizationPercentage (string) --

        The percentage of RI time that you used.

      • PurchasedHours (string) --

        How many RI hours that you purchased.

      • TotalActualHours (string) --

        The total number of RI hours that you used.

      • UnusedHours (string) --

        The number of RI hours that you didn't use.

      • OnDemandCostOfRIHoursUsed (string) --

        How much your RIs would cost if charged On-Demand rates.

      • NetRISavings (string) --

        How much you saved due to purchasing and utilizing RIs. This is calculated by subtracting the TotalAmortizedFee from the OnDemandCostOfRIHoursUsed .

      • TotalPotentialRISavings (string) --

        How much you could save if you use your entire reservation.

      • AmortizedUpfrontFee (string) --

        The upfront cost of your RI, amortized over the RI period.

      • AmortizedRecurringFee (string) --

        The monthly cost of your RI, amortized over the RI period.

      • TotalAmortizedFee (string) --

        The total cost of your RI, amortized over the RI period.

    • NextPageToken (string) --

      The token for the next set of retrievable results. AWS provides the token when the response from a previous call has more results than the maximum page size.