1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

高額請求回避!AWS請求額を毎日自動通知する

Posted at

はじめに

AWSの利用料金は、気づかないうちに想定を超えることがあります。特に複数のサービスを利用している場合、どのサービスでコストが発生しているかを把握することは困難です。

本記事では、AWS CDK(TypeScript)を使用して、前日のAWS利用料金をサービス毎に集計し、毎日定時にメール通知するシステムの構築方法を解説します。

システム概要

解決する課題

  • AWS Cost Explorerの手動確認の手間
  • サービス毎のコスト内訳の可視化不足
  • 不要なリソースの消し忘れによる無駄なコスト

システムの特徴

  • 毎日18時(JST)に前日の請求額を自動通知
  • サービス毎の詳細な利用料金を表示
  • 月額約0.30ドルの低コストで運用可能
  • CDKによるインフラのコード管理

アーキテクチャ

システム構成図

データフロー図

コンポーネント詳細

実装アーキテクチャ

プロジェクト構造

aws-cost-alert/
├── bin/
│   └── alert-cdk.ts           # CDKアプリケーションエントリポイント
├── lib/
│   └── alert-cdk-stack.ts     # スタック定義
├── lambda/
│   ├── cost-tracker/
│   │   └── index.ts           # Lambda関数
│   └── layers/
│       └── aws-sdk/           # AWS SDK Layer
├── cdk.json
├── package.json
└── tsconfig.json

CDKスタック構成

主要なリソースとその役割:

  • SNS Topic: メール配信の管理
  • Lambda Function: Cost Explorer APIからデータ取得と整形
  • EventBridge Rule: 定時実行のスケジューリング
  • IAM Role: 必要最小限の権限管理

Lambda関数の処理フロー

通知メールの形式

メール件名

AWS Daily Cost Report - $12.34 USD (2024-12-14)

メール本文の構成

AWS Cost Report for 2024-12-14
==================================================

Total Cost: $12.34 USD

Service Breakdown:
--------------------------------------------------

Amazon EC2:
  $8.5678 USD (69.4%)
  
Amazon RDS:
  $2.3456 USD (19.0%)
  
Amazon S3:
  $0.9876 USD (8.0%)
  
AWS Lambda:
  $0.4390 USD (3.6%)

--------------------------------------------------

Tips:
• Review unused resources in high-cost services
• Consider using Reserved Instances or Savings Plans
• Enable auto-shutdown for development environments

デプロイ手順

前提条件

  • AWS CLIの設定完了
  • Node.js 18以上のインストール
  • AWS CDK CLIのインストール

セットアップコマンド

# 依存関係のインストール
npm install

# CDKブートストラップ(初回のみ)
npx cdk bootstrap

# スタックのデプロイ
npm run deploy

SNSサブスクリプションの確認

デプロイ完了後、登録したメールアドレスにAWS SNSから確認メールが送信されます。メール内のリンクをクリックしてサブスクリプションを有効化する必要があります。

カスタマイズ方法

通知時間の変更

EventBridgeのcron式を修正することで通知時間を変更できます。

希望時間(JST) cron式 (UTC)
朝9時 0 0 * * ? *
昼12時 0 3 * * ? *
夕方18時 0 9 * * ? *
夜21時 0 12 * * ? *

集計期間の変更

デフォルトでは前日のデータを集計しますが、週次や月次の集計に変更することも可能です。

フィルタリング条件

0.01ドル未満のサービスは除外していますが、この閾値は調整可能です。また、特定のサービスのみを対象にすることもできます。

トラブルシューティング

よくある問題と対処法

問題 原因 対処法
メールが届かない SNSサブスクリプション未確認 確認メールのリンクをクリック
Cost Explorer APIエラー APIが無効 AWSコンソールでCost Explorer APIを有効化
Lambda タイムアウト API応答遅延 タイムアウト時間を延長
権限エラー IAMポリシー不足 Cost Explorer読み取り権限を追加

ログの確認方法

CloudWatch Logsで以下のロググループを確認:

  • /aws/lambda/alert-cost-tracker

ベストプラクティス

セキュリティ

  • IAMロールは最小権限の原則に従う
  • SNSトピックへのアクセスを制限
  • 機密情報をログに出力しない

運用

  • 定期的にコスト傾向を分析
  • 異常値検知のロジックを追加
  • 複数の通知先を設定してリダンダンシーを確保

拡張性

  • タグベースのコスト配分を活用
  • 部門やプロジェクト毎の集計機能を追加
  • コスト予測機能の実装

AWS Well-Architectedフレームワークとの整合性

コスト最適化

  • 使用量に応じた課金モデル(サーバーレス)
  • 不要なリソースの早期発見と削除

運用上の優秀性

  • インフラのコード化(CDK)
  • 自動化による運用負荷の削減

信頼性

  • マネージドサービスの活用
  • リトライ機能の実装

まとめ

本システムにより、AWSのコスト管理を自動化し、日々のコスト変動を可視化できます。低コストで運用でき、不要なリソースの早期発見により大幅なコスト削減が期待できます。

CDKを使用することで、インフラをコードとして管理し、バージョン管理や環境の再現が容易になります。また、TypeScriptによる型安全な実装により、保守性の高いシステムを構築できます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?