EC2 スポットインスタンスのすべて
mazamachi.icon 感想
「中断できる」という仕様のものってなかなかない気がする
中断に対応した実装もちょっとだるそう
意外と中断によって停止されるインスタンスの数少ないんだなという感想
a
mazamachi.icon 以下メモ
登壇者
EC2スポットインスタンススペシャリスト
日本市場での EC2 会うポットインスタンス技術担当
セッションの目的
EC2 スポットインスタンスが分かるようになる、こわくなくなる
内容:基本知識、実践情報、機能改善
棋士の話
EC2 スポットインスタンスで囲碁 AI 動かしてるらしい
17歳の女流棋聖が可愛い手順書作ったりしてる
簡単で安く使えるので広まってる
スポットインスタンスとは?
EC2 の購入オプションの1つ
インスタンスとしての性能に違いはない
オプション
オンデマンド
リザーブド
スポット
使い分けは最後に話すよ
スポットインスタンス基礎編
起動方法
4つの方法
スポットインスタンス(単体)
スポットフリート
スポットインスタンスの群
EC2 Auto Scaling
EC2 フリート
かなり決め細やかだが、コンソールから操作できないのでこれは上級者向け
スポットインスタンス
スポットインスタンスをリクエストすれば OK
スポットフリート
ワークロードに応じたインスタンスタイプを選ぶ
Load balancing
近しいサイズのインスタンスタイプから選択
EC2 間の性能差がないようにしてくれる
web server とかは揃えるのが定石。違うと一つのインスタンスだけ不可が集中するので
Flexible workloads
サイズの異なるインスタンスタイプが異なる
より高性能なものを安く使えるなら提案してくれる
「フリートの強度」が「強度が十分」になってないと中断に強くないので注意
中断がキーワード らしい
EC2 Auto Scaling
おすすめ新機能:ミックスインスタンスグループ
オンデマンドとスポットをひとつの ASG に
オンデマンド : スポット = 9:1 みたいな指定ができるのでスモールスタートに最適
いきなりスポットインスタンスにするのはこわい、という人も多いので1割から始めてコスト削減がどれくらいできるか実験していくと良い
EC2 Auto Scaling では、スポットフリートと違い、おすすめを自動提案してくれない
スポットリクエストの確認方法
スポットインスタンスのライフサイクル
起動までの流れはオンデマンドインスタンスと同一
終了に至る道筋は2通り
ユーザーによる終了(オンデマンドと一緒)
92% のスポットインスタンスがユーザーにより終了されている
EC2スポットサービスによる中断(スポット特有)
終了の前に中断通知(2分間の待機)がある
インスタンス削除
中断通知が来たら速やかに後処理を
仕掛中の処理を退避する
途中の計算結果をS3にアップロード
新規処理の受付を停止する
ELB から解除、など
スポットインスタンスの仕組みと価格
空きキャパシティとスポットプール
AWS に存在するインスタンスのうち、使用中でないインスタンス群をスポットプールと呼ぶらしい
スポットインスタンス価格の特徴
AZ ごとに価格が異なる
需給バランスで決まるので
変化の率はかなり緩やか
2017年11月以前は入札が必要だった
入札価格を決めていた
2017年11月にかなり安定化した
上限価格を決める必要がある
入札価格と似た概念だが、デフォルトはオンデマンドインスタンス価格
スポットインスタンスの起動条件
起動したいリージョンでの価格が上限以下でスポットプールに空きがあれば、起動される
中断するタイムング
空きキャパシティが不足した
スポット価格が設定している上限価格を上回った
スポットインスタンス実践編
中断通知時のハンドリング
中断通知受信の2つの方法
インスタンスメタデータ
インスタンス内部からアクセス
pull 型
CloudWatch Events
インスタンス外部からアクセス
push 型
どのインスタンスが中断対象なのかをまず把握
中断のテスト
スポットフリートではインスタンス上限を変更することでテストできる。 EC2 AutoScaling ではテストできないので注意
スポットインスタンス活用のポイント
耐障害性の4原則
ステートレス
再開可能なワークロード
途中の処理を保存した場合に、誰かがそれを取得して再開できる必要がある
疎結合
1つのスポットインスタンスの中断が他に影響してはならない
分散
候補となるインスタンスタイプ・AZ を複数用意する
逆に、例えば1つしかAZを使っていない場合、
スポットインスタンスの活用シーン
ビックデータ分析
CI/CD
ステートレスな Webアプリ
アドホックな計算処理
どう組み合わせるか?
一定の負荷が見込めるワークロード→ リザーブド
StateLess で中断可能 → スポット
新規のワークロード、ステートフルなワークロード→オンデマンド