【レポート】Amazon EC2 だけじゃない!最高のコスト効率を手に入れるためのスポットインスタンス使いこなし術 #AWSSummit

2020.09.09

どうも、もこ@札幌オフィスです。

今年はAWS Summit Onlineという事で、2020/9/8〜9/9の間のライブセッションと、09/30まで視聴可能なAWS認定セッション、お客様事例セッション、セルフペースハンズオン、Partner Discovery Session (パートナーセッション) などなど、場所を選ばずにオンラインで、好きな時に好きなだけ学べるような環境になっています。

本記事ではライブセッション Day2 Track3 14:45〜15:15の「Amazon EC2 だけじゃない!最高のコスト効率を手に入れるためのスポットインスタンス使いこなし術」のセッションレポートとなります。

後日ライブセッションのアーカイブも公開されると思いますので、合わせてご覧下さい。

セッション情報

Amazon EC2 だけじゃない!最高のコスト効率を手に入れるためのスポットインスタンス使いこなし術

アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 レディネスソリューション本部 ソリューションアーキテクト 滝口 開資

最大 9 割引で活用できるスポットインスタンスの様々な使いどころを紹介します。基本的な考え方から、スポットインスタンスを活用できるコンテナ、ビッグデータ、大規模計算などのトピックを取り上げ、ポイントを紹介していきます。中断にまつわる不安もこのセッションを聞けば解消すること間違いなしです。

レポート

  • オンデマンド、リザーブドインスタンス、Savings Plan、スポットインスタンスなどのようなインスタンスの購入タイプのひとつ
    • EC2インスタンスとしての品質に違いはないが、中断される可能性がある

スポットインスタンスのポイント(2020年版)

いつ起動できるのか、いつ中断されるのか

  • 需要が高まると中断され、起動出来ない事もある
  • スポットインスタンスは未使用のインスタンス、"スポットプール"を使い、空きキャパシティーがあれば起動出来る

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-16.png

  • 空きキャパシティーがない場合は起動出来ない
  • 空きキャパシティーが不足してくると中断される

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-1-2.png

価格はどう決まるのか

  • マネジメントコンソールから過去の価格を確認出来る
    • AZごとにスポットプールが独立しているため、AZによって価格が異なる
    • 価格は緩やかに変化する
    • 需要と供給に基づいて徐々に調整される

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-2-3.png

入札不要モデル「入札はいりません」

  • オンデマンド料金を最大価格として、上限価格をデフォルトの設定する
  • スポットインスタンス価格を任意の価格に出来るが、スポット料金が超えた場合は中断、起動できない状態になる
  • 上限価格は指定しないで、オンデマンドの上限にする事を推奨
  • 上限価格をオンデマンド価格の10倍などにしても、中断される可能性があるので注意

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-3-3.png

中断のハンドリング

  • インスタンスが削除される2分前に中断通知が来る
  • S3に計算途中のデータをアップロード、ELBからの登録解除、コンテナステータスをDrainingなどに

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-4-4.png

  • スポットインスタンスアドバイザーを利用出来る
  • 中断通知の受信方法
    • EC2 MetaData Serviceにshellなどで定期的にポーリングする方法
    • Events Bridgeを使った方法
      • Lambdaで中断処理

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-5-4.png

  • 中断通知のテスト方法
    • 「中断」自体はシュミレート出来ない
      • キャパシティー不足を任意に発生出来ない
    • 「中断通知」のテストは可能
    • スポットフリートからテストする場合
      • スポットフリートから複数スポットインスタンスを起動して、「ターゲット容量を維持する」のチェックボックスをONにして起動
      • ターゲット容量の変更からキャパシティーを一つ減らして実施すると、中断通知が来る
    • amazon-ec2-metadata-mockを利用する場合

ワークロード別スポットインスタンスの使いこなし術

  • EC2 AutoScaling
    • ミックスインスタンスグループ機能
      • 従来はオンデマンドインスタンスとスポットインスタンスごとにAutoScalingGroupを作らなければいけなかった
      • 現在はオンデマンドとスポットインスタンス、複数インスタンスタイプを混ぜたAutoScalingGroupを作成出来る
    • 分配戦略: capacity-optimized戦略
      • 最も大きな空きキャパシティーがあるスポットプールからインスタンスを起動してくれる機能
  • コンテナ関連サービスを使うパターン
    • アプリケーションの開始、中断、再開をオーケストレーターに委ねられる
    • ECS/EKSの場合は設定が必要
    • Fargate Spotは設定不要でコンテナインスタンスの中断対処が出来る

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-6-4.png

  • ECS
    • /etc/ecs/ecs.configECS_ENABLE_SPOT_INSTANCE_DRAINING=true を指定する
  • Kubernetes / EKS
  • ワークロード事例(AutoScalingとECS, SQSを使った疎結合非同期処理システム)
    • みらい翻訳は100% Spotインスタンス化を実現
      • スポットインスタンス + コンテナ + SQSで実現
      • 処理層の手前ではSQSを使って、正常に処理が終わったら通常通りSQSのメッセージを削除、中断などで終わらなかった場合はメッセージの可視性タイムアウトの機能を使って、再びキューから取得出来る状態になる

https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2020/09/Untitled-7-4.png

  • まとめ
    • スポットインスタンスの基礎
    • 各シーンでのスポットインスタンス使いこなし術
      • AutoScalingでのミックスインスタンスグループ, capacity-optimized
      • コンテナのシンプルな中断処理設定の提供
      • 疎結合アプリケーションでのスポットインスタンス+コンテナ+SQSの活用事例
    • スポットインスタンスワークショップ