はじめに
昨年の12月から約10ヶ月ほど、とあるベンチャー企業のAWS環境を改善していました。今はその会社にいないのですが、会社の Jira と Confluence 以外にも知見をまとめておいたほうが良いかなと思ってアドベントカレンダーに書くことにしました。
組織の状況
以前にエンジニアが大量に退職したことにより、大量のメンテナンスできないソースコードがありました。それとともに、何の用途で動いているか分からないEC2サーバーもたくさんありました。 Technology & Infrastructure チーム(以下TIチーム)というのがあったのですが、障害対応をする人たちと数年がかりで新しい基盤を作っている人たち(たぶん目前の問題を諦めた人々)がいて、いわゆるサバイバルモードにありました。ちなみにアプリケーションのバグの量も半端なく、バグ修正チームが数年単位で存在しています。
このTIチームを解体することになり、私がAWSを触ってみたいというわりと個人的な理由と、直前にサービス系で使っていたElasticsearchの検索性能改善のタスクをやっていた時にインフラ周りに改善の余地がある、カネになりそうな仕事の匂いがしたのでチーム名を「SRE」として、実質1人で AWS環境を見直すことになりました。
成果
4万ドル/月ほどかかっていたAWSの費用を半年ほどで 2万ドル/月くらいにして、社長に褒められました。
最初にやったこと
SREのオライリーの青い本は分厚すぎて読む時間が十分にとれなかったのと、NewRelicを使っていたこともあって、SLI/SLOの章だけをまず熟読し、SLI/SLOを決めました。そもそもサービスの非機能要件はいままで定められておらず、それにより営業がお客様に説明する際にも言ってることがマチマチになっていた、ということもあり、部門ごとのリーダーを集めたミーティングでSLI/SLOについてディスカッションし、合意をとりました。障害対応基準・レスポンスタイムなど簡単な指標だけを整備してコンフルエンスにまとめました。そして、NewRelic で毎日監視したり、Cloudwatchのアラームを見直すようにしました。
AWSの営業に連絡
営業の方はとても親身にしてくれて改善点・改善方法をたくさん教えてくれるので仲良くしましょう。ここで Trusted Advisor や Business Support のお試しプランを教えてもらって、いろいろとはかどりました。
特に Trusted Advisor をBusiness Support で使うとSREで必要な業務が見えるようになったりするのでおすすめです。
コスト削減
JAWS-UG 六本木一丁目支部に参加した時に知り合った方と、JAWS-UG南武線グループ(非公式)でお会いした際に会社のシステムについて相談したら、「チョット何言ってるかワカラナイんですが、運用コストがかかりすぎですねえ・・・」というリアクションをされたので、一般的に考えてヤバいんだな、と思いました。
AWS にはコストを分析してアドバイスしてくれるツールや、今では無駄遣いを指摘してくれる「Resource Optimization Recommendations」がありますが、当時はまず月額料金の高いサーバーからすべてリストアップして、用途・インスタンスタイプ・月額料金・今後どうするかを書き出しました。今後どうするかについては、だいたい以下の形に落ち着きました:
- 今すぐ停止・削除する(psとかでプロセス調べて、使ってないとわかればすぐ)
- 使ってるやつは年間契約する
- 別のマネージドサービスなどに置き換える(古いリアルタイム通信用nodejsのプロキシ用途のEC2はALBに、WordpressサーバーはLightsailに、など..)
- インスタンスタイプをスケールダウンする(スケールダウンについてもAWSのRecommendation である程度わかります。htopとかで見ながら使用状況を観察. NewRelic Infrastructureでも横断的に監視すると分かります)
- 5年以上塩漬けになってたEC2は paravirtual の仮想化方式のやつも多く、これらはちょっと苦労してスケールダウンしました EC2の t1.microをt2.microに変換する
あと、もちろんオートスケールするという選択肢もあったのですが、ちょっと難しそうだったので後回しにしました。
ことあるごとにやったこと
以前のTIチームにはなぜか AWSに関する権限が十分に与えられていなかったので、その都度グループチャットでCTOに連絡して権限付与をお願いしました。10回くらいやったら、だいたいのことができるようになりました。
やればよかったこと
[AWS改善マップ] (https://dev.classmethod.jp/cloud/aws/kaizen-map/)
在任中は、AWS Config / AWS GuardDuty / Business Support の1ヶ月お試し あたりを入れました。GuardDuty を入れたら、EC2がビットコイン採掘のbotとして使われていることがわかって焦りました。。
最後に
たぶん上記のような事例はあまりないと思うのですが、もし古い高コストAWS環境でお困りの方がいらっしゃいましたら、ご相談ください。
参考にしたページ
[EC2インスタンスタイプ比較] (https://www.ec2instances.info/)