3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EC2 のコスト・性能を比較する gem ec2spec を作った

3
Posted at

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]

例えば host1host2host3 を比較するには次のように実行します。

$ 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 のキャッシュ更新
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?