AWS の未使用リソースの探し方
AWS で使われないまま課金が続きやすいのは、どのインスタンスにも付いていない EBS ボリューム、割り当てられていない Elastic IP、ほとんど動いていない EC2 インスタンス、接続のない RDS インスタンスの 4 つです。どれも AWS の標準機能だけで探せます。手間がかかるのは、リージョンごと、アカウントごとに同じ確認を繰り返す点です。ここでは AWS CLI での探し方と、消す前に確かめることを順に説明します。コマンド中のリージョン、インスタンス ID、DB 識別子、日時は例なので、自分の環境の値に置き換えてください。
最終更新: 2026-09-22
なぜ残るのか
EC2 インスタンスを削除しても、設定によっては EBS ボリュームが残ります。検証用に取った Elastic IP は、インスタンスを消したあとも解放しなければ確保されたままです。止め忘れた検証環境や、移行後に残った旧データベースは、動いてはいるが誰も使っていない状態で課金が続きます。
どれも 1 つあたりは少額なので請求額の変化では気づきにくく、作った人が異動や退職でいなくなると「消してよいか分からないもの」として残ります。
探す前に知っておくこと
EC2、EBS、Elastic IP、RDS はリージョンごとのリソースです。コンソールでも CLI でも、見ているリージョンのものしか表示されません。普段使わないリージョンに残っているものほど見落とします。下の手順は、有効なリージョンすべてで繰り返してください。
パブリック IPv4 アドレスは、2024 年 2 月から、使用中かどうかにかかわらず 1 時間あたり $0.005 が課金されています。割り当てられていない Elastic IP は、何の役にも立たないままこの料金がかかり続けるので、真っ先に片付ける対象です。
未アタッチの EBS ボリュームを探す
状態が available のボリュームは、どのインスタンスにも付いていません。コンソールでは EC2 の「ボリューム」で状態を絞り込みます。CLI では次のコマンドで一覧できます。
aws ec2 describe-volumes --region ap-northeast-1 --filters Name=status,Values=available --query 'Volumes[].[VolumeId,Size,VolumeType,CreateTime]' --output table消す前に、そのボリュームが必要になる可能性を確かめます。名前タグや作成日時から用途が分かることがあります。判断が付かなければ、スナップショットを取ってから削除すると、多くの場合は保管の料金を抑えたうえで、元に戻す手段を残せます。
割り当てられていない Elastic IP を探す
関連付け ID を持たないアドレスが、割り当てられていない Elastic IP です。
aws ec2 describe-addresses --region ap-northeast-1 --query 'Addresses[?AssociationId==`null`].[PublicIp,AllocationId]' --output table解放したアドレスを取り戻せる保証はありません。DNS のレコードや、取引先のファイアウォールの許可リストにそのアドレスが登録されていないかを確認してから解放してください。
ほとんど動いていない EC2 インスタンスを探す
CloudWatch の CPUUtilization を、2 週間程度の期間で平均して見ます。開始と終了の日時は、実行する日から遡った 14 日間に置き換えてください。このコマンドが返すのは期間全体の平均 1 つです。それが数 % を下回るインスタンスは、使われていないか、サイズが大きすぎる候補です。
aws cloudwatch get-metric-statistics --region ap-northeast-1 --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-0123456789abcdef0 --start-time 2026-09-06T00:00:00Z --end-time 2026-09-20T00:00:00Z --period 1209600 --statistics AverageCPU だけでは判断できない点に注意してください。月に 1 度だけ動くバッチ、待機系、踏み台は、平均 CPU が低くても必要です。ネットワークの転送量もあわせて見て、最後は使っている人に確認します。AWS Compute Optimizer を有効にしていれば、アイドル状態やサイズ過剰の候補を AWS が挙げてくれます。
接続のない RDS インスタンスを探す
CloudWatch の DatabaseConnections を 1 週間程度の平均で見ます。こちらも日時は直近の 7 日間に置き換えます。平均が 1 を下回っていれば、アプリケーションから接続されていない可能性が高いと言えます。
aws cloudwatch get-metric-statistics --region ap-northeast-1 --namespace AWS/RDS --metric-name DatabaseConnections --dimensions Name=DBInstanceIdentifier,Value=mydb --start-time 2026-09-13T00:00:00Z --end-time 2026-09-20T00:00:00Z --period 604800 --statistics AverageRDS は停止しても 7 日後に自動で起動します。使わないことが確かなら、最終スナップショットを取って削除するほうが確実です。
AWS の機能でまとめて見る
個別に調べる代わりに、AWS の機能に候補を挙げてもらう方法もあります。Cost Optimization Hub は、アイドル状態のリソースやサイズ変更の推奨を、想定削減額とともにまとめて表示します。Compute Optimizer は EC2 や EBS などの推奨を出します。Trusted Advisor にもコスト最適化のチェックがありますが、使うには Business Support+ 以上のサポートプランが必要です。
いずれもアカウントまたは AWS Organizations の組織の単位で有効化して使うものです。
複数のアカウントで続けるには
ここまでの確認は、一度やれば終わりではありません。リソースは日々作られるので、定期的に、全リージョンで、預かっているアカウントの数だけ繰り返すことになります。
Sabaki は、この確認を読み取り専用の IAM ロールだけで毎晩自動で行います。条件は、EC2 が過去 14 日の平均 CPU 使用率 5% 未満、RDS が過去 7 日の平均接続数 1 未満、EBS が available 状態、Elastic IP が未関連付けです。検出したリソースごとに AWS の料金表のオンデマンド料金から月額の概算を出し、なぜムダと判断したか、どう対処するかを日本語で説明します。概算は Linux・共有テナンシーを前提にしており、割引や、RDS のストレージなどの料金は含みません。調べるのは、直近 30 日にコストが発生したリージョンです。Team 以上のプランで複数の顧客のアカウントを接続していれば、顧客別に並べて見られます。Sabaki が削除を行うことはありません。
検出できるのはこの 4 種類です。NAT ゲートウェイ、ロードバランサー、古いスナップショットなどは対象外なので、それらは上の AWS の機能とあわせて確認してください。Free プラン(1 アカウント)でも検出と削減提案はすべて使えます。詳しくはAWS コストの見える化と削減提案をご覧ください。
読み取り専用ロールを 1 つ接続すれば、数分で最初の結果が出ます
Free プランは 1 アカウント・1 席でクレジットカード不要。必要なのは読み取り専用の IAM ロールだけで、アクセスキーの登録も書き込み権限も要りません。
関連する FAQ
関連するガイド
同じところで困っている人に、届けてください。
