不要なスナップショットによるコスト増を防ぐ定期監視の仕組みを構築しました。

はじめに

こんにちは、SE本部の加藤です。現在はインフラグループに所属し、BUYMAAWS基盤を運用しています。 この記事は Enigmo Advent Calendar 2025 の 1日目の記事です。

背景課題

BUYMAAWS運用を続ける中で、RDSのバージョンアップ作業等で取得した手動スナップショットが、複数のAWSアカウントに作業後も削除されずに残留しており不要なストレージコストを生んでいました。

スナップショットを自動削除するためのマネージドサービスの機能がないか調べてみたものの、今回の要件に当てはまる機能は存在しないようでした。

そのため、複数アカウントのスナップショットを一括で監視し、通知する仕組みを作成することにしました。

システム構成

本監視システムは、親アカウントに主要なリソースを集約し、クロスアカウントアクセスによって子アカウントの情報を取得する構成です。 システム全体はCloudFormationで管理され、主に以下のリソースで構成されています。

概要

親アカウントのLambdaをスケジュール実行し、クロスアカウントで子アカウントのRDS手動スナップショットを取得する構成です。 作成から一定期間経過した古いスナップショットを検出してSlackに通知します。長期保存対象となる管理用タグも設定しています。

主なAWSリソース

リソース種別          説明                                                           
CloudFormation  ECRリポジトリ、Lambda、EventBridge、Secrets Manager、IAMロールなど全リソースを管理。
Lambda関数        コンテナイメージとしてECRに格納。スナップショット検出とSlack通知を実行。                     
ECR              Lambdaで使用するコンテナイメージのリポジトリ。                                   
EventBridge      定期スケジュールでLambdaを起動。                                           
Secrets Manager Slack Botの認証トークンを管理。                                       
IAMロール(子アカウント)  親アカウントのLambdaがAssumeRoleするためのロール。RDSスナップショット読み取り権限を付与。   

処理の流れ

本仕組みは、以下の手順で動作します。

1. スケジュール実行とクロスアカウントアクセス

EventBridgeによるスケジュール実行(毎月1日午前9時)でLambdaが起動します。 起動した親アカウントのLambdaは、子アカウントに設定したIAMロールをAssumeRoleし、クロスアカウントでスナップショット情報を取得します。このロールはrds:DescribeDBSnapshotsなどの必要な権限を持ち、複数アカウントの監視を可能にします。

2. 不要スナップショットの検出とタグによる除外判定

取得したスナップショットに対し、以下のロジックで削除候補を抽出します。

  • 経過日数による抽出: 7日以上経過した手動スナップショットを抽出します。
  • タグによる長期保存管理: 手動スナップショットに SnapshotRetain: true タグが付与されている場合、長期保存対象としてSlack通知内で「保持対象」として表示します。これにより、必要なスナップショットの誤削除を防ぎます。

3. コストの推定計算

検出されたスナップショットに対して、その推定ストレージコストを計算します。

  • 料金計算ロジック: スナップショットごとにストレージサイズとエンジン種別(Auroraかどうか)で単価を切り分けています。
  • 全スナップショットの合計推定コストを計算し、Slack通知に含めることで不要スナップショットのコスト影響を視覚化します。

4. Slack通知

抽出したスナップショット一覧、推定コスト、およびエラー発生時はその詳細をSlackへ通知します。Slack通知に利用するBotトークンはSecrets Managerで安全に管理されています。


Slack通知例

スナップショット検出時

対象なし時

実行エラー時


まとめ

これまで、不要なAuroraやRDSの手動スナップショットの削除忘れにより、全アカウントを合計すると、数万円単位のストレージコストが毎月発生していました。 本仕組みの導入により、これらの古いスナップショットを定期的に自動検知し、Slackに通知することで削除忘れを回避することが可能になりました。 結果として、不要なストレージコストの削減が実現し、無駄な支出を抑制できました。

明日の記事の担当は 人事総務グループ の 廣島 さんです。お楽しみに。


株式会社エニグモ 正社員の求人一覧

hrmos.co