はじめに
_s__o_ です。
2019 年 1 月頃から (個人的に) AWS 利用 (運用) を開始しました。今月 (2020 年 7 月) で約 1 年半。費用としては、現在は、だいたい「6 $ 強/月」におさまっています。自身の備忘も兼ねて、初期から今までのコスト変遷を追うとともに、コスト変動タイミングで何をしたか、少し振り返っていきたいと思います。
AWS 利用の動機
そもそも、なぜ AWS 利用をしようと思ったのか。理由は主に下記 3 点です。
- 2018 年 11 月末に結婚。妻と家計を共有できる Web アプリが欲しかった
- 2018 年 12 月時点、AWS 絡みの案件にアサインされる目処が立っており、自己研鑽をしたかった
- サーバ運用も生業としていたので、仕事勘を養いたかった
一番上の理由が主です。夫婦間でしか利用しない Web アプリのため、サービス (サーバ) の要件は下記程度でした。
- 簡単な Web アプリが動く程度のスペックで OK
- 夜間帯は停止していて OK
- 何かあっても、最悪 1 日前に戻せれば OK
- でも、独自ドメインでアクセスしたい (個人的願望)
AWS 利用費の変遷
それでは、本題です。
年表
とりあえず、2018 年 12 月から追っていきたいと思います。当該月に特記があった場合は、特記事項列にイベント内容を記載しています。
年月 | 費用 | EC2 稼働時間 | 特記事項 |
---|---|---|---|
2019 年 1 月 | 13.79 $ | 744.1 h | 利用開始。EC2 (t2.micro) + Route53 (ドメインは AWS 以外で購入) |
2019 年 2 月 | 7.43 $ | 673.3 h | インスタンスタイプ見直し (t2.micro → t2.nano) |
2019 年 3 月 | 7.68 $ | 744.0 h | - |
2019 年 4 月 | 6.57 $ | 572.6 h | 夜間帯 (0:00~06:00) は停止するようにした |
2019 年 5 月 | 5.29 $ | 557.9 h | インスタンスタイプ見直し (t2.nano → t3.nano) + EIP の利用停止 |
2019 年 6 月 | 5.77 $ | 540.1 h | - |
2019 年 7 月 | 5.91 $ | 558.1 h | - |
2019 年 8 月 | 5.91 $ | 558.2 h | - |
2019 年 9 月 | 5.77 $ | 540.1 h | - |
2019 年 10 月 | 6.01 $ | 558.1 h | - |
2019 年 11 月 | 46.26 $ | 569.1 h | RI (t3.nano) を購入。38$/年 |
2019 年 12 月 | 2.00 $ | 650.1 h | RI 購入に伴い、停止時間を 03:00~06:00 に変更 |
2020 年 1 月 | 2.00 $ | 651.0 h | - |
2020 年 2 月 | 2.00 $ | 609.0 h | - |
2020 年 3 月 | 2.00 $ | 651.0 h | - |
2020 年 4 月 | 2.00 $ | 630.0 h | - |
2020 年 5 月 | 2.00 $ | 650.1 h | - |
2020 年 6 月 | 2.01 $ | 630.0 h | - |
特記事項補足
上記年表の特記事項において、下記で少し補足します。
2019 年 1 月
利用開始です。最初は何も考えず「t2.micro」 & 24 時間 365 日稼働で動かしていました。案の定、費用が 10 $ 越えをしていますね。この費用がきっかけとなって、次月以降に費用見直しが走ります。
また、EC2 と同時に Route53 (パブリックホストゾーン) の利用も開始しています。ドメインは AWS 以外の場所で購入 (1,000 円/年 程度) しているので、AWS 的にはパブリックホストゾーンの利用費用のみ発生しています。利用費用は「0.5 $/月」です。
ちなみに、利用開始時のシステム構成は下記のとおりです (今も特に変わっていません)。
項目 | 値 |
---|---|
OS | AmazonLinux2 |
Web | nginx |
DB | sqlite3 |
言語 | Python (Django) |
AP | uWSGI |
備考 1 | SSL は nginx に実装 |
備考 2 | cron で 1 日 1 回 sqlite の dump を S3 にバックアップ |
(参考)
AWS Amazon Linux2 で Django 2.2以降の環境を構築する
2019 年 2 月
インスタンスタイプを t2.micro から t2.nano に見直しました。このとき、はじめて t2.nano の存在を知りました。。。
(参考)
【速報】新EC2インスタンスタイプt2.nanoが発表されました!
2019 年 4 月
夜間帯 (0:00~6:00) は停止するようにしました。Lambda + CloudWatch で時限停止・時限起動するようにしています。
ちなみに停止中は Sorry 画面を表示するようにしています。Sorry 画面は S3 の静的 Web サイトを使っていますが、HTTPS アクセスだったので CloudFront もかませています。実装に関しては下記のサイトが非常に参考になりました。
(参考)
HTTPS + Route53フェイルオーバーでsorryページを表示する
2019 年 5 月
インスタンスタイプを t2.nano から、次世代の t3.nano に変更しています。
また、この時まではパブリックアクセスのために EIP を利用していました。EIP は、1 つまでなら無料ですが、条件付きです。その条件というのは「EIP が使用中であること」。つまり、EIP を付与した EC2 インスタンスは、稼働させ続ける必要があります。EC2 を動かせば EC2 の稼働費用が発生し、EC2 を止めれば EIP の非稼働費用が発生するということです。2019 年 4 月に夜間帯停止の運用を始めたため、この仕様に気付くことができました。
というわけで、コストをおさえるために EIP の使用を停止しました。代わりに「パブリック IP を Route53 に自動登録するスクリプト」をサーバに仕込みました。このスクリプトはサーバ更新の度に起動され、メタデータから (起動の度に毎回変化する) パブリック IP を取得して、Route53 の A レコードを自動更新してくれます。
(参考)
【EC2】T系ファミリーの概要と、T2,T3の仕様の違いについてのまとめ
EIPで料金発生するパターンとしないパターン
2019 年 11 月
1 年通して使うだろうなという目処が立ったので、さらなるコスト低廉を目指して t3.nano の RI (Reserved Instance) を購入しました。38 $/年です。
(参考)
RI(リザーブドインスタンス)について出来るだけ簡単にまとめてみた
2019 年 12 月
RI 購入に伴い、従量課金から解放されました。つまり、1 日 1 時間動かそうが 24 時間動かそうが、すべて前払いの定額……ということです。これによって夜間停止の運用は不要となりましたが、下記の理由から夜間停止を完全廃止とせず、時間短縮という形の変更に留めました。
- 再起動によって不要メモリなどを解放したい
- 常時稼働前提じゃないシステムの方が、今後 拡張しやすい (AutoScale など)
- 折角 Sorry ページの仕組みを作ったので、もったいない
- 折角 パブリック IP 自動更新の仕組みを作ったので(ry
現在の利用費
そんなわけで、現在 (2020 年 6 月) の利用費は下記のとおりです。
項目 | 金額 | 備考 |
---|---|---|
EC2 | 0.00 $ | RI 利用のため 0 |
EBS | 1.31 $ | EBS & スナップショット 3 世代 |
IoT | 0.01 $ | Raspberry Pi 検証用 |
Route53 | 0.50 $ | Hosted Zone 利用料 |
消費税 | 0.19 $ | |
合計 | 2.01 $ |
上記に加えて、年額で下記が発生しています。
項目 | 金額 | 備考 |
---|---|---|
RI 利用料 | 38 $/年 | t3.nano |
独自ドメイン使用料 | 10.13 $/年 | 1,089 円/年を 2020/07/04 時点の為替レートで換算 |
合計 | 48.13 $/年 |
年額費用を月割りすると、だいたい「4.01 $/月」。月々が「2.00 $/月」強なので、合算して 「6.00 $/月」強 が、今々の AWS 利用料となります。
まとめ
以上、約 1 年半の AWS 利用費のふり返りでした。最初の「13.79 $」に比べれば、だいぶスリム化できている気がします。
費用低廉を考える中で、AWS のコストに関する細かい仕様を学べることができました。(文字通り) 身銭を切ったことで、学習に対する真剣度が上がったのかもしれません。「コスト管理」はクラウドサービスの命題でもあるので、この経験は今後強く生きてきそうな気がします。