-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkong.scaling.stack.yml
90 lines (83 loc) · 3.01 KB
/
kong.scaling.stack.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
AWSTemplateFormatVersion: '2010-09-09'
Description: "Manages All Kong-related Service and Application Scaling"
Resources:
# TODO: Dynamically scale ECS Cluster via CloudWatch alarms (similar to service scaling)
###########################################################
# #
# SERVICE SCALING #
# #
###########################################################
ServiceCPUAlarmScaleUp:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Alarm if the service CPU exceeds the reserved amount
Namespace: AWS/ECS
Dimensions:
- Name: ClusterName
Value: !ImportValue KongECSCluster
- Name: ServiceName
Value: !ImportValue KongServiceName
MetricName: CPUUtilization
Statistic: Average
ComparisonOperator: GreaterThanThreshold
Threshold: 100
# Minute duration
EvaluationPeriods: 1
Period: 60 #Seconds
AlarmActions:
- !Ref ServiceScaleUpPolicy
ServiceCPUAlarmScaleDown:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Alarm if the service CPU usage is halved
Namespace: AWS/ECS
Dimensions:
- Name: ClusterName
Value: !ImportValue KongECSCluster
- Name: ServiceName
Value: !ImportValue KongServiceName
MetricName: CPUUtilization
Statistic: Average
ComparisonOperator: LessThanOrEqualToThreshold
Threshold: 50
# Minute duration
EvaluationPeriods: 5
Period: 60 #Seconds
AlarmActions:
- !Ref ServiceScaleDownPolicy
ServiceScaleUpPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Join ['-', [ 'Kong', !Ref ResourceSuffix, 'ScaleUpPolicy' ]]
PolicyType: StepScaling
ScalingTargetId: !Ref ServiceScalingTarget
StepScalingPolicyConfiguration:
AdjustmentType: ChangeInCapacity
Cooldown: 60
MetricAggregationType: Average
StepAdjustments:
- MetricIntervalLowerBound: 0
ScalingAdjustment: 1
ServiceScaleDownPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Join ['-', [ 'Kong', !Ref ResourceSuffix, 'ScaleDownPolicy' ]]
PolicyType: StepScaling
ScalingTargetId: !Ref ServiceScalingTarget
StepScalingPolicyConfiguration:
AdjustmentType: ChangeInCapacity
Cooldown: 60
MetricAggregationType: Average
StepAdjustments:
- MetricIntervalUpperBound: 0
ScalingAdjustment: -1
ServiceScalingTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
# DependsOn: KongService
Properties:
MaxCapacity: 3
MinCapacity: 1
ResourceId: !Join ['', [ 'service/', !ImportValue KongECSCluster, '/', !ImportValue KongServiceName ]]
RoleARN: !GetAtt ServiceAutoscalingRole.Arn
ScalableDimension: ecs:service:DesiredCount
ServiceNamespace: ecs