コスト管理してますか
AWSのほとんどのサービスは従量課金制です。
月初の請求書を見るのにドキドキしていませんか?
AWSコスト管理でのしくじりにはパターンがあると思います。
パターン別にどのような対策をすればいいか考えてみましょう。
1. なんとなく立ち上げたリソースを放置
個人でAWSを利用して検証環境を作ったりするとありがちなパターンです。
コンピューティングリソースだけを使用しているとAWSのコンソール画面を使用せずコストの確認が低頻度になることはよくあることですが、コストが予想より大きく超えてしまっていては後の祭りです。(先月やってしまったばかりとは言えない)
1. 対策
このパターンで必要なのは通知です。
AWS Budgetは予算を超えるコストを検出するとメールで通知してくれます。
ここで忘れていけないのはきちんと届くメールアドレスを設定する事、フォルダを分けるなどしてメールに目を通せるようにしておくことです。
リソースごとに通知したりSlackやTeamsなどに送信したい場合はCloudWatchとSNS、Lambdaなどを組み合わせてカスタムの通知用リソースを作ります。
2. 料金体系を知らなかった
例えばEC2では手軽にインスタンスタイプを変更することができるのですが、料金体系を知らずに不必要にスペックの高いタイプを選んでしまうことがあります。
オンデマンドEC2のインスタンスタイプはサイズを1つ上げる度に料金が2倍に跳ね上がるので油断は禁物です。
また、データI/Oやストレージ料金が別に加算されるリソースはデータを頻繁に入出力していると知らないうちにコストが跳ね上がってしまう事もあるので気を付けましょう。
2. 対策
リソースのコストは事前に計算しましょう。
AWS Pricing Calculatorは現行のAWSの料金で期間ごとの請求の目安を計算することができるツールです。
とはいっても、全部を計算し尽くすことは難しいので1.の対策と組み合わせて見通しをもって利用することが大切です。そろばんが苦手な方は、AWS Cost Optimizerなどのレコメンデーションツールを使用して最適なパフォーマンスに調整していくのが良いと思います。
3. 推奨されない再帰的処理を使ってしまった
再帰的処理というものは、無限ループを発生させるリスクをはらんでいます。
たとえば、S3のオブジェクトがアップロードされたことをトリガーにオブジェクトを生成する処理を作ったとします。
この生成処理をアップロードされたオプジェクトと同じバケットで実行するとどうなってしまうでしょうか。
もちろん鼠算式にオブジェクトが増えていってしまい、収拾がつかない事態になってしまいますよね。
早期に気づけばよいのですが、長時間放置すると万円以上の単位で請求が来ることを覚悟しなければなりません。
3.対策
コードレビューをしましょう。
そして、実行結果は必ず確認しましょう。
最近はLambdaが再帰的処理を永久ループしていることを検知して自動的に停止する機能もあるようなので、このようなミスを犯しても過大な請求が来るリスクは低くなっているといえます。
[アップデート] Lambda 関数が再帰ループを検出して停止するようになりました
4. セキュリティでミスしてしまった
これもやってはいけないパターンをやってしまった例です。
よくあるのはアクセスキーなどのAPIキーを外部に公開してしまうミスです。
これによって悪意のある仮想通貨マイニング実行の被害者になってしまったり、情報漏洩による損害を被ってしまいます。
※情報漏洩自体はコストの管理に直接関係ありませんが、個人情報を収集するサービスでは損害賠償請求など間接的にコストがかかるケースもあるため記載させていただきました。
4. 対策
何度も口酸っぱく言われていることだとは思いますが、一番有効なのはリソースに対するアクセスは最小権限にとどめておくことです。
これによってたとえクレデンシャル情報が漏洩したとしても被害を最小に抑えることができます。
また、Systems Manager Parameter Store、Secrets Managerなどを活用してクレデンシャルの直書きをしないことも有効な手段です。
まとめ
コスト管理は1日にしてならずです。
AWSはコスト削減の手段をたくさん用意してくれていますので、これをきっかけにコスト管理を意識していただければ幸いです。