EC2の稼働時間とコストを見てみる
予防線
本記事は時系列順に出来事を説明しているため、丁寧にまとまった記事ではないと思います。
それでもよければ見ていって下さい。
なにをするの?
しばらく動かし続けたEC2インスタンスがいたため、
そのコストを出してみました。コスト配分タグをつけているのでそれをもとに見ていきましょう。
稼働時間 * オンデマンド料金 = 今回のコスト
になってほしいです。
EC2のスペック
- Linux
- AMIは無料枠Ubuntu
- t3.xlarge
- 課金タイプはオンデマンド
- コストタグは
Cost
,このEC2のタグバリューはt3.xlarge
- インスタンスタイプまんまです
コスト配分タグからコストを出す
Cost Explorerで稼働期間内のコストを見てみました。
このEC2は$7.40
使ったらしいです。
次はこのEC2の稼働時間を調べてみます。
稼働時間を出す
EC2のLaunchTime
を出し、現在時刻との差を調べれば良さそうです(原始的)
LaunchTimeを出す
awscliを使います
$ aws ec2 describe-instances --filters "Name=tag:Cost,Values=t3.xlarge" --query 'Reservations[].Instances[].LaunchTime' --output text
2023-06-12T11:54:13+00:00
awscliでの出力はUTCとなっています。
わたしは日本在住のため日本時間にすると、6月12日20時54分にこいつは起動していました。
現在時刻を出す
dateコマンドで出します
$ LC_ALL=C LANG=C date
Wed Jun 14 22:23:12 JST 2023
6月14日22時23分としましょう
datetime
で出す
稼働時間をpythonのdatetime
を使って、時間を引き算します
>>> import datetime
>>> dt1 = datetime.datetime(year=2023, month=6, day=12, hour=20, minute=54)
>>> dt2 = datetime.datetime(year=2023, month=6, day=14, hour=22, minute=23)
>>> print(dt2 - dt1)
2 days, 1:29:00
ざっくり50
時間としましょう。
インスタンスタイプのオンデマンド料金を見る
先述の通り、今回使ったインスタンスタイプはt3.xlarge,OSはlinuxです。
時間当たりのオンデマンド料金は$0.2176
/時間でした
いざ計算
材料がそろったところで計算していきましょう
- オンデマンド料金:$0.2176/時間
- 稼働時間:50時間
を計算し、
- Cost Explorerで調べた
$7.40
に近ければ良いです。
早速やってみましょう。
>>> 0.2176 * 50
10.879999999999999
あれ?高くね???
反省
先程のCost Explorerでのコスト計算は6/12~6/14
の範囲で行っていました。
しかし6/12~6/13
の範囲で再計算したところコストは同じく$7.40
でした。
どうやら本日(6/14)分は計算されていないようです。
ということで本日の22時間を引いて、28時間で計算してみます
28時間で再計算
>>> 0.2176 * 28
6.0927999999999995
うわー...今度は低く出てる...
すべてのコストは前日までの使用量が反映される
思い切りドキュメントに書いてありました。
すべてのコストには、前日までの使用量が反映されます。たとえば、今日の日付が 12 月 2 日である場合、データには 12 月 1 日からの使用量が反映されます。
ふむふむ、であれば使用量が反映される6月15日に再度確認してみましょう。
再度Cost Explorerを見てみる
本日確認してみての結果です。
$10.90
、概ねこちらの計算と一致しています。
やったね。
所感
- しばらく時間を置いてからコストを確認する必要がありそう。
-
ここで出てきたコストもよくわからない。
$7.40
になればよかったが、そうではないし...
これも時間経過で解決する問題なのか...?
おわりに
ざっくり簡単単純な計算ですが、概ね期待した結果が得られて良かったです。
課金の様子を実際に見てみるのは大事ですね。
Discussion