首页 > 解决方案 > 如何使用 Cloud Formation 或 AWS CLI 将扩展策略添加到 Auto Scaling 组

问题描述

如何使用 Cloud Formation 或 AWS CLI 将扩展策略添加到新的或现有的 Auto Scaling 组

标签: amazon-ec2amazon-cloudformationautoscaling

解决方案


有一个重要的例子,但下面是我现有的云形成模板之一的片段。

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

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

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

推荐阅读