TL;DR
- EC2 のコスト・性能を比較する gem ec2spec を作った
- CLI とライブラリの2通りの利用が可能
類似のツール
これらのツールでは、リージョンやインスタンスタイプをキーに対象を絞るのが一般的な使い方ではないでしょうか?
ec2spec ではインスタンスタイプは対象ホストから、金額やスペックは AWS Price List API から取得しています。リージョンは割り切って、オプションで指定するようにしました。また、OS は Linux、料金タイプはオンデマンドに限定しています。
個人的な用途として、すでに可動しているホストを比較したい場合が多く、リージョンは決まっているのでこの様にしました。
使い方
gem でインストールできます。
$ gem install ec2spec
bundler 経由でも OK です。その場合、以降の実行コマンドは bundler 経由に読み替えてください。
実行は次の通りです。
$ ec2spec ssh -h host1 ... [options]
例えば host1、host2、host3 を比較するには次のように実行します。
$ 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
I, [2018-08-12T20:54:25.826113 #64341] INFO -- : Finished: 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 |
+---------------+-------------+---------------------+
ご覧のように対象ホストについて、それぞれ次の項目を出力しています。
- インスタンスタイプ
- インスタンス ID
- vCPU
- メモリ
- 料金(USD で1時間と1ヶ月)
host3 は何らかの問題でデータが取得できなかったため、すべての値が N/A になっています。
ライブラリとして使用する事も可能です。次はコンソールから使用した例です。
> 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}}
Hash 形式でデータを取得して、出力しています。
オプション
| オプション名 | 説明 |
|---|---|
| -h, --host | ホスト名 |
| --days | 1ヶ月を何日とするか |
| --format | 出力フォーマット(デフォルト: plain_text) |
| --region | EC2 のリージョン(デフォルト: ap-northeast-1) |
| --debug | デバッグモードオン |
今後の展開
今後考えている機能は次の通りです。
- 金額を日本円など他の通貨で表示
- 対象ホストへの接続設定ファイルの指定オプションを追加
-
sshコマンドの-Fオプションをイメージ
-
- インスタンスID をキーとしたキャッシュ化
- 取得した Price List API のキャッシュ更新