Posted at

今更でもいいので、とにかくAWSコスト削減を始めてみる

IT企業であれば基本的に避けて通れないのものの一つとしてサーバー(AWS/CGP/Azure...)費用があると思います。

特に商用環境となると複数のサービスを複数インスタンス/クラスターで運用することとなり、月々の出費もそれなりにあると思います。 :money_with_wings:

その一方で、特にスタートアップの小規模組織におけるインフラとは、「ひとまずサービスが立ち上がればok」という感じで捉えているところも多いのではないでしょうか。

例えば、新しいサービスを立ち上げるためにサクッとEC2とRDSを立て、稼働後はほぼ触らない(というか、アプリ実装が忙しくて忘れてる...)など。

それゆえ、サービス立ち上げ時のとりあえずの設定のまま稼働していることが割とあるのではないかと思っています。

それゆえ、非常に無駄な費用を垂れ流していることに気づかないことも多々あったり。。

というわけで今回は、サクッとできるAWSコスト削減のTIPSをまとめてみました。


現状把握

コストやすくするためにも、何はともあれ現状を見ましょう。

具体的には下記の順序で画面遷移をすると、AWSの各種サービス別の月額費用がわかります。

1. マネジメントコンソールを開く

2. Billingを選択する
3. 左サイドバーからCost Explorerをクリックする
4. Monthly Spend by Service Viewをクリックする

Screen Shot 2019-04-07 at 14.41.29.png

どこにどれだけかかっているかは運営するサービスによって様々かと思いますが、ひとまずこれで現状を見ることができます。


すぐに始められるTIPS


RI(リザーブドインスタンス)を購入する

AWSにはRI(リザーブドインスタンス)というものがあります。

これは、特定のインスタンスタイプ(例:ubuntu/t2.medium/東京リージョンのEC2を1つ)を継続して(1年or3年)使い続けることで、大幅な割引を受けることができる制度です。

RIは特定のサーバー(例:インスタンスIDがi-hogehoge123のEC2)に紐づくのではなく、RI購入時に指定した条件(例:インスタンスのOS/サイズ/AZなど)に合致するサーバーがあると、自動で割引が適応されます。

支払い形態は 全額前払い/一部前払い/前払いなしの3種類あります。

またRIはEC2/RES/Redshift/ElastiCache(これだけ前払い形態はない..)などのサービスで提供されています(他にもあるかも)。

AWSいわく(下記はEC2の場合)、


RI の仕組み

EC2 の RI では、時間単位の料金に割引が適用され、EC2 インスタンスのキャパシティーを予約できます。EC2 インスタンス使用の属性がアクティブな RI の属性に一致すれば、RI の割引料金が自動的に AWS 請求書に適用されます。

アベイラビリティーゾーンが指定されている場合、EC2 では RI の属性に一致するキャパシティーが予約されます。お客様が予約した RI のキャパシティーは、これらの属性に一致するインスタンスを実行することで自動的に利用されます。

また、キャパシティーを予約せずに、リージョンを対象範囲とする RI を購入することもできます。リージョンを対象範囲とする RI では、リージョン内のすべてのAZ のインスタンスの使用とインスタンスサイズに対して RI の割引が自動的に適用されるため、RI の割引料金を簡単に利用できます。


とのことです。

EC2のリザーブドインスタンスによると、最大で60%ほど安くなるとのことです。

Screen Shot 2019-04-07 at 15.01.00.png

スタートアップ企業で前払いでドカンと支払う余力がなくても、「前払いなし」でRIを購入することで、イニシャルコスト無しでサーバーの費用を抑えられます(前払いした方が割引額は大きいと思いますが)。

ので、商用稼働しているサービスはひとまず契約期間1年/前払い無しでやってみるのは断然ありだと思います。

RI購入の具体的な手順は下記が非常に参考になりました。

DevelopersIO リザーブドインスタンスの購入手順

ただし注意点としては、 RIは購入後のキャンセルができない (出品はできるらしい)ので、その点は注意してください。


不要なインスタンスの削除やスケールダウン

よほど熱心にインフラのコード化をしていない限り、大なり小なり、使っていないのに起動しっぱなしのサーバーがあったり、ステージング環境のEC2がオーバースペックだったりします。

ので、今動いているサービスを洗い出して、不要なものは削除し、無駄にスペック積んでるものはスケールダウンしましょう。

私の経験した中では、ステージング環境のRDS Auroraのreadクラスターを削除したり、同じくステージングに繋がってるElastiCache(Memcached)がcache.r3.largeだったのをcache.t2.mediumに変更したりしました。

またEC2を止める場合は、EC2を停止してもそのボリュームの保管料金はかかり続けるので、EBS(Elastic Block Store)も削除することで、より無駄な費用を削減できます。

いきなり削除するのが不安な場合には、EBSスナップショットを取った上で削除することで対処できます。

EBSに関しては下記が参考になりました。

インスタンスがすべて停止しているのに EBS に課金されるのはなぜですか。


雑感

上記にあげた事項は、インフラを専属でやっている方にしてみれば当たり前ですが、小規模の会社では以外とやられていないので、是非ともご自身のインフラの状態を一度のぞいてみることをお勧めします。

今私が所属している企業でもひとまず上記のようにRI購入と、確実にいらないサーバーを整理しました。

対応してから日が浅いので1ヶ月の費用がどれほど安くなるかはまだわからないですが、想定で1,000USD~1,500USD/monthのコストを削減できそうです。 :money_mouth:

逆にいうと今までこれだけ無駄なお金が流れていた...。 :money_with_wings: