この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWSチームのすずきです。
2020年11月19日のアップデートでサポートされた、複数の起動テンプレートを利用して、x86_64とarm64異なるCPUアーキテクチャを組み合わせたEC2オートスケーリンググループ設定を試す機会がありましたので、紹介させていただきます。
Amazon EC2 Auto Scaling が、Auto Scaling グループの複数起動テンプレートのサポートを発表
設定
2020年11月時点 の AWSコンソールは、複数の起動テンプレートを利用する EC2 オートスケール設定をサポートしていませんでした。
今回は、CloudFormation を利用して設定を試みました。
CloudFormation
- テンプレート
AWSTemplateFormatVersion: '2010-09-09'
Description: Ec2 AutoScaling Overrides LaunchTemplateSpecification
Parameters:
Ec2SubnetId:
Type: List<AWS::EC2::Subnet::Id>
Ec2ImageId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Ec2ImageIdArm64:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-arm64-gp2
Resources:
Ec2LaunchTemplateX86:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
ImageId: !Ref 'Ec2ImageId'
InstanceType: t3.nano
Ec2LaunchTemplateArm64:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
ImageId: !Ref 'Ec2ImageIdArm64'
InstanceType: t4g.nano
Ec2InstanceAutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
VPCZoneIdentifier: !Ref 'Ec2SubnetId'
DesiredCapacity: 9
MinSize: 0
MaxSize: 9
MixedInstancesPolicy:
InstancesDistribution:
OnDemandBaseCapacity: 0
OnDemandPercentageAboveBaseCapacity: 0
SpotAllocationStrategy: lowest-price
SpotInstancePools: 3
LaunchTemplate:
LaunchTemplateSpecification:
LaunchTemplateId: !Ref 'Ec2LaunchTemplateX86'
Version: !GetAtt 'Ec2LaunchTemplateX86.LatestVersionNumber'
Overrides:
- InstanceType: t3.micro
- InstanceType: t3a.micro
- LaunchTemplateSpecification:
LaunchTemplateId: !Ref 'Ec2LaunchTemplateArm64'
Version: !GetAtt 'Ec2LaunchTemplateArm64.LatestVersionNumber'
InstanceType: t4g.micro
Overrides
「Overrides」設定として LaunchTemplateSpecification の指定が可能になりました。
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
MixedInstancesPolicy:
LaunchTemplate:
Overrides:
- InstanceType: t3.micro
- InstanceType: t3a.micro
- LaunchTemplateSpecification:
LaunchTemplateId: !Ref 'Ec2LaunchTemplateArm64'
Version: !GetAtt 'Ec2LaunchTemplateArm64.LatestVersionNumber'
InstanceType: t4g.micro
SpotAllocationStrategy
SpotAllocationStrategy は「lowest-price」、当該アベイラビリティーゾーンのスポット価格が廉価な インスタンスを3種類組み合わせて利用する指定としました。
- スポット価格
ARMアーキテクチャの「t4g」インスタンスの利用を意図して「lowest-price」を利用しましたが、 通常は「SpotAllocationStrategy: capacity-optimized」、 アベイラビリティーゾーンごとの利用可能なスポットキャパシティーに基づいて在庫の多いインスタンスを利用し、 リバランスも有効「CapacityRebalance: true」にして利用する事をおすすめします。
MixedInstancesPolicy:
InstancesDistribution:
SpotAllocationStrategy: capacity-optimized
CapacityRebalance: true
確認
東京リージョンのデフォルトVPCのセグメントを利用して CloudFormation でCreateStack を実施、 x86_64 と arm64、異なる AMI を利用する EC2インスタンス が、一つのオートスケールグループ配下で起動した事が確認できました。
まとめ
従来、複数の起動テンプレート毎に EC2オートスケーリンググループ設定を用意した場合、 CodeDeployなどの利用や稼働台数の管理が煩雑になるなどの課題がありましたが、シンプルな利用が可能になりました。
また、異なるCPUアーキテクチャを混在させた利用以外でも、 組み合わせるEC2インスタンス、インスタンスストアが利用可能な場合にローカルストレージ設定をUserDataで実施する場合や、 T2/T3 無制限オプション (CreditSpecification) 設定が望ましい場合にもご活用ください。