AWS Configのコストを95%削減しつつ記録を残すことを諦めない

はじめに

SREチームの大木( @2357gi )です。 ECS Serviceのオートスケーリングやバッチなど、ECS Taskの起動停止が頻繁に行われる環境でAWS Configを有効にしていると、AWS Configのコストが無邪気に跳ね上がってしまうことがあります。

インターネット上では特定のリソースを対象外にすることによりコストを抑える手法が多くの記事として見かけますが、対象外にするとAWS Config側で「リソースタイムラインの表示」ができなくなったり、Security hubで使用する情報の記録を行うことができなくなってしまいます。

そこで、特定のリソースを「記録から除外」するのではなく、「日時記録に設定」することにより前述した懸念点を解消しつつ、コスト削減をすることができたので紹介します。

経緯

我々のプロダクトでもサービスのスケールや機能拡大に伴い AWS Configのコストが無視できない値になってきました。

前述した通りECS Serivceやスケジューリングバッチ用のECS Taskの起動停止が積み重なっており、主に以下のリソースの変更が多く記録され、コスト増加に繋がっていました。

  • AWS EC2 NetworkInterface
  • AWS EC2 SecurityGroup
  • AWS EC2 Subnet
  • AWS EC2 VPC

縦軸が記録された変更数。上記グラフの作り方は後述

2月初めからレコード数が爆増していることがわかります。 機能追加によるバッチ実行数の増加の影響です。

当初はこれらのリソースタイプの記録を除外しようとしたのですが、前述した「リソースタイムライン」や Security Hubなどの懸念点がありました。

が、2023/11/27 のアップデートで AWS Configの記録期間を「継続的な記録」だけでなく「日次での記録」を指定できるアプデが追加されていることを発見しました。

aws.amazon.com

「日次での記録」は「継続的な記録」に比べてリアルタイム性が落ちたり、1日に複数回の変更が行われたとしても最終的な日次の記録しか残らないと言ったデメリットがあります。

しかし、その日次データもSecurity Hubやリソースタイムラインのデータとして使用することはできるので、今回はメリデメを比較し変更量が多いリソースタイプに限って日次に変更することにしました。

先述したリソースを日次記録に変更

結果として、懸念点が解消された状態で、AWS Configのコストを95%ほど抑えることができました。やったね

日次にしたことによりレコード数を大幅に抑えられている

コストの変化

おまけ

上記のようなレコード数グラフの作り方

  1. CloudWatch コンソールに移動します。
  2. 左のナビゲーションメニューで、[ダッシュボード] をクリックします。
  3. [ダッシュボードの作成] をクリックします。
  4. ダッシュボードに「aws-config-dashboard」という名前を付け、[ダッシュボードの作成] をクリックします。
  5. [棒] グラフを選択します。
  6. [メトリクス] を選択し、[次へ] をクリックします。
  7. 右側のセクションで、[数式] を選択し、[空の式で始まる] を選択します。
  8. 以下の数式を入力し、[適用] をクリックします。
SORT(SEARCH('{AWS/Config,ResourceType} MetricName="ConfigurationItemsRecorded" NOT ResourceType="All"', "Sum", 86400), SUM, DESC, 10)
  1. [ラベル] 列で、名前を「Resource Type」に変更します。

参考: AWS Config がリソースタイプによる記録の除外に対応 | Amazon Web Services ブログ