「クラウドでIDEを動かしたかっただけなのに」AWSで22万円のクラウド破産した話
請求はある日突然に
その日、自分は後輩に「はま寿司」を奢った。
「寿司に連れていったる!」と約束したのに、すっぽかして3年たっていた。逃げ切るつもりだったが催促されやむなしに奢る羽目になった。
「10皿までにしてくれよ」
そう言ったのに、彼は26皿食べた。
食べ盛りの中学生を持つ親が寿司の前におにぎりを食べさせる理由を完全に理解できた。
そもそも1人に奢るはずだったのに、いつのまにか新卒と来年入社の内定者まで生えていた。
彼らもそれぞれ20皿ずつ食いやがった。自分は8皿しか食べてないのに。
こうしてお会計。料金は10500円。
手痛い出費に財布が軽い。
「もう1年は奢らないぞ」と心に誓って帰路に向かった・・・
そこでふとカードの収支を見た。そこに映し出されたのは
死!!!!!!!!!!!!!!!!!!!!!!!
は!?!?!??!?!??!
え!?!?!?・
いやむりやが!??!?!?!?!?!?15万!?!??!
実は150円!小数点がついているはず・・・ついてない!!!!!!!!!!
本物のAWSのからの請求だった
AWSは個人では全く使っておらず、日頃のコスト確認をしていないため、決済されてから気づいた。
なぜAWSを全く使用していないのに、クラウド破産が起きたのか?対処法、Amazonの対応について、今後私のようなミスを誰も冒さないよう、書いていこうと思う。
↓↓クラウド破産発覚直後盛り上がる会社Slackの様子(この後ハドルミーティングは祭り会場になった)↓↓
なにがおきた
ハドルミーティングで先輩も交えて早速AWSの調査を開始した。
Billing and Cost Management
でコスト内訳を確認。
内訳を確認すると、Elastic Compute Cloud
Elastic Container Service for Kubernetes
が大部分を占めていることが判明。コストのグループ化で「リージョン」を選択すると、「eu-west1」で作成されていることがわかった。
ついでに今月分も500ドル分すでに発生していることが発覚してゲロを吐いた
嘘だろ・・・15万円に、追加で500ドル・・7万円 合計22万円・・・
このコンテナがどこで建てられたかの調査が開始。
「最近アクセスしたサービス」にCloud Formation
があったので見にいってみることに
Cloud Formationと謎のスタック
Cloud Formationはこうなっていた。
スタックが何を表しているのかがわからないが(スタックについては後ほど解説)、スタック名codecanvas
でおぼろげに思い出す。
クラウドでIDEを動かしたくて、JetbrainのクラウドIDEサービスを使った時に作った環境だった。
確か、クイックインストールを押すだけで自動的にもりもり環境が作られていたので、怖くなって途中で中止したはず。EC2も作られたのを見て消しにいったんだ。
「codecanvasは・・EC2インスタンスを全て間違いなく消したはず・・・」
そう、金のかかるEC2インスタンスは間違いなく消した。死体も確認した。全員削除したはずだ。
先輩が「あーなるほどなー」と呟く。「とりあえず1個ずつ削除してみて」と言われ個別にスタックを削除していった。
「なぜ・・生きて・・・」 殺したはずのインスタンス達
「こいつらが生き返ってたんだよ、スタック消したから今死んだけど」
EC2を覗くと、1ヶ月前に削除したインスタンス達が削除中になっていた。
「さっきまで生きていた・・・?動いていた・・?確かに1ヶ月前に削除したはずなのに・・・・?」
先輩「こいつらなー、生き返るんだよ。殺して全て片付けたつもりになっちゃったんだなー、どんまい」
解説
これより解説フェーズ。
「なぜ殺したはずのインスタンス達が生き返ったのか?高額請求の原因、謎のスタックとは」を説明していこうと思います。
Cloud Formationとは
Cloud Formationは、いわば「AWS版Terraform」
めんどくさい環境構築を、事前に定義することで、同じ環境を反復的に作れるのが特徴。
スタック名に書かれていたJetbrainのcode canvas
もこのCloudFormationを使って環境の自動構築をしていた
スタックとは
AWSリソースの集まりを「スタック」と呼ぶ。
EC2は何を使うか、ロードバランサーはどこに繋げるか、セキュリティグループは何を使うか?など、環境構築に必要な情報をここで定義することで、同じ環境を自動で何度も構築することができるようになりる(便利!)。
補足:今回の自動構築では、スタックでKubernetesが使用され、その中でどのインスタンスが起動するかというのが記述されていました。
またAWSには以下の表記が
スタックを削除すると、スタックに関連付けられたリソースを削除します。作ったアプリケーションが不要になった時は、スタックを削除するだけで関連リソースをすべて削除できます。(ここ伏線)
Kubernetesとは
Kubernetesはコンテナのオーケストレーションサービス。コンテナ化したアプリケーションを繋ぎ束ね、柔軟にスケールアップ・ダウンを可能にしてくれる。
Kubernetesでは、Kubernetesオブジェクトを作成でき、そこにはコンテナ集団の「望ましい状態」を記述することができる。
オブジェクトの仕様と状態を記述することで、「EC2インスタンスは常に3つ稼働していて欲しい・・・もし何かあって停止してもロールバックして自動的に3つに戻して欲しい!」など、運用的にありがたーーーいことを叶えてくれる。
「何かあって停止してもロールバックして・・・・・・・・??」
種明かし
CloudFoundationで自動的に環境が作成された、しかし「EC2インスタンスは全て削除した」。
これで全て片付けた。インスタンスの死亡も確認した。
だからもうお金はかからないと思った。これで解決したと思っていた
だが、その後、裏でこんなことが起こっていた
自分:EC2を3台全て削除した!これで全て片付いた
↓
Kubernetesクラスター:「ワーカーノードが0台に減ったぞこれ〜〜」
↓
EKSコントローラー:「最小3台必要っすね!はよ復帰せねば」
↓
Auto Scaling Group:新しいEC2作成
↓
3台復活完了
↓
1ヶ月間動き続ける2x.largeインスタンス達
↓
クラウド破産
Kubernetesが気を利かせて、削除したEC2インスタンスをフェニックスさせていた。これにより、削除したと思われたインスタンスが動き続け、クラウド破産に至った・・・
ルート分岐:TrueEnd BadEnd
あの日、あのときこうするだけで、実はTrueEndに向かっていた。
なにが悪かったのか・・
codecanvas環境構築CloudFoundation実行
⇩
スタックが作動、環境を構築
⇩
スタックを削除しよう
⇩
→ ifルート:スタックを個別削除 → 削除成功 TrueEnd
⇩
スタックを一括で削除
⇩
依存関係で削除に失敗
⇩
自分:本陣のEC2さえ削除できればいいやろ!
⇩
EC2削除
⇩
削除完了、酒を飲んで愉悦
⇩
EC2復活
⇩
→ ifルート:予算アラート発生 → 気づく → 破産回避 TrueEnd2
⇩
クラウド破産(Now!!)
-
スタックを個別削除
-
予算アラートを設定
実は、いずれかを行えば防げていた問題だった!!
スタックを削除すると関連リソースが全て削除されるため、Kubernetesも削除される。これによりEC2インスタンスが復活することなく、すべてのリソースが完全に永眠になる。
そして、最も大事なことが、予算アラートの設定だった。
自分は個人ではAWSを使っていなかったため、予算アラートを設定していなかった。これにより、日に日に1万円の費用が積み重なっても気づかず、実際の請求がくるまで気づかなかった。
もし予算アラートを設定していれば、千円程度の損失で抑えられた。
もし予算アラートを設定していれば、22万円の請求が来ずにすんだ。
もし予算アラートを設定していれば・・・
予算アラートを設定しよう!!
というわけで、予算アラートを設定する方法を書いていく。
AWSを開設した人は、まず必ずこれを行なって欲しい。(自分みたいなことをしないためにも!!)
- Billing and Cost Management へ移動
- 予算と計画 から 予算をクリック
- 予算を作成をクリック
- テンプレート 新規 でゼロ支出予算 を選択
- Eメール受信者に、自身(または優しいパイセン)のメールアドレスを書く
- 予算を作成
ある程度AWSを使う人は、月次コスト予算を設定してください
まとめ
「クラウドでIDEを使いたかっただけなのに。」
きっかけはこんな些細な理由だった。Windowsとマック環境の往復に辟易するより、いっそクラウドで立てれば解決じゃん!というなんともありきたりで、シンプルな考えだった。
こんな気軽な気持ちで22万円の請求になるとは思わなかった。
これを見た皆様は、ぜひとも(必ず)予算アラート設定だけはしてほしい。
結論: アラートを設定しよう!!!!!!
そして、良かったらこの記事に いいね をお願いします!
追記: AWSの対応
クラウド破産をツイートしたところ、「AWSサポートに問い合わせるといいですよ!」とツイートをいただき、AWSサポートに土下座メールを送った。
結果・・・・
22万円→5万円に減額していただけました!!!
AWS様 ありがとうございます!!!!!!!!!!!
終わりに・・・
5万円といえど、勉強代として非常につらいので、Amazonで何か購入の際には、よければ以下のアフィリンクをクリックしていただけると助かります!!勉強代回収させてください!
Discussion