AWS

AWS CLI と Cost Explorer で請求データを自動取得し S3 に保存・Slack 通知する方法

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


Contents

スポンサードリンク

前提条件と設定準備

1‑1. Cost Explorer の有効化 & 請求レポート(CSV)の自動配信

手順 内容
AWS マネジメントコンソール → Billing > Cost Management > Cost Explorer を開く。
「Cost Explorer の有効化」ボタンをクリックし、ステータスが Enabled になるまで待つ(最大 24 h)。
左メニュー Reports > Cost and Usage Reports → 「レポートを作成」。設定例は以下のとおり。
作成したレポートは S3 バケットに CSV として毎月自動配信される。

推奨レポート設定例

項目 設定値
レポート名 monthly-billing
配信形式 CSV(圧縮は なし
配信先 S3 バケット my-billing-reports (暗号化設定参照)
スケジュール 毎月 1 日に生成、前日までのデータを含む
データ集計粒度 MONTHLY(必要なら DAILY)

ポイント
Cost Explorer が有効でないと aws ce get-cost-and-usageAccessDenied になるため、まずはコンソール上で有効化してください。

1‑2. IAM ロール/ユーザーに付与すべき最小権限

  • 最小権限の原則(Principle of Least Privilege)を守ることで、認証情報漏洩時の被害範囲を最小化できます。
  • s3:* 系は必ずバケット ARN で絞り込むことを推奨します。

AWS CLI のインストールとプロファイル設定

OS インストールコマンド
macOS / Linux (Homebrew) brew install awscli
Windows (MSI) msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
すべてのプラットフォーム(Zip) https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip をダウンロードし解凍

プロファイル作成例

推奨:AWS CLI バージョン 2.15 以降(2025 年 10 月リリース)を使用してください。新しい Cost Explorer 機能と get-billing-report がサポートされています。


AWS CLI と Cost Explorer API で請求データ取得

2‑1. クロスプラットフォームな日付計算(GNU date 依存回避)

方法 A:Python スクリプトで前月の開始・終了日を出力

実行例:

方法 B:date の BSD 系対応(macOS)と GNU 系の両方を判定

ポイント:上記いずれかをスクリプト化しておけば、Linux/macOS どちらでも同一のコマンドで実行可能です。

2‑2. Cost Explorer の get-cost-and-usage 実行例

JSON → CSV 変換(jq 使用)


新しい GetBillingReport API の活用方法

2025 年 3 月にリリースされた GetBillingReport は、以下の特徴があります。

項目 内容
出力形式 CSV(従来同様)・PDF(直接取得可能)
対応リージョン us-east-1, us-west-2, ap-northeast-1 など主要リージョン。※欧州 (eu‑central‑1) は 未対応(2026 年 3 月時点)。
利用料金 - データ出力料:0.005 USD/MB(CSV)
- PDF 出力オプション:0.02 USD/レポート(固定)
※1 GB 超過分は上記単価が適用されます。
呼び出し制限 1 秒間に最大 5 リクエスト、月間合計 10,000 回(デフォルト)。必要に応じて Service Quotas で増枠可能。

3‑1. GetBillingReport の基本コマンド

  • --format CSV にすれば従来と同様のファイルが取得可能。
  • PDF を直接取得できるため、後続の変換処理(ReportLab / wkhtmltopdf)が不要になります。

3‑2. コストシミュレーション例

想定レポートサイズ CSV 出力コスト (USD) PDF 出力コスト (USD)
10 MB 0.005 × 10 = 0.05 0.02(固定)
200 MB 0.005 × 200 = 1.00 0.02
1 GB (1024 MB) 0.005 × 1024 ≈ 5.12 0.02

注意:Cost Explorer のデータ自体は無料ですが、GetBillingReport の出力料が別途発生します。導入前に月間レポートサイズを S3 上で確認し、予算シミュレーションを行ってください。

3‑3. リージョン制限への対策

  • 対応リージョン外(例:eu-central-1)で実行した場合は InvalidEndpointException が返ります。
  • 解決策は、CLI のデフォルトリージョンをサポート対象に変更するか、--region us-east-1 を明示的に指定してください。


取得データの PDF 変換方法(従来 vs 新 API)

手法 必要ツール 実装手順 メリット
従来 get-cost-and-usage → CSV → Python/ReportLab Python, pandas, reportlab 1. CSV を pandas で読み込み
2. ReportLab でテーブル生成・PDF 出力
カスタマイズ自由度が高い(フォント、レイアウト)
従来 get-cost-and-usage → HTML → wkhtmltopdf wkhtmltopdf, Jinja2 1. pandas → HTML テンプレート
2. CSS で装飾
3. wkhtmltopdf 変換
デザインが Web と同様に作りやすい
新 API get-billing-report --format PDF AWS CLI のみ 1. CLI コマンド実行だけで完結 変換処理不要、スクリプトがシンプルになる

おすすめ:PDF がそのまま欲しいだけなら GetBillingReport を利用し、レイアウトの細かい調整が必要な場合は従来手法を併用してください。


自動化フローの構築

4‑1. Linux (cron) での実装例

ポイント:cron では環境変数が限られるため、フルパスで aws コマンドを指定し、日付は date -u(UTC)で統一します。

4‑2. Windows タスク スケジューラ

  1. タスク作成 → 「基本タスクの作成」
  2. トリガー: 毎月 1 日 02:00 (UTC)
  3. 操作: powershell.exe に以下スクリプトを渡す

4‑3. サーバーレス実装 – EventBridge + Lambda

SAM テンプレート(抜粋)

Lambda ハンドラ例 (lambda/app.py)

  • 環境変数 REPORT_BUCKET に S3 バケット名(例: my-billing-reports)を設定。
  • Lambda の実行ロールには上記ポリシーが必要です。

デプロイ手順

利点:インフラ管理サーバーが不要、スケジュールは EventBridge が保証するため可用性が高い。失敗時は CloudWatch アラームと SNS 通知で即座に検知できます。


保存先・通知・ベストプラクティス & トラブルシューティング

5‑1. S3 バケットポリシー例(暗号化+ライフサイクル)

  • 暗号化:デフォルトで SSE-S3、機密性が高い場合は SSE-KMS(キー ARN を指定)。
  • ライフサイクル
条件 アクション
90 days 移行 → Glacier Deep Archive
365 days 完全削除

5‑2. SNS / Slack 通知例

Slack 連携(AWS Chatbot)

手順 内容
1 AWS コンソール → ChatbotSlack ワークスペース と接続
2 SNS トピックを選択し、通知対象チャンネルを指定
3 Lambda/Step Functions の最後に aws sns publish を組み込む

5‑3. 主なエラーと対処法(表)

エラーコード 原因例 推奨対策
AccessDeniedException IAM ポリシー不足 必要アクションをポリシーへ追加 (ce:GetBillingReport, s3:PutObject)
ThrottlingException API 呼び出し上限超過 再試行ロジックに指数バックオフ、または Quotas で増枠申請
DataNotReadyException Cost Explorer データが未更新 前月レポート取得は翌月 2 日以降 に実施
InvalidEndpointException サポート外リージョン使用 --region us-east-1 などサポート対象へ変更

5‑4. コスト最適化のヒント

  1. PDF 出力は月 1 回だけに抑える → 不要な PDF 生成を防げる。
  2. CSV のみ取得し、社内で集計する場合は GetBillingReport の CSV オプションだけ利用すれば、PDF 用料金がかからない。
  3. S3 ライフサイクルで古いレポートを自動アーカイブ → ストレージコスト削減。

まとめ

  • Cost Explorer の有効化CSV レポートの S3 自動配信は、全ての自動化フローの土台です。
  • 新 API GetBillingReportを使うことで PDF が直接取得可能になり、変換処理が不要になる一方、データ出力料と PDF オプション料金が別途発生します。導入前にレポートサイズとコストシミュレーションを必ず実施してください。
  • 日付計算は GNU date に依存しないスクリプト(Python もしくは BSD/GNU 両対応)で行うことで、macOS・Linux のどちらでも安定稼働します。
  • IAM は最小権限を徹底し、S3 バケットは暗号化+ライフサイクル設定、通知は SNS → Slack(Chatbot)で自動配信するのがベストプラクティスです。

この手順をそのまま CI/CD パイプラインや EventBridge のスケジュールに組み込めば、毎月確実に最新請求書 PDF が生成・保存・通知され、人為的ミスと工数が大幅に削減できます。


この記事は 2026 年 4 月時点の情報を元に作成しています。AWS のサービスや料金は予告なく変更されることがありますので、実装前に公式ドキュメントで最新情報をご確認ください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-AWS