Я настраиваю группу автоматического масштабирования (ASG) с политикой смешанных экземпляров , чтобы использовать несколько типов точечных экземпляров.Как ограничить количество пулов точечных экземпляров, используемых моей ASG?
Пулы точечных экземпляров определяются следующим образом:
Набор неиспользуемых экземпляров EC2с тем же типом экземпляра (например, m5.large
), операционной системой, зоной доступности и сетевой платформой.
Я понимаю, что в моем случае пул точечных экземпляров в основном представляет собой отдельную парузона доступности и тип экземпляра.
Мой шаблон CloudFormation создает группу автоматического масштабирования из 16 экземпляров с политикой смешанных экземпляров.Он использует четыре типа экземпляров и все зоны доступности.Тестовая область us-west-2
имеет четыре зоны доступности.Теоретически, группа должна иметь возможность использовать до шестнадцати пулов точечных значений.
Параметр SpotInstancePools
стека устанавливает одноименное свойство ASG.Я попытался установить для него различные значения, но, похоже, он не напрямую контролирует количество пулов точечных экземпляров, используемых ASG.
Шаблон CloudFormation:
AWSTemplateFormatVersion: '2010-09-09'
Description: Testing mixed instance policies
Parameters:
SpotInstancePools:
Type: Number
Default: 1
Description: The ASG's number of spot instance pools.
ImageId:
Type: AWS::EC2::Image::Id
Default: ami-061392db613a6357b
Description: Launch template's AMI. Defaults to Amazon Linux 2.
Resources:
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
AvailabilityZones: !GetAZs
MaxSize: 16
MinSize: 16
MixedInstancesPolicy:
InstancesDistribution:
OnDemandAllocationStrategy: prioritized
OnDemandBaseCapacity: 0
OnDemandPercentageAboveBaseCapacity: 0
SpotAllocationStrategy: lowest-price
SpotInstancePools: !Ref SpotInstancePools
SpotMaxPrice: ''
LaunchTemplate:
LaunchTemplateSpecification:
LaunchTemplateId: !Ref LaunchTemplate
Version: !GetAtt LaunchTemplate.LatestVersionNumber
Overrides:
- InstanceType: t2.small
- InstanceType: t3.small
- InstanceType: t2.medium
- InstanceType: t3.medium
LaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
ImageId: !Ref ImageId
Команда дляcreate stack mixed-instances-policy-test-1
, для которого счетчик SpotInstancePools равен 1:
aws cloudformation create-stack \
--stack-name mixed-instances-policy-test-1 \
--template-body file://mixed-instances-policy.yaml \
--parameters ParameterKey=SpotInstancePools,ParameterValue=1 \
--region us-west-2 \
--profile test
Команда для создания стека mixed-instances-policy-5
, для которого счетчик SpotInstancePools равен 5:
aws cloudformation create-stack \
--stack-name mixed-instances-policy-test-5 \
--template-body file://mixed-instances-policy.yaml \
--parameters ParameterKey=SpotInstancePools,ParameterValue=5 \
--region us-west-2 \
--profile test
Команда дляПеречислите количество используемых пулов уникальных спотовых экземпляров (при необходимости замените имя стека):
aws ec2 describe-instances \
--filters 'Name=tag:aws:cloudformation:stack-name,Values=mixed-instances-policy-test-1' \
--query 'Reservations[].Instances[].[InstanceType, Placement.AvailabilityZone]' \
--output text \
--region us-west-2 \
--profile test |
sort |
uniq --count
После ожидания завершения создания каждого стека я проверяю количество пулов уникальных спотовых экземпляров.
Где SpotInstancePools
установлено на 1
, я вижу 3 уникальных пула.
5 t2.small us-west-2a
5 t3.small us-west-2b
6 t3.small us-west-2c
Где SpotInstancePools
установлено на 5
, я вижу 11 уникальных пулов.
2 t2.medium us-west-2a
1 t2.medium us-west-2b
1 t2.medium us-west-2c
2 t2.small us-west-2a
2 t2.small us-west-2b
1 t2.small us-west-2c
1 t3.medium us-west-2a
1 t3.medium us-west-2b
1 t3.medium us-west-2c
2 t3.small us-west-2b
2 t3.small us-west-2c
В каждом случае я ожидаю, что количество пулов будет равно значению параметра.