是否可以使用Elastic Beanstlak添加多个自动缩放策略

end*_*unc 6 amazon-web-services amazon-elastic-beanstalk

我们使用ElasticBeanstalk实现了部署生命周期的自动化,除了一件事我们感到高兴.我们希望有多个自动扩展策略,如CPU使用率和网络流量,但似乎我们只需要选择其中一个指标.

我们目前正在使用名为eb_deployer的开源工具,它支持以下链接中列出的配置:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general- autoscalingtrigger

据我们所知,我们只能制定一项政策 aws:autoscaling:trigger

我们也寻找.ebextensions,但似乎.ebextension在这个问题上也有相同的限制.所以,我们想知道有没有办法在ElasticBeanstalk中使用多个自动扩展策略?

小智 5

以下配置对我有用,应该放在弹性 bean 扩展配置文件中:这个配置做了几件改变默认行为的事情:

  • 它禁用自动生成的警报

  • 它创建了 2 个扩展策略:一个是 CPU 负载,另一个是针对每个目标的请求数。

  • 每个警报它使用不同的评估期来放大和缩小,因为我希望快速放大但缩小速度慢。

禁用自动生成的警报:

 ######## disable the default alarms ##############
  AWSEBCloudwatchAlarmHigh:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions: []

  AWSEBCloudwatchAlarmLow:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions: []
  
  
  #############   create custom policies ##################
  AutoScalingCustomScaleDownPolicy:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      AdjustmentType: ChangeInCapacity
      AutoScalingGroupName: {Ref: AWSEBAutoScalingGroup}
      ScalingAdjustment: -1

  AutoScalingCustomScaleUpPolicy:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      AdjustmentType: ChangeInCapacity
      AutoScalingGroupName: {Ref: AWSEBAutoScalingGroup}
      ScalingAdjustment: 1
 
 
 
 ############## alarms for cpu load - reusing the default policy of EB #######
   CustomScalingAlarmHigh:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - {Ref: AWSEBAutoScalingScaleUpPolicy}
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": scale up on cpu load" ]]}
      ComparisonOperator: GreaterThanThreshold
      Dimensions:
        - Name: AutoScalingGroupName
          Value: {Ref: AWSEBAutoScalingGroup}
      Statistic: Average
      Period: 60
      EvaluationPeriods: 2
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Threshold: 55

  CustomScalingAlarmLow:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - {Ref: AWSEBAutoScalingScaleDownPolicy}
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": scale down on cpu load" ]]}
      ComparisonOperator: LessThanThreshold
      Dimensions:
        - Name: AutoScalingGroupName
          Value: {Ref: AWSEBAutoScalingGroup}
      Period: 60
      Statistic: Average
      EvaluationPeriods: 15
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Threshold: 20



 ############# alarms on request count per target ####################
 ############# using the new custom policy        ####################
  CustomScalingOnRequestCountAlarmLow:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - {Ref: AutoScalingCustomScaleDownPolicy}
      InsufficientDataActions:
        - {Ref: AWSEBAutoScalingScaleDownPolicy}
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": scale down on request count." ]]}
      ComparisonOperator: LessThanThreshold
      Dimensions:
        - Name: LoadBalancer
          Value: { "Fn::GetAtt": [ "AWSEBV2LoadBalancer", "LoadBalancerFullName" ] }
        - Name: TargetGroup
          Value: { "Fn::GetAtt": [ "AWSEBV2LoadBalancerTargetGroup", "TargetGroupFullName" ] }
      Period: 60
      Statistic: Sum
      EvaluationPeriods: 5
      MetricName: RequestCountPerTarget
      Namespace: AWS/ApplicationELB
      Threshold: 70

  CustomScalingOnRequestCountAlarmHigh:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - {Ref: AutoScalingCustomScaleUpPolicy}
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": scale up on request count." ]]}
      ComparisonOperator: GreaterThanThreshold
      Dimensions:
        - Name: LoadBalancer
          Value: { "Fn::GetAtt": [ "AWSEBV2LoadBalancer", "LoadBalancerFullName" ] }
        - Name: TargetGroup
          Value: { "Fn::GetAtt": [ "AWSEBV2LoadBalancerTargetGroup", "TargetGroupFullName" ] }
      Period: 60
      Statistic: Sum
      EvaluationPeriods: 2
      MetricName: RequestCountPerTarget
      Namespace: AWS/ApplicationELB
      Threshold: 250
Run Code Online (Sandbox Code Playgroud)