Amazon ec2 如何使用云形成或AWS CLI向自动缩放组添加缩放策略

Amazon ec2 如何使用云形成或AWS CLI向自动缩放组添加缩放策略,amazon-ec2,amazon-cloudformation,autoscaling,Amazon Ec2,Amazon Cloudformation,Autoscaling,如何使用Cloud Formation或AWS CLI向新的或现有的自动缩放组添加缩放策略这方面有很多重要的示例,但下面是我现有的一个Cloud Formation模板的片段 1)参数 您应该将最小值和最大值作为参数 2)自动缩放组本身 我在下面包括它,但是如果你不想包括它,你可以把它作为一个参数。您还可以使用一个条件,该条件可以使用参数的现有值作为确定是否应创建ASG的条件。请注意,如果您确实使用了该条件,那么您还将在带有in语句的所有引用上使用该条件(以确定是使用本地ASG in模板还是参数

如何使用Cloud Formation或AWS CLI向新的或现有的自动缩放组添加缩放策略这方面有很多重要的示例,但下面是我现有的一个Cloud Formation模板的片段

1)参数 您应该将最小值和最大值作为参数

2)自动缩放组本身 我在下面包括它,但是如果你不想包括它,你可以把它作为一个参数。您还可以使用一个条件,该条件可以使用参数的现有值作为确定是否应创建ASG的条件。请注意,如果您确实使用了该条件,那么您还将在带有in语句的所有引用上使用该条件(以确定是使用本地ASG in模板还是参数)

3)警报 这是自动秤组的关键元素-确定报警。我使用集群的内存保留,但我认为CPU是最常见的。您可以使用任何度量cloudwatch监视器,甚至自定义度量

4)政策 我现在快速地上下反应…一个新实例需要30-60秒才能产生影响,这就是为什么我在事件之间有120秒。您需要了解您的系统,以正确选择适当的数量,避免过度缩放

ECSClusterAutoScalingGroup:
  Type: 'AWS::AutoScaling::AutoScalingGroup'
  Condition: notDedicated
  Properties:
    VPCZoneIdentifier:
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet1'
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet2'
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet3'
    MinSize: !Ref MinSize
    MaxSize: !Ref MaxSize
    HealthCheckGracePeriod: '600'
    HealthCheckType: EC2
    LaunchConfigurationName: !Ref ECSLaunchConfiguration
    MetricsCollection:
    - Granularity: 1Minute
ECSClusterScaleOutPolicy:
  Type: 'AWS::AutoScaling::ScalingPolicy'
  Condition: AutoScaleNotDedicated
  Properties:
    AdjustmentType: ChangeInCapacity
    AutoScalingGroupName: !Ref ECSClusterAutoScalingGroup
    Cooldown: '120'
    ScalingAdjustment: '1'
ECSClusterScaleOutAlarm:
  Type: 'AWS::CloudWatch::Alarm'
  Condition: AutoScaleNotDedicated
  Properties:
    EvaluationPeriods: '1'
    Statistic: Average
    Threshold: '70'
    AlarmDescription: Scale up alarm when Memory Reservation > 70% for 1 minute
    Period: '60'
    AlarmActions:
    - !Ref ECSClusterScaleOutPolicy
    Namespace: AWS/ECS
    Dimensions:
    - Name: ClusterName
      Value: !Ref ECSCluster
    ComparisonOperator: GreaterThanThreshold
    MetricName: MemoryReservation
ECSClusterScaleInPolicy:
  Type: 'AWS::AutoScaling::ScalingPolicy'
  Condition: AutoScaleNotDedicated
  Properties:
    AdjustmentType: ChangeInCapacity
    AutoScalingGroupName: !Ref ECSClusterAutoScalingGroup
    Cooldown: '120'
    ScalingAdjustment: '-1'
ECSClusterScaleInAlarm:
  Type: 'AWS::CloudWatch::Alarm'
  Condition: AutoScaleNotDedicated
  Properties:
    EvaluationPeriods: '1'
    Statistic: Average
    Threshold: '45'
    AlarmDescription: Scale down alarm when Memory Reservation <= 45% for 5 minutes
    Period: '300'
    AlarmActions:
    - !Ref ECSClusterScaleInPolicy
    Namespace: AWS/ECS
    Dimensions:
    - Name: ClusterName
      Value: !Ref ECSCluster
    ComparisonOperator: LessThanOrEqualToThreshold
    MetricName: MemoryReservation
ECSClusterAutoScalingGroup:
类型:“AWS::AutoScaling::AutoScalingGroup”
条件:不专用
特性:
VPCZoneIdentifier:
-'Fn::ImportValue':!子“${VPC}-私有子网1”
-'Fn::ImportValue':!子“${VPC}-私有子网2”
-'Fn::ImportValue':!子“${VPC}-私有子网3”
MinSize:!Ref MinSize
最大尺寸:!参考最大尺寸
HealthCheckGracePeriod:'600'
HealthCheckType:EC2
LaunchConfigurationName:!参考ECSLaunchConfiguration
MetricsCollection:
-粒度:1分钟
ECSClusterScaleOutPolicy:
类型:“AWS::AutoScaling::ScalingPolicy”
条件:自动缩放非专用
特性:
调整类型:变更无能力
自动缩放组名:!参考ECSCLUSTRAUTOSCALINGGROUP
冷却时间:“120”
缩放调整:“1”
ECSClusterScaleOutAlarm:
类型:“AWS::CloudWatch::Alarm”
条件:自动缩放非专用
特性:
评估期:“1”
统计:平均值
门槛:“70”
AlarmDescription:当内存保留>70%并持续1分钟时,放大报警
期间:'60'
报警操作:
- !参考ECSClusterScaleOutPolicy
名称空间:AWS/ECS
尺寸:
-姓名:ClusterName
值:!参考ECSCluster
比较运算符:大于阈值
度量名称:MemoryReservation
ECSClusterScaleInPolicy:
类型:“AWS::AutoScaling::ScalingPolicy”
条件:自动缩放非专用
特性:
调整类型:变更无能力
自动缩放组名:!参考ECSCLUSTRAUTOSCALINGGROUP
冷却时间:“120”
缩放调整:'-1'
ECSClustersCalinalArm:
类型:“AWS::CloudWatch::Alarm”
条件:自动缩放非专用
特性:
评估期:“1”
统计:平均值
阈值:“45”

AlarmDescription:Scale down alarm when Memory Reservation有很多这样的例子,但下面是我现有的云形成模板中的一个片段

1)参数 您应该将最小值和最大值作为参数

2)自动缩放组本身 我在下面包括它,但是如果你不想包括它,你可以把它作为一个参数。您还可以使用一个条件,该条件可以使用参数的现有值作为确定是否应创建ASG的条件。请注意,如果您确实使用了该条件,那么您还将在带有in语句的所有引用上使用该条件(以确定是使用本地ASG in模板还是参数)

3)警报 这是自动秤组的关键元素-确定报警。我使用集群的内存保留,但我认为CPU是最常见的。您可以使用任何度量cloudwatch监视器,甚至自定义度量

4)政策 我现在快速地上下反应…一个新实例需要30-60秒才能产生影响,这就是为什么我在事件之间有120秒。您需要了解您的系统,以正确选择适当的数量,避免过度缩放

ECSClusterAutoScalingGroup:
  Type: 'AWS::AutoScaling::AutoScalingGroup'
  Condition: notDedicated
  Properties:
    VPCZoneIdentifier:
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet1'
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet2'
    - 'Fn::ImportValue': !Sub '${VPC}-PrivateSubnet3'
    MinSize: !Ref MinSize
    MaxSize: !Ref MaxSize
    HealthCheckGracePeriod: '600'
    HealthCheckType: EC2
    LaunchConfigurationName: !Ref ECSLaunchConfiguration
    MetricsCollection:
    - Granularity: 1Minute
ECSClusterScaleOutPolicy:
  Type: 'AWS::AutoScaling::ScalingPolicy'
  Condition: AutoScaleNotDedicated
  Properties:
    AdjustmentType: ChangeInCapacity
    AutoScalingGroupName: !Ref ECSClusterAutoScalingGroup
    Cooldown: '120'
    ScalingAdjustment: '1'
ECSClusterScaleOutAlarm:
  Type: 'AWS::CloudWatch::Alarm'
  Condition: AutoScaleNotDedicated
  Properties:
    EvaluationPeriods: '1'
    Statistic: Average
    Threshold: '70'
    AlarmDescription: Scale up alarm when Memory Reservation > 70% for 1 minute
    Period: '60'
    AlarmActions:
    - !Ref ECSClusterScaleOutPolicy
    Namespace: AWS/ECS
    Dimensions:
    - Name: ClusterName
      Value: !Ref ECSCluster
    ComparisonOperator: GreaterThanThreshold
    MetricName: MemoryReservation
ECSClusterScaleInPolicy:
  Type: 'AWS::AutoScaling::ScalingPolicy'
  Condition: AutoScaleNotDedicated
  Properties:
    AdjustmentType: ChangeInCapacity
    AutoScalingGroupName: !Ref ECSClusterAutoScalingGroup
    Cooldown: '120'
    ScalingAdjustment: '-1'
ECSClusterScaleInAlarm:
  Type: 'AWS::CloudWatch::Alarm'
  Condition: AutoScaleNotDedicated
  Properties:
    EvaluationPeriods: '1'
    Statistic: Average
    Threshold: '45'
    AlarmDescription: Scale down alarm when Memory Reservation <= 45% for 5 minutes
    Period: '300'
    AlarmActions:
    - !Ref ECSClusterScaleInPolicy
    Namespace: AWS/ECS
    Dimensions:
    - Name: ClusterName
      Value: !Ref ECSCluster
    ComparisonOperator: LessThanOrEqualToThreshold
    MetricName: MemoryReservation
ECSClusterAutoScalingGroup:
类型:“AWS::AutoScaling::AutoScalingGroup”
条件:不专用
特性:
VPCZoneIdentifier:
-'Fn::ImportValue':!子“${VPC}-私有子网1”
-'Fn::ImportValue':!子“${VPC}-私有子网2”
-'Fn::ImportValue':!子“${VPC}-私有子网3”
MinSize:!Ref MinSize
最大尺寸:!参考最大尺寸
HealthCheckGracePeriod:'600'
HealthCheckType:EC2
LaunchConfigurationName:!参考ECSLaunchConfiguration
MetricsCollection:
-粒度:1分钟
ECSClusterScaleOutPolicy:
类型:“AWS::AutoScaling::ScalingPolicy”
条件:自动缩放非专用
特性:
调整类型:变更无能力
自动缩放组名:!参考ECSCLUSTRAUTOSCALINGGROUP
冷却时间:“120”
缩放调整:“1”
ECSClusterScaleOutAlarm:
类型:“AWS::CloudWatch::Alarm”
条件:自动缩放非专用
特性:
评估期:“1”
统计:平均值
门槛:“70”
AlarmDescription:当内存保留>70%并持续1分钟时,放大报警
期间:'60'
报警操作:
- !参考ECSClusterScaleOutPolicy
名称空间:AWS/ECS
尺寸:
-姓名:ClusterName
值:!参考ECSCluster
比较运算符:大于阈值
度量名称:MemoryReservation
ECSClusterScaleInPolicy:
类型:“AWS::AutoScaling::ScalingPolicy”
条件:自动缩放非专用
特性:
调整类型:变更无能力
自动缩放组名:!参考ECSCLUSTRAUTOSCALINGGROUP
冷却时间:“120”
缩放调整:'-1'
ECSClustersCalinalArm:
类型:'AWS::CloudWat