弊社のAWSコストが順調に高くなっており、
コストを見直しする作業をこの度行いました。
- 1.まずはコスト配分タグの設定
- 2.料金が高い順に無駄なところがないか確認していく
- 3.削減対象の検討
- 4.EBSのタイプ変更
- 5.EC2,RDSの夜間稼働を自動停止
- 6.ALBにホストベースルーティングを設定して台数を削減
- 7.S3にライフサイクルポリシーを設定しファイルを削除
- 8.削除したくない古いファイルはS3からGlacierに移動
- 9.Savings Plans と Reserved Instance の適応状況の確認
- 10.アカウントごとの適応しているサポートプランの見直し
- 11.AWSリセールサービスの申し込み
- 12.全く使っていなかったリソースの削除
- 所感
1.まずはコスト配分タグの設定
現状でどこのシステム・何のサービスがどれだけかかっているかを把握しないことには進められないと感じました。
請求書を見ることでコストの把握もできますが、ここで確認できるのはサマリーされた金額なので、個別での料金を出すことを最初に行いました。
これは「コスト配分タグ」を有効化することで実現できました。
幸いにも弊社ではタグに「Name」を入れる運用をしていたため、このNameタグを有効にすることで、
・タグの入ったサービスが日ごとでいくらかかっているのかを
・現在サービスをいくつ動かしているのか
といったことがCostExplorer上で確認することができるようになりました。
但し、Nameタグを入れていないものも多々あり、Nameタグを仕込んでいく作業も必要になりました。

2.料金が高い順に無駄なところがないか確認していく
コスト配分タグによって個別での料金が確認できるようになったため、CostExplorerから日ごとで何のサービスがどれだけ高いのかを確認していきました。
ここから判明したこととして、
・一部のS3バケットで思った以上に費用が発生している
・EBSもサイズが大きいものは結構費用がかかっている
・バックアップとして削除せずに放置していたものがある(RDSやら古いスナップショットやら)
ということもわかりました。
3.削減対象の検討
削減のタスクフォースを立ち上げ、各担当者で改善点を持ち寄って検討を行いました。
・NATゲートウェイの配置が適切であるか
・RI、SPの期限チェック、適応状況の確認
・EC2,RDSの夜間停止(サービスを止めても問題ないか)
・不要なリソースの棚卸
・バケットのファイル削除
といったように、思った以上に削減できるポイントはあると期待できました。
4.EBSのタイプ変更
タイプを落とすことによって、1GBあたりの単価が安くなります。
弊社では全てgp2を使用していたのですが、これを全てgp3にすることにより、月あたり5000円程度の削減見込みとなりました。
EC2の停止等は発生させず、オンライン上ですぐに変えられるため、簡単な対応でした。
5.EC2,RDSの夜間稼働を自動停止
こちらはCloudWatchEvent(AmazonEventBridge)にて、スケジュール実行を入れることにより実現しました。
EC2は複数インスタンスを1つのスケジュールにまとめることができますが、RDSは1つのインスタンスしか指定ができないため、複数インスタンスの場合はスケジュール設定が多くなります。
こちらは夜間帯を停止することで、一部インスタンスに関しては料金が約2/3程度に抑えることができました。
注意点として、RI購入していない場合にはEC2がキャパシティオーバーで立ち上がらないことがあります。
この対策として、スケジュール実行を2回かけることによって回避ができました。
6.ALBにホストベースルーティングを設定して台数を削減
弊社環境では用途毎でALBを立てており、ALBの台数が10台以上配置されていました。
ホストベースルーティングをシステム毎のALBに入れることにより、ALBをまとめることができました。
今回は6台のALBを削減し、約1万円の削減効果が期待できます。
但し、ALBのログを出力している場合は内容が混在してしまったり、CloudWatchで状態監視している場合はどこから発生したアラートかがすぐにはわからないことが懸念点ではあります。
7.S3にライフサイクルポリシーを設定しファイルを削除
一部バケットが数年前から毎時でファイルがため込まれており、
1バケットだけで月に数千円かかっている状態になっているものがいくつかありました。
古いものは全く使っていなかったため、ファイル削除設定を入れることによって料金が削減できました。
弊社ではバージョン管理設定をバケットに入れているものがあまりないのですが、今回たまたまバージョン管理設定が入っていたため、ライフサイクルルールでのファイル削除が思ったようにいかずに苦戦しました。
・オブジェクトの現行バージョンを有効期限切れにする
・オブジェクトの非現行バージョンを完全に削除
バージョン管理設定がある場合はこの2つをサイフサイクルルールに入れることでファイル削除が可能となりました。
8.削除したくない古いファイルはS3からGlacierに移動
古いファイルではあるものの、重要なファイルとなっているものが存在していました。
このようなものはGlacierに退避を行うこととしました。
しかしながら1ファイルあたりのサイズは小さく、ファイル数が非常に多い状態となっていました。
Glacierは1ファイルごとにメタ情報が付与されてしまい、思ったほどの効果が得られなくなる恐れがあるため、1か月分をzipで固めてからGlacierに移動することとしました。
Glacierを利用する場合は、コストや利用方法で確認する点が多いので、十分な考慮することをお勧めします。
9.Savings Plans と Reserved Instance の適応状況の確認
一時的なインスタンスを除き、全てのインスタンスで
Savings Plan もしくは Reserved Instance が当たり前のように適応されているだろうと
認識していたのですが、
以外にも適応されていないインスタンスがありました。
作業の漏れや計算方法の誤りが主な原因になりますが
全額割引かれているか、適応状況の確認については、やるべき項目であると思います。
10.アカウントごとの適応しているサポートプランの見直し
各アカウントでのAWSサポートが、特に理由なくビジネスに加入していたのですが、
問い合わせをほとんど行わなかったため、デベロッパーに変更しました。
無意識にビジネスレベルのサポートをつけてしまいがちですが、サポートプランの選択も重要です。
これにより数千円の削減となります。
11.AWSリセールサービスの利用
AWS全体の金額を安くするために非常に有効な手段となります。
利用するパートナーさんにもよりますが
一部機能が使用不可(主に請求関係の画面)となってしまうことや
rootアカウントを提供することによる考慮が必要になりますが、
月々のAWS請求金額から数%安くしてもらえるサービスとなります。
また、各社のルールが異なりますが、SPやRIも割引が効くようになるため
かなりのコスト減が期待できます。
12.全く使っていなかったリソースの削除
これはどのタイミングでもできますが、
棚卸の時などでもないと本当に使ってるかどうかがわからないため一旦保留としてしまいがちです。
今回がまさに棚卸のタイミングでした。
・不要なEBS、スナップショットの削除
・一時的に利用していたEIPが未アタッチの状態で残っていた
・過去にネットワーク移行した際の、VPN接続定義が不要に残っていた
・立ち上げる予定がないインスタンス
等々、不要なものもなくなりスッキリしました。
所感
今回初めてAWSコスト削減対応を行いましたが、
意外にも削減できるところが多かったと感じました。
AWS試験でもコスト削減の問題が出題されることが多く、重要なポイントになってきます。
こういう実践ができることは非常に良い活動でした。
今後も定期的に見直しを行い、不要なコストが発生していないかを確認していきます。
