-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvpc.yaml
274 lines (238 loc) · 6.4 KB
/
vpc.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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
AWSTemplateFormatVersion: "2010-09-09"
Description: Simple VPC template with private and public subnets, optional flow logs.
Parameters:
EnableFlowLogs:
Default: false
Type: String
AllowedValues: [ true, false ]
Conditions:
FlowLogsEnabled: !Equals [ !Ref EnableFlowLogs, true ]
Resources:
VPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: 10.10.0.0/16
EnableDnsHostnames: true
EnableDnsSupport: true
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-vpc-1'
PublicSubnet:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}a"
CidrBlock: 10.10.10.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-pubsubnet-1'
PublicSubnet2:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}b"
CidrBlock: 10.10.20.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-pubsubnet-2'
PrivateSubnet:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}a"
CidrBlock: 10.10.110.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-privsubnet-1'
PrivateSubnet2:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}a"
CidrBlock: 10.10.120.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-privsubnet-2'
PrivateSubnet3:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}b"
CidrBlock: 10.10.130.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-privsubnet-3'
PrivateSubnet4:
Type: 'AWS::EC2::Subnet'
Properties:
AvailabilityZone: !Sub "${AWS::Region}b"
CidrBlock: 10.10.140.0/24
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-privsubnet-4'
# Public route table:
PublicRoute:
Type: 'AWS::EC2::Route'
Properties:
RouteTableId: !Ref PublicRouteTable
GatewayId: !Ref IGW
DestinationCidrBlock: 0.0.0.0/0
PublicRouteTable:
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-public-routetable'
SubnetRouteTableAssociation1:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet
SubnetRouteTableAssociation2:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet2
# Private route table:
PrivateRoute1:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PrivateRouteTable
DestinationCidrBlock: 0.0.0.0/0
# Route traffic through the NAT Gateway:
NatGatewayId: !Ref NATGateway
PrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-private-routetable
SubnetRouteTableAssociation3:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet
SubnetRouteTableAssociation4:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet2
SubnetRouteTableAssociation5:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet3
SubnetRouteTableAssociation6:
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet4
IGW:
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-igw-1'
VPC1IGW1Attachment:
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
InternetGatewayId: !Ref IGW
VpcId: !Ref VPC
NACL:
Type: 'AWS::EC2::NetworkAcl'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub '${AWS::StackName}-nacl-1'
NACLEntryIngress:
Type: 'AWS::EC2::NetworkAclEntry'
Properties:
NetworkAclId: !Ref NACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: false
CidrBlock: 0.0.0.0/0
NACLEntryEgress:
Type: 'AWS::EC2::NetworkAclEntry'
Properties:
NetworkAclId: !Ref NACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: true
CidrBlock: 0.0.0.0/0
SubnetNACL:
Type: 'AWS::EC2::SubnetNetworkAclAssociation'
Properties:
NetworkAclId: !Ref NACL
SubnetId: !Ref PublicSubnet
# NAT Gateway:
NATGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt NatEip.AllocationId
SubnetId: !Ref PublicSubnet
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-nat
NatEip:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-eip
# TODO: Flush out FlowLogs
FlowLogs:
Type: AWS::EC2::FlowLog
Condition: FlowLogsEnabled
Properties:
ResourceId: !Ref VPC
ResourceType: VPC
TrafficType: ALL
Outputs:
VpcId:
Value: !Ref VPC
Description: VPC Id
Export:
Name: !Sub "${AWS::StackName}-VpcId"
VpcCidr:
Value: !GetAtt VPC.CidrBlock
Description: VPC CIDR block
Export:
Name: !Sub "${AWS::StackName}-cidr"
PublicSubnet1:
Value: !Ref PublicSubnet
Description: Public Subnet
Export:
Name: !Sub "${AWS::StackName}-PublicSubnet1"
PublicSubnet2:
Value: !Ref PublicSubnet2
Description: Public Subnet2
Export:
Name: !Sub "${AWS::StackName}-PublicSubnet2"
PrivateSubnet1:
Value: !Ref PrivateSubnet
Description: Private Subnet
Export:
Name: !Sub "${AWS::StackName}-PrivateSubnet1"
PrivateSubnet2:
Value: !Ref PrivateSubnet2
Description: Private Subnet2
Export:
Name: !Sub "${AWS::StackName}-PrivateSubnet2"
PrivateSubnet3:
Value: !Ref PrivateSubnet3
Description: Private Subnet3
Export:
Name: !Sub "${AWS::StackName}-PrivateSubnet3"
PrivateSubnet4:
Value: !Ref PrivateSubnet4
Description: Private Subnet4
Export:
Name: !Sub "${AWS::StackName}-PrivateSubnet4"