Amazon EC2は先頃,スポットインスタンス返還の2分前警告通知を追加した。“正式にはスポットインスタンス終了通知(Spot Instance Termination Notice)と呼ばれる”機能である。状態の保存,ログファイルのアップロード,あるいは,ロードバランサやクラスタマネージャなど,他のコンポーネントからの登録解除を行う時間的猶予を提供することで,“スポットインスタンスのスケールと低価格を,より多くの種類のアプリケーションで利用できるようにする”ことが目標だ。
Amazon EC2スポットインスタンスとは,ユーザが入札可能な,予備のEC2コンピューティング能力のことだ。入札価格がその時点のスポット価格を上回ると,インスタンスがローンチされる。スポット価格は,需要と供給の関係によってリアルタイムに変化する。スポットインスタンスの価格モデルは,通常のオンデマンドないしリザーブドインスタンスの購入オプションを補完するもので,オンデマンドに比較するとかなり低価格になる場合がある(最近では平均で86%以下)。時間的に柔軟で,中断が許容されるタスクに最も適しているが,先進的なユーザの間では,それぞれのフォールバックと適用可能な自動スケール戦略を用いることで,ミッションクリティカルな24/7の生産ワークロードを実現する手段としても活用されている。
スポットインスタンスのライフサイクルは,単純化すると,3つの状態で構成される(完全なスポット入札状態を示す図と説明も公開されている)。
- 入札価格,タイプ指定と必要なインスタンス数,オプションとして追加的な制約などを含んだスポット要求が生成される。インスタンスの終了時に自動的に入札されるように,スポット要求を永続化しておくことも可能だ。
- 入札価格がその時点のスポット価格を上回ると,インスタンスが起動される。
- スポット価格が入札価格を上回るか,あるいは容量が低下すると,インスタンスはAWSによって回収される。
AWSは今回,これまでは実際に発生した後でのみ可能であったスポットインスタンスの中断処理を,より簡単に取り扱えるようにして,新たなユースケースを可能にするために,スポットインスタンス終了の2分前警告を導入した。状態保存やログファイルのアップロードのようなクリーンアップ処理の他に,間もなく発生するインスタンス損失に対して,早期の是正措置を取ることが可能になる。具体的には,オンデマンドのフォールバッククラスタをスケールアップする,あるいは,より競合の少ないインスタンスタイプないしアベイラビリティゾーンに入札する,といった手段が考えられる。
終了警告はインスタンスメタデータの一部として,"http://169.254.169.254/latest/meta-data/spot/termination-time" で参照することができる。通常時のこのURLはHTTP 404ステータスコードを生成するが,“インスタンスが終了予定とマークされる(上記のステップ3)と有効になり,インスタンスのオペレーティングシステムにシャットダウン信号が送信される予定の時刻が掲載される”。DescribeSpotInstanceRequests API機能を通じて,新たな入札状態である "marked_for_termination"にアクセスすることも可能だが,こちらにはシャットダウン信号の送出時刻は含まれていない。
Amazon SNSによる通知が提供されず,推奨された5秒間隔でAPIないしメタデータをポーリングしなければならないことに,ユーザは驚きの声を上げている - Mitch Garnaat氏のツィートでは,
新機能のスポットインスタンス終了通知(aws.amazon.com/blogs/aws/new-ec2- …)は素晴らしいですが,インスタンスメタデータをポーリングしなければならないというのは,どうかと思いますね。
AWSは最近になって,AWS LambdaやDynamoDB Streams,Amazon S3イベント通知(以前の記事を参照)を導入するなど,イベント駆動コンピューティングアーキテクチャへの移行ペースを加速している。後者は確かに,他のAWSサービスの通知,例えばAuto Scalingライフサイクル通知(こちらも以前にお伝えしている)のように,SNS通知をベースとしたものだ。Avram Lyon氏はこれに同意して,次のようにツィートした。
@jeffbarr ASG LifecycleHooksのようなSNSではだめなのでしょうか?github.com/scopely/shudderにも今,終了通知のサポートを追加中です。
ここで挙げられているshudderは,Scopelyが提供する,“AWSの自動スケールグループのシャットダウンを正常に行うサービス”であるため,先述のような終了通知処理のサポートも備えようとしているのだ。Martin Camitz氏も,SNS通知で受信できる方が望ましいという意見だ。
インスタンスが終了することを認識できるようになって,適切な処理が可能になったのは,本当に素晴らしいことです。それを私にも教えてほしいですね!
回避策として氏は,EC2 Windowsインスタンス用に,C#ベースのEC2SpotStop2SNSというサービスを開発した。
Amazonは,一般的なユースケースと入札戦略,中断管理方法などをカバーした{2}EC2スポットインスタンスカリキュラム{/2}を,チュートリアルビデオ付きで提供している。独自の入札戦略を使用すれば,過去90日間のスポットインスタンスの価格履歴や,アカウント毎の使用状況と価格情報を備えたスポットインスタンスのデータフィード状況を容易に入手することができる。サポートはAmazon Elastic Compute Cloud (EC2)フォーラムを通じて提供される。