この記事は公開されてから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 グループ
複数インスタンスタイプを混在させた設定が生成されていました。
起動テンプレート
スポット設定を実施したElastic Beanstalk環境、起動テンプレートを利用する設定となっていました。
まとめ
Elastic Beanstalk 公式にスポットインスタンスをサポートしました。
スポットインスタンスの強制中断に備える場合、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