インスタンスタイプを組み合わせたオートスケールをCloudFormationで設定してみた

AWS CloudFormationを利用して、スポットや複数のインスタンスタイプを組み合わせたEC2オートスケールを設定してみました。
2018.12.20

はじめに

AWSチームのすずきです。

2018年11月に紹介させて頂いたEC2オートスケーリングのインスタンスタイプの組み合わせ設定、 CloudFormationを利用して行う機会がありましたので、紹介させて頂きます。

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

設定

LaunchTemplate

  • MixedInstancesPolicy で利用する起動テンプレート、バージョンは1〜20に限られる制限が存在します。その回避のため、起動テンプレート名(LaunchTemplateName)の変更によるリソースの置換により、バージョンを1に戻せる設定としました。
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateName: !Ref 'Ec2LaunchtemplateName'
      LaunchTemplateData:
        KeyName: !Ref 'Ec2InstanceKeyName'
        ImageId: !Ref 'Ec2ImageId'
        InstanceType: t2.micro

AutoScalingGroup

  • MixedInstancesPolicy で インスタンスの組み合わせ条件を指定します。
  • Overrides で利用するインスタンスタイプを指定します。オンデマンドインスタンスはインスタンスタイプ指定の記述順序が早いもの、スポットインスタンスはスポット価格が廉価なものが優先して利用されます。
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      MixedInstancesPolicy:
        InstancesDistribution:
          OnDemandBaseCapacity: 1
          OnDemandPercentageAboveBaseCapacity: 10
          SpotInstancePools: 2
        LaunchTemplate:
          LaunchTemplateSpecification:
            LaunchTemplateId: !Ref 'Ec2InstanceLaunchTemplate'
            Version: !GetAtt 'Ec2InstanceLaunchTemplate.LatestVersionNumber'
          Overrides:
            - InstanceType: t3.micro
            - InstanceType: t2.micro

実行結果

  • テンプレートを利用して10台のEC2インスタンスの起動を試みました。

CloudFormationパラメータ指定

オートスケーリンググループ設定

スポットインスタンス起動状況

  • 8台がスポットインスタンスとして起動しました、
  • ap-northeast-1d (apne1-az2)は4台全てが「t3」
  • ap-northeast-1a (apne1-az4)は、2台が「t2」、2台が「t3」で起動しました。

まとめ

CloudFormationで作成したEC2のオートスケール環境、「MixedInstancesPolicy」の指定によりインスタンスタイプの混在が簡単に設定可能になりました。

スポットインスタンスの活用によるEC2費用の抑制や、AWSの在庫が不足気味なインスタンスを利用する際、InsufficientInstanceCapacityエラーが問題になる場合の回避策として活用ください。

テンプレート