Skip to main content

Compare EC2 instances families without querying AWS API

Project description

ec2-compare

PyPI - ec2-compare PyPI - Python Version Coverage PyPI - Downloads

Compare EC2 instances families without querying AWS API

Example:

  • Getting on instances by parameters
import ec2_compare.mixin
req = ec2_compare.mixin.EmrRequestMixin().ec3__get_machines(
    max_instances=5, # maximum number of machines
    # reuest parameters
    **{
        'cpu': 40, 'ram': 786432, 'min_cpu': 8, 'min_ram': 65536,
        'InstanceType': ['c4', 'c5.', 'r4', 'r5.', 'm4', 'm5.'],
        'SupportedArchitectures': ['x86_64'], 'SupportedUsageClasses': 'spot'
    })
  • Getting on instances suitable for on-demand
>>> import ec2_compare.internal.on_demand
>>> ec2_compare.internal.on_demand.get_instances_dict()[0]['InstanceType']
'm5d.xlarge'

Why it's more memory & CPU efficient

1). ec2-compare

  • Memory (penalty 8.1 Mb - 8175616 bytes)
>>>
def getCurrentMemoryUsage():
    ''' Memory usage in Bytes '''
    import psutil
    import os
    process = psutil.Process(os.getpid())
    return process.memory_info().rss
>>> getCurrentMemoryUsage()
9535488
>>> import ec2_compare.ec2data
>>> getCurrentMemoryUsage()
17641472
>>> len(ec2_compare.ec2data.get_instances_dict())
341
>>> getCurrentMemoryUsage()
17711104
  • Load time:
>>> import timeit
>>> timeit.timeit('import ec2_compare.ec2data;len(ec2_compare.ec2data.get_instances_dict())', number=1)
0.0028156930000000635
>>> timeit.timeit('import ec2_compare.ec2data;len(ec2_compare.ec2data.get_instances_dict())', number=1)
0.001711632000002794
>>> timeit.timeit('import ec2_compare.ec2data;len(ec2_compare.ec2data.get_instances_dict())', number=1000)
0.8330168470000032
>>> timeit.timeit('import ec2_compare.ec2data;len(ec2_compare.ec2data.get_instances_dict())', number=1000)
0.8174298469999997

2). Reading from json file:

  • Memory (penalty 2.5 Mb - 2592768 bytes)
>>> getCurrentMemoryUsage()
9379840
>>> import json
>>> with open("./helpers/aws_ec2.json") as json_file:
...     json.load(json_file)
...
>>> getCurrentMemoryUsage()
11972608
  • Load time:
>>> import timeit
>>>
s= '''
import json
with open("./helpers/aws_ec2.json") as json_file:
    json.load(json_file)
'''
timeit.timeit(s, number=1000)
>>
4.628850890999999

Versioning

ec2_compare follows PEP 440.

How to build

python -m pip install -e ./[devel]
# or pip install -e ./[devel]

# Running tests
scripts/tests.sh

Update data Locally

  1. Downland the latest info
aws ec2 describe-instance-types | jq '.InstanceTypes' > aws_ec2.json
  1. repack
python3 repack.py

Thank you

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ec2_compare-1.0.0a9.tar.gz (326.3 kB view hashes)

Uploaded Source

Built Distribution

ec2_compare-1.0.0a9-py3-none-any.whl (461.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page