コンソールにいないEC2に課金され続けた話
Cost Explorerには課金、コンソールにはインスタンスなし
ある日、AWSのCost Explorerを眺めていたところ、EC2の課金が発生していることに気づく。
こわい
- 合計コスト:$5.11
- 1日あたりの平均コスト:$0.36
- リソースカウント:1
金額としては小さいものの、「リソースカウント: 1」という表示がある以上、どこかに課金対象のリソースが存在しているはず。ところが、いざEC2コンソールの「インスタンス」画面を開いてみると——
インスタンスなし
このリージョンにはインスタンスがありません。
え、どこ?
EC2のリソース概要も確認したが、こちらも
- インスタンス (実行中): 0
- インスタンス: 0
- スナップショット: 0
- ボリューム: 0
- Auto Scaling グループ: 0
- キーペア: 0
- セキュリティグループ: 0
- Elastic IP: 0
- ロードバランサー: 0
- 専有ホスト: 0
と、すべて0。
リージョンもCost Explorer上の表記と合わせて確認したので、リージョン違いという見落としでもなさそう。
まじでどこにおるん?
AWS Resource Groupsをみよう
Resource Groups はタグやCloudFormationスタックを軸にリソースを横断的にまとめて表示できる機能で、EC2コンソール単体では見えてこない情報が拾えることがある
確認すると、見覚えのあるようなないような名前のグループが1件だけ残ってた
グループ名: AppManager-CFN-test-cf-ec2-t2micro
説明: Auto-generated by AWS Systems Manager Application Manager for CloudFormation resource test-cf-ec2-t2micro
覚えてないけど、過去に検証で作成した CloudFormation スタック(EC2のt2.microインスタンスを立てるテスト用スタック)に紐づいて、Systems Manager Application Manager が自動生成したリソースグループのよう。
核心:スタックはもう存在しない
このグループの詳細画面を開くと、
⊗ クエリ内の CloudFormation スタックは存在しません。
つまり、このリソースグループが参照している元のCloudFormationスタック自体は、すでに削除済み。
スタックが存在しないなら、そこにぶら下がっていたはずのEC2インスタンスも当然もう存在しないはず。
なのにCost Explorerには「リソースカウント: 1」という表示が出ていた。
- 過去に検証用のCloudFormationスタック(EC2 t2.micro)を作成
- スタックは削除したが、Application Managerが自動生成したリソースグループだけが残存
- EC2コンソールの通常ビューにはリソースが表示されない
- それでもCost Explorer上ではリソースが1件課金対象としてカウントされている
対応
原因となっていたリソースグループを削除。
まとめ・学び
- EC2コンソールの「インスタンス: 0件」を鵜呑みにしない。 サービス単体のビューは「今アクティブなもの」しか見せてくれない
- 課金だけ発生してコンソールに見当たらない時は、AWS Resource Groups / タグエディタで横断検索する。 サービスをまたいでタグベースで探せるので、通常のコンソールでは拾えないリソースの手がかりになる
- CloudFormationで作成したリソースは、スタック削除後も関連リソース(Application Manager経由のリソースグループなど)が残る場合がある。 スタックを消したから終わり、ではなく副産物の掃除も忘れずにする
検証用に気軽にスタックを立てる機会が多い人ほど、こうした"消し忘れ"は起きやすいはず。定期的にResource GroupsやTag Editorで棚卸しをする習慣をつけておくと、今回のような「見えない課金」に悩まされずに済みそう。