-
Notifications
You must be signed in to change notification settings - Fork 2
/
rollingUpdate.yaml
234 lines (225 loc) · 5.51 KB
/
rollingUpdate.yaml
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
AWSTemplateFormatVersion: '2010-09-09'
Resources:
ELBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow http to client host
GroupName: ELBSecurityGroup
VpcId:
Ref: MyVPCId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 0
ToPort: 65535
CidrIp: 0.0.0.0/0
InstanceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow http to client host
GroupName: AppInstanceSecurityGroup
VpcId:
Ref: MyVPCId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 0
ToPort: 65535
CidrIp: 0.0.0.0/0
DependsOn:
- ELBSecurityGroup
ELB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
ConnectionDrainingPolicy:
Enabled: true
Timeout: 30
CrossZone: true
IpAddressType: ipv4
Name:
Ref: InternalELBName
Scheme: internet-facing
SecurityGroups: [
Ref: ELBSecurityGroup ]
Subnets:
Ref: Subnets
Type: application
ELBTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
HealthCheckIntervalSeconds: 10
HealthCheckPath: "/"
HealthCheckPort: '80'
HealthCheckProtocol: HTTP
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 5
Matcher:
HttpCode: '200'
Name: APP
Port: 80
Protocol: HTTP
TargetGroupAttributes:
- Key: deregistration_delay.timeout_seconds
Value: '20'
UnhealthyThresholdCount: 2
VpcId:
Ref: MyVPCId
DependsOn:
- ELB
ELBDefaultListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
LoadBalancerArn:
Ref: ELB
DefaultActions:
- Type: forward
TargetGroupArn:
Ref: ELBTargetGroup
Port: 80
Protocol: HTTP
DependsOn:
- ELB
- ELBTargetGroup
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
MaxSize:
Ref: ASGMaxSize
MinSize:
Ref: ASGMinSize
DesiredCapacity:
Ref: ASGSize
HealthCheckType: ELB
HealthCheckGracePeriod: '900'
LaunchConfigurationName:
Ref: LaunchConfiguration
VPCZoneIdentifier:
Ref: Subnets
TargetGroupARNs: [
Ref: ELBTargetGroup ]
TerminationPolicies:
- Default
CreationPolicy:
ResourceSignal:
Count: 1
Timeout: PT10M
UpdatePolicy:
AutoScalingRollingUpdate:
MaxBatchSize: '1'
MinInstancesInService: '1'
PauseTime: PT10M
SuspendProcesses:
- AlarmNotification
WaitOnResourceSignals: true
DependsOn:
- LaunchConfiguration
LaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
AssociatePublicIpAddress: true
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
DeleteOnTermination: true
VolumeSize: 8
VolumeType: gp2
EbsOptimized: false
ImageId:
Fn::FindInMap:
- RegionMap
- Ref: AWS::Region
- AMI
InstanceMonitoring: true
InstanceType:
Ref: InstanceType
KeyName:
Ref: KeyName
SecurityGroups: [
Ref: InstanceSecurityGroup ]
UserData:
Fn::Base64:
Fn::Join:
- ''
- - "#!/bin/bash -ex"
- "\n"
- yum -y install httpd
- "\n"
- chkconfig httpd on
- "\n"
- 'echo "Hello World welcome to App deployed using Rolling update. Version- '
- Ref: VersionParameter
- "\" >> /var/www/html/index.html"
- "\n"
- service httpd start
- "\n"
- "/opt/aws/bin/cfn-signal -e 0 --region "
- Ref: AWS::Region
- " --stack "
- Ref: AWS::StackName
- " --resource AutoScalingGroup"
- "\n"
DependsOn:
- InstanceSecurityGroup
Parameters:
MyVPCId:
Description: VPC Id
Type: AWS::EC2::VPC::Id
Subnets:
Description: List of subnets
Type: List<AWS::EC2::Subnet::Id>
InternalELBName:
Description: Internal ELB Name Assigned
Type: String
Default: my-internal-elb
ASGSize:
Description: Desired number of EC2 instances in Auto Scaling Group
Type: Number
Default: 2
ASGMinSize:
Description: Min number of EC2 instances in Auto Scaling Group
Type: Number
Default: 1
ASGMaxSize:
Description: Max number of EC2 instances in Auto Scaling Group
Type: Number
Default: 4
InstanceType:
Description: EC2 instance type
Type: String
Default: t2.micro
AllowedValues:
- t1.micro
- t2.micro
KeyName:
Description: EC2 key pair
Type: String
Default: my_ec2_key
VersionParameter:
Description: Software version to deploy
Type: String
Mappings:
RegionMap:
us-east-1:
AMI: ami-098f16afa9edf40be
Outputs:
ELB:
Value:
Fn::Join:
- ''
- - http://
- Fn::GetAtt:
- ELB
- DNSName
Description: Load Balancer URL