[AWS] AWS 利用費 の変遷をふり返ってみる

# はじめに
\_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以降の環境を構築する](https://qiita.com/Ajyarimochi/items/674b703622155e46dc1d)

### 2019 年 2 月
インスタンスタイプを t2.micro から t2.nano に見直しました。このとき、はじめて t2.nano の存在を知りました。。。

(参考)
[【速報】新EC2インスタンスタイプt2.nanoが発表されました！](https://dev.classmethod.jp/articles/new-instance-type-t2nano/)

### 2019 年 4 月
夜間帯 (0:00～6:00) は停止するようにしました。Lambda + CloudWatch で時限停止・時限起動するようにしています。

ちなみに停止中は Sorry 画面を表示するようにしています。Sorry 画面は S3 の静的 Web サイトを使っていますが、HTTPS アクセスだったので CloudFront もかませています。実装に関しては下記のサイトが非常に参考になりました。

(参考)
[HTTPS + Route53フェイルオーバーでsorryページを表示する](https://qiita.com/t_okkan/items/edf531aac8cfe2ff41ab)

### 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の仕様の違いについてのまとめ](http://blog.serverworks.co.jp/tech/2019/02/25/burstable-performance-instances-generationgap/)
[EIPで料金発生するパターンとしないパターン](https://dev.classmethod.jp/articles/cost-of-eip/)

### 2019 年 11 月
1 年通して使うだろうなという目処が立ったので、さらなるコスト低廉を目指して t3.nano の RI (Reserved Instance) を購入しました。38 \$/年です。

(参考)
[RI（リザーブドインスタンス）について出来るだけ簡単にまとめてみた](https://dev.classmethod.jp/articles/ri-2017-11/)

### 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 のコストに関する細かい仕様を学べることができました。(文字通り) 身銭を切ったことで、学習に対する真剣度が上がったのかもしれません。「コスト管理」はクラウドサービスの命題でもあるので、この経験は今後強く生きてきそうな気がします。