「仮想サーバーは必要なときにスケールアップ/スケールアウトできる」と油断していると足下をすくわれる事案です。
目次
EC2インスタンスは起動/作成できない場合がある
通知されたメッセージ通りではありますが。AWSのEC2インスタンスは起動または作成しようとしてもできない場合があります。どうやらアベイラビリティゾーン(AZ)ごとにリソース上限が決まっていて、それを超えるとAWS側からお断りされる。
話には聞いていましたがまさか本当に遭遇するとは。
具体的にはこのようなエラーメッセージが出ました。
Launching a new EC2 instance. Status Reason: We currently do not have sufficient t2.micro capacity in the Availability Zone you requested (ap-northeast-1a). Our system will be working on provisioning additional capacity. You can currently get t2.micro capacity by not specifying an Availability Zone in your request or choosing ap-northeast-1c. Launching EC2 instance failed.
翻訳してみると、
新しいEC2インスタンスを起動します。ステータス理由:リクエストされた可用性ゾーンには、現在、十分なt2.micro容量がありません(ap-northeast-1a)。当社のシステムは、追加容量のプロビジョニングに取り組む予定です。あなたの要求に可用性ゾーンを指定しないか、ap-northeast-1cを選択して、現在t2.microの容量を得ることができます。 EC2インスタンスの起動に失敗しました。
「リクエストされた可用性ゾーンには、現在、十分なt2.micro容量がありません」。
なるほど。仮想サーバー(在庫が尽きないとは言っていない)
そしてこれが急激な負荷の上昇などで緊急に必要になったときに発生した場合、確保できるまで連打みたいなことをすることになります。
さらに、他社も同じように狙っているので、迂闊にインスタンスを削除してしまうと元々の台数すら確保できない事態の可能性まであります。
私が見たのはAutoScalingでのインスタンス追加でしたが、インスタンスを起動するときにも発生することがあるようです。
対処方法
祈る
誰かがインスタンスを手放してくれることを祈る。
時間をおいてトライすれば確保できるかもしれない。AutoScalingを使用すると自動でトライしてくれるので、それを使用している場合はまだ楽かもしれません。
インスタンスタイプを変更する
インスタンスタイプごとに上限があるようなので、別のインスタンスタイプであれば確保できるかもしれません。
ただ枯渇状態だと、近いスペックのインスタンスタイプもお察しだったりしますし、ハイスペックのほうが不足していたりもするようです…
別のAZで起動する
インスタンスの上限はAZごとでもあるようなので、別のAZでよければそちらを指定すれば作成できるかもしれません
予防策
一応、予防として思いつくもの。でも必要となるときって緊急の時だからなあとは。
数日前から起動しておく
サービス開始時や何らかのイベントなどで、あらかじめ負荷対応が必要になることが分かっている場合は、事前に増やしておくと安心です。
リザーブドインスタンスを使用する
AWS EC2には、インスタンスを年間購入できるプランがあります。
こちらを購入しているぶんだけのキャパシティは確保されるようなので、いざという時に起動できないといったことを回避できると思います。通常起動している最低台数はこちらにしておくとよいかもしれません。
オンデマンドキャパシティー予約を使用する
(2018/11/6追記)
2018年10月より、オンデマンドキャパシティー予約でインスタンス数を予約することが出来るようになったみたいです。
Amazon EC2 でオンデマンドキャパシティー予約の提供を開始
私個人は機能を試せていませんが、内容からすると「インスタンス取れない問題」の解決に繋がるのではと思います。
参考
仮想マシンも物理リソースの上に乗っていること重々承知してはいますけど目先の緊急対応しないといかんときにこれが出てくるの(そして遭遇する可能性が多いのはそういう対応の時なの)ほんと勘弁して。