Пример #1
0
def get_instance_data(raw_data):
    print('computing instance data')
    ec2_offer = awspricing.offer('AmazonEC2')
    print('retrieved amazon ec2 offer data')
    simple_instance_data = defaultdict(list)
    for instance in raw_data:
        baseline = instance['vCPU']
        if instance['base_performance'] is not None:
            baseline = instance['base_performance']
        if baseline == "N/A":
            continue
        instance_info = {
            'instanceType': instance['instance_type'],
            'gpu': instance['GPU'],
            'memory': instance['memory'],
            'cpu': instance['vCPU'],
            'burstable': instance["burst_minutes"] is not None,
            'baseline': baseline,
            'generation': instance['generation'],
        }
        if instance["generation"] != 'current':
            continue
        for region in regions:
            try:
                price = ec2_offer.ondemand_hourly(
                    instance_type=instance['instance_type'],
                    operating_system='Linux',
                    region=region,
                )
                instance_info['price'] = float(price)
                print(instance_info)
                simple_instance_data[region].append(instance_info)
            except ValueError:
                continue
    return simple_instance_data
Пример #2
0
def update_pricing():
    # Purge existing database
    database.purge()
    # Get an EC2 price list from amazon
    ec2_offer = awspricing.offer('AmazonEC2')
    # Retrieve latest pricing for vm and insert in database
    for (aws_vmgroup, aws_vmtypelist) in aws_vmtypes:
        for (aws_vmtype, aws_vmdesc) in aws_vmtypelist:
            try:
                # DB format change (bug in awspricing) aws_pricing = ec2_offer.ondemand_hourly(aws_vmgroup+aws_vmtype,operating_system=aws_ostype,region=aws_region)
                # Ondemand makes a distinction between Used, ReservationBox, ...
                sku = ec2_offer.search_skus(instance_type=aws_vmgroup +
                                            aws_vmtype,
                                            operating_system=aws_ostype,
                                            tenancy='Shared',
                                            location='EU (Frankfurt)',
                                            licenseModel='No License required',
                                            preInstalledSw='NA',
                                            capacitystatus='Used').pop()
                print ec2_offer._offer_data[sku]['terms']['OnDemand']
                aws_pricing = next(
                    six.itervalues(
                        next(
                            six.itervalues(
                                ec2_offer._offer_data[sku]['terms']['OnDemand']
                            ))['priceDimensions']))['pricePerUnit']['USD']
                print aws_pricing
            except:
                aws_pricing = 'n/a'
                pass
            database.insert({
                'type': aws_vmgroup + aws_vmtype,
                'pricing': aws_pricing
            })
    # Store timestamp
    database.insert(
        {'timestamp': str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M'))})
Пример #3
0
def CheapestEc2Region(type='t2.micro'):
    #os.environ['AWSPRICING_USE_CACHE'] = '1'
    #os.environ['AWSPRICING_CACHE_MINUTES'] = '10080' #10080 = 1 week

    import awspricing
    ec2_offer = awspricing.offer('AmazonEC2')

    #Cheapest region
    min_price = math.inf
    min_region = []

    #All regions
    all_regions = []

    # Search price for every region
    ec2 = boto3.client('ec2')
    response = ec2.describe_regions()
    for reg in response['Regions']:
        name = reg['RegionName']
        try:
            p = ec2_offer.ondemand_hourly(type,
                                          operating_system='Linux',
                                          region=name)

            all_regions.append({'region': name, 'price': p})
            if p < min_price:
                min_price = p
                min_region = [name]
            elif p == min_price:
                min_region.append(name)
        except:
            pass
    return {
        'region': min_region,
        'price': min_price,
        'all_regions': all_regions
    }
import awspricing

ec2_offer = awspricing.offer('AmazonEC2')

ec2_offer.search_skus(
    instance_type='c4.large',
    location='US East (N. Virginia)',
    operating_system='Linux',
)  # {'4C7N4APU9GEUZ6H6', 'MBQPYDJSY3BY84BH', 'MDKVAJXMJGZFDJUE'}

ec2_offer.reserved_hourly('c4.xlarge',
                          operating_system='Linux',
                          lease_contract_length='3yr',
                          offering_class='convertible',
                          purchase_option='Partial Upfront',
                          region='us-east-1')
Пример #5
0
def lookup_monthly_price(region_name: str, instance_type: str, operating_system: str) -> float:
    ec2_offer = awspricing.offer('AmazonEC2')
    hourly = ec2_offer.ondemand_hourly(instance_type, region=region_name, operating_system=operating_system)
    return hourly * HOURS_IN_A_MONTH
Пример #6
0
def prices(svc='AmazonEC2'):
    import awspricing
    awsproce = awspricing.offer(svc)
    return awsprice
Пример #7
0
import awspricing
from awspricing import cache

awspricing.cache.AWSPRICING_USE_CACHE=1

ec2_offer = awspricing.offer('AmazonEC2')

ec2_offer.search_skus(
  instance_type='c4.large',
  location='US East (N. Virginia)',
  operating_system='Linux',
)  # {'4C7N4APU9GEUZ6H6', 'MBQPYDJSY3BY84BH', 'MDKVAJXMJGZFDJUE'}

fltC4LargePricing=ec2_offer.ondemand_hourly(
  'c4.large',
  operating_system='Linux',
  # lease_contract_length='3yr',
  # offering_class='standard',
  # purchase_option='Partial Upfront',
  region='us-east-1'
)  # 0.10845205479452055

print "Hourly c4.large pricing in us-east-1: $" + str(fltC4LargePricing)