Compare EC2 instances families without querying AWS API
Project description
ec2-compare
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
- Downland the latest info
aws ec2 describe-instance-types | jq '.InstanceTypes' > aws_ec2.json
- repack
python3 repack.py
Thank you
- https://github.com/actions/ for an awesome github actions
- mypy for doing all dirty work for us
Project details
Release history Release notifications | RSS feed
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 details)
Built Distribution
ec2_compare-1.0.0a9-py3-none-any.whl
(461.6 kB
view details)
File details
Details for the file ec2_compare-1.0.0a9.tar.gz
.
File metadata
- Download URL: ec2_compare-1.0.0a9.tar.gz
- Upload date:
- Size: 326.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d4a9d5c8f710286d514d6f4935995f5082a508be53e4edadf5f0bc34732c12f |
|
MD5 | 261a3c812337b34a04959933e2d437fb |
|
BLAKE2b-256 | 8f1344450e3486d987abebb7cef416768b7286b70af0edd4f173b24e6bd95781 |
File details
Details for the file ec2_compare-1.0.0a9-py3-none-any.whl
.
File metadata
- Download URL: ec2_compare-1.0.0a9-py3-none-any.whl
- Upload date:
- Size: 461.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae7c87942acab8c40fb34bd5ba4689914019859853f44db615981765caa81cde |
|
MD5 | 418d31dcf5b35ea7e8f84ec08d004cf7 |
|
BLAKE2b-256 | 5cfe2834bf3ae57a57257202ab154391161e14f90d242e5c41d7570383c41cee |