Elastic Beanstalkがスポットインスタンスをサポートしました

2019.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSチームのすずきです。

AWS Elastic Beanstalk、EC2のスポットインスタンスをサポートするアップデートがありました。

EC2を オンデマンドの最大91%オフの価格で利用できるスポット設定を試す機会がありましたので、紹介させて頂きます。

設定

Elastic Beanstalk ダッシュボードの「設定」→「容量」で、スポット設定が可能になりました。

「フリートの構成」として「購入オプションとインスタンスの組み合わせ」を指定します。

スポット設定

以下のスポットインスタンス設定としました。

  • インスタンス起動数: 10
  • オンデマンドベースは「1」、最低1台はオンデマンドで起動。
  • オンデマンドとスポットインスタンスの比率は 15:85、スポットを多く利用。
  • 廉価な「T3」を中心に利用、「T3」が在庫不足などで起動しない場合、「C5」「M5」を利用

スポットへの設定変更、EC2の交換に伴うサービス影響が発生する可能性があります。 クローン機能などを活用する事をおすすめします。

確認

スポット設定反映が完了した Elastic Beanstalk 環境を確認しました。

EC2

オンデマンドインスタンス2台、スポットインスタンス8台の起動を確認できました。

Auto Scaling グループ

複数インスタンスタイプを混在させた設定が生成されていました。

EC2のオートスケールが複数インスタンスタイプの混在指定に対応、廉価なスポット利用が実現しやすくなりました。

起動テンプレート

スポット設定を実施したElastic Beanstalk環境、起動テンプレートを利用する設定となっていました。

まとめ

Elastic Beanstalk 公式にスポットインスタンスをサポートしました。

スポットインスタンスの強制中断に備える場合、Lambdaを利用したELBからの自動デタッチを組み合わせてご利用下さい。

終了通知が届いたスポットインスタンスをLambdaでELBから取り外してみた

CFn用設定

CloudFormationで設置する ConfigurationTemplate設定例です。

  ConfigurationTemplate:
    Type: 'AWS::ElasticBeanstalk::ConfigurationTemplate'
    Properties:
      ApplicationName: !Ref Application
      Description: ConfigurationTemplate
      OptionSettings:
        - Namespace: aws:elasticbeanstalk:environment:process:default
          OptionName: DeregistrationDelay
          Value: 55
        - Namespace: aws:ec2:instances
          OptionName: EnableSpot
          Value: true
        - Namespace: aws:ec2:instances
          OptionName: InstanceTypes
          Value: 't3.medium,c5.large,m5.large'
        - Namespace: aws:ec2:instances
          OptionName: SpotFleetOnDemandBase
          Value: 1
        - Namespace: aws:ec2:instances
          OptionName: SpotFleetOnDemandAboveBasePercentage
          Value: 10