ec2spec is a simple comparison tool for Amazon EC2 Instances you can access.
Supports the following items.
item | from |
---|---|
instance type | host |
instance id | host |
vCPU | AWS Price List API |
memory | AWS Price List API |
price | AWS Price List API |
The target host must be accessible from the machine. Also, only On-Demand way and Linux machine.
Installation
$ gem install ec2spec
Usage
$ ec2spec ssh -h host1 ... [options]
Example
$ ec2spec ssh -h host1 host2 host3
I, [2018-08-12T20:54:25.814752 #64341] INFO -- : Started: host1
I, [2018-08-12T20:54:25.814835 #64341] INFO -- : Started: host2
I, [2018-08-12T20:54:25.814867 #64341] INFO -- : Started: host3
E, [2018-08-12T20:54:25.826113 #64341] ERROR -- : Connection refused: host3
I, [2018-08-12T20:54:29.385848 #64341] INFO -- : Finished: host1
I, [2018-08-12T20:54:37.560003 #64341] INFO -- : Finished: host2
+---------------+-------------+---------------------+-------+
| | host1 | host2 | host3 |
+---------------+-------------+---------------------|-------+
| instance_type | t2.micro | c4.2xlarge | N/A |
| instance_id | i-xxxxxxxx | i-yyyyyyyy | N/A |
| vCPU | 1 | 8 | N/A |
| memory | 1 GiB | 15 GiB | N/A |
| price (USD/H) | 0.0152 | 0.504 | N/A |
| price (USD/M) | 11.3088 | 374.976 | N/A |
+---------------+-------------+---------------------+-------+
The data of host3
could not be acquired due to a connection refused error.
Options
-h, --host Target hosts name.
--days How many days per one month.
--format Output format (default: plain_text).
plain_text, json, hash, slack, markdown
--region Region of EC2 (default: ap-northeast-1).
--unit Currency unit.
with --rate.
--rate Dollar exchange rate.
with --unit.
--calc_type Calculate exchange currency rate type.
api, manual
with --app_id, --unit (if app)
--unit, rate (if manual)
--app_id App ID of Open Exchange Rates
https://openexchangerates.org/
with --calc_type, --unit
--debug Output logs as DEBUG level.
--format (plain_text
)
+---------------+-------------+-------------+
| | host1 | host2 |
+---------------+-------------+-------------|
| instance_type | t2.micro | c4.2xlarge |
| instance_id | i-xxxxxxxx | i-yyyyyyyy |
| vCPU | 1 | 8 |
| memory | 1 GiB | 15 GiB |
| price (USD/H) | 0.0152 | 0.504 |
| price (USD/M) | 11.3088 | 374.976 |
+---------------+-------------+-------------+
--format (json
and hash
)
{"host1":{"instance_type":"t2.micro","instance_id":"i-xxxxxxxx","vCPU":"1","memory":"1 GiB","price (USD/H)":0.0152,"price (USD/M)":11.3088},"host2":{"instance_type":"c4.2xlarge","instance_id":"i-yyyyyyyy","vCPU":"8","memory":"15 GiB","price (USD/H)":0.504,"price (USD/M)":374.976}}
--format (slack
)
```
+---------------+-------------+-------------+
| | host1 | host2 |
+---------------+-------------+-------------+
| instance_type | t2.micro | c4.2xlarge |
| instance_id | i-xxxxxxxx | i-yyyyyyyy |
| vCPU | 1 | 8 |
| memory | 1 GiB | 15 GiB |
| price (USD/H) | 0.0152 | 0.504 |
| price (USD/M) | 11.3088 | 374.976 |
+---------------+-------------+-------------+
```
--format (markdown
)
| | stg-bastion | worker1 |
|---------------|-------------|-------------|
| instance_type | t2.micro | c4.2xlarge |
| instance_id | i-xxxxxxxx | i-yyyyyyyy |
| vCPU | 1 | 8 |
| memory | 1 GiB | 15 GiB |
| price (USD/H) | 0.0152 | 0.504 |
| price (USD/M) | 11.3088 | 374.976 |
Exchange currency rate
Manual
Output JPY as exchange rate is 1 dollar 111 yen.
$ ec2spec ssh -h host1 host2 --unit JPY --calc_type manual
API
First, get App ID from https://openexchangerates.org/
Output JPY with it.
$ ec2spec ssh -h host1 host2 --unit JPY --calc_type api --app_id xxxxxxxx
Note: Exchange rate is cached in ~/.ec2spec/oxr.json
. If you want to refresh, you have to delete it.
As a library
> require 'ec2spec'
> hosts = %w[host1 host2]
> client = Ec2spec::Client.new(hosts, 30, 'hash')
> result_json = client.run
> puts result_json
I, [2018-08-12T20:54:25.814752 #64341] INFO -- : Started: host1
I, [2018-08-12T20:54:25.814835 #64341] INFO -- : Started: host2
I, [2018-08-12T20:54:29.385848 #64341] INFO -- : Finished: host1
I, [2018-08-12T20:54:37.560003 #64341] INFO -- : Finished: host2
=> {"host1":{"instance_type":"t2.micro","instance_id":"i-xxxxxxxx","vCPU":"1","memory":"1 GiB","price (USD/H)":0.152,"price (USD/M)":11.3088},"host2":{"instance_type":"c4.2xlarge","instance_id":"i-yyyyyyyy","vCPU":"8","memory":"15 GiB","price (USD/H)":0.504,"price (USD/M)":374.976}}
Requirement
- Ruby(MRI) 2.3.0 or higher
Competitors
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/kyoshidajp/ec2spec.
License
The gem is available as open source under the terms of the MIT License.