1- # openvpn_server
2-
3- provider "aws" {
4- region = " ${ var . region } "
5- }
6-
7- /* ---------------------------- */
8- /* IAM Role & Instance Profile */
9- /* ---------------------------- */
1+ # OpenVPN Server
102
3+ # # Creates IAM role & policies
114resource "aws_iam_role" "vpn_role" {
12- name = " ${ var . region } -${ var . stack_item_label } -vpn "
5+ name = " ${ var . stack_item_label } -${ var . region } "
136 path = " /"
147
158 assume_role_policy = << EOF
@@ -42,8 +35,8 @@ resource "aws_iam_role_policy" "s3_vpn_ro" {
4235 "s3:Get*"
4336 ],
4437 "Resource": [
45- "arn:aws:s3:::${ var . s3_path } ",
46- "arn:aws:s3:::${ var . s3_path } /*"
38+ "arn:aws:s3:::${ var . s3_bucket } / ${ var . s3_bucket_prefix } ",
39+ "arn:aws:s3:::${ var . s3_bucket } / ${ var . s3_bucket_prefix } /*"
4740 ]
4841 },
4942 {
@@ -83,77 +76,56 @@ resource "aws_iam_role_policy" "tags" {
8376EOF
8477}
8578
79+ # # Creates IAM instance profile
8680resource "aws_iam_instance_profile" "vpn_profile" {
87- name = " ${ var . region } -${ var . stack_item_label } -vpn "
81+ name = " ${ var . stack_item_label } -${ var . region } "
8882 roles = [" ${ aws_iam_role . vpn_role . name } " ]
8983}
9084
91- /* ---------------------------- */
92- /* Security Group */
93- /* ---------------------------- */
85+ # # Creates security group rules
9486resource "aws_security_group_rule" "allow_all_out" {
95- type = " egress"
96- from_port = 0
97- to_port = 0
98- protocol = " -1"
99- cidr_blocks = [" 0.0.0.0/0" ]
100-
101- security_group_id = " ${ module . asg . sg_id } "
87+ type = " egress"
88+ from_port = 0
89+ to_port = 0
90+ protocol = " -1"
91+ cidr_blocks = [" 0.0.0.0/0" ]
92+ security_group_id = " ${ module . cluster . sg_id } "
10293}
10394
10495resource "aws_security_group_rule" "allow_ssh_in_tcp" {
105- type = " ingress"
106- from_port = 22
107- to_port = 22
108- protocol = " tcp"
109- cidr_blocks = [" ${ split (" ," ,var. cidr_whitelist )} " ]
110-
111- security_group_id = " ${ module . asg . sg_id } "
112- }
113-
114- resource "aws_security_group_rule" "allow_openvpn_in_tdp" {
115- type = " ingress"
116- from_port = 1194
117- to_port = 1194
118- protocol = " tcp"
119- cidr_blocks = [" ${ split (" ," ,var. cidr_whitelist )} " ]
120-
121- security_group_id = " ${ module . asg . sg_id } "
96+ type = " ingress"
97+ from_port = 22
98+ to_port = 22
99+ protocol = " tcp"
100+ cidr_blocks = [" ${ split (" ," ,var. cidr_whitelist )} " ]
101+ security_group_id = " ${ module . cluster . sg_id } "
122102}
123103
124- resource "aws_security_group_rule" "allow_ping_request_icmp" {
125- type = " ingress"
126- from_port = 8
127- to_port = 0
128- protocol = " icmp"
129- cidr_blocks = [" 0.0.0.0/0" ]
130-
131- security_group_id = " ${ module . asg . sg_id } "
104+ resource "aws_security_group_rule" "allow_openvpn_in_tcp" {
105+ type = " ingress"
106+ from_port = 1194
107+ to_port = 1194
108+ protocol = " tcp"
109+ cidr_blocks = [" ${ split (" ," ,var. cidr_whitelist )} " ]
110+ security_group_id = " ${ module . cluster . sg_id } "
132111}
133112
134- resource "aws_security_group_rule" "allow_ping_reply_icmp" {
135- type = " ingress"
136- from_port = 0
137- to_port = 0
138- protocol = " icmp"
139- cidr_blocks = [" 0.0.0.0/0" ]
140-
141- security_group_id = " ${ module . asg . sg_id } "
113+ resource "aws_security_group_rule" "allow_ping_in_icmp" {
114+ type = " ingress"
115+ from_port = 0
116+ to_port = 0
117+ protocol = " icmp"
118+ cidr_blocks = [" 0.0.0.0/0" ]
119+ security_group_id = " ${ module . cluster . sg_id } "
142120}
143121
144- /* ---------------------------- */
145- /* User Data */
146- /* ---------------------------- */
122+ # # Creates instance user data
147123resource "template_file" "user_data" {
148124 template = " ${ file (" ${ path . module } /templates/user_data.tpl" )} "
149125
150126 vars {
151- instance_number = " ${ count . index } "
152- hostname = " ${ var . role } -${ count . index } "
153- region = " ${ var . region } "
154- stack_item_label = " ${ var . stack_item_label } "
155- role = " ${ var . role } "
156- s3_path = " ${ var . s3_path } "
127+ s3_bucket = " ${ var . s3_bucket } "
128+ s3_bucket_prefix = " ${ var . s3_bucket_prefix } "
157129 route_cidrs = " ${ var . route_cidrs } "
158130 }
159131
@@ -162,12 +134,13 @@ resource "template_file" "user_data" {
162134 }
163135}
164136
165- module "asg" {
137+ # # Creates auto scaling cluster
138+ module "cluster" {
166139 source = " github.com/unifio/terraform-aws-asg?ref=v0.2.0//group"
167140
168141 # Resource tags
169- stack_item_label = " ${ var . stack_item_label } -vpn-asg "
170- stack_item_fullname = " ${ var . stack_item_fullname } -vpn "
142+ stack_item_label = " ${ var . stack_item_label } "
143+ stack_item_fullname = " ${ var . stack_item_fullname } "
171144
172145 # VPC parameters
173146 vpc_id = " ${ var . vpc_id } "
@@ -186,17 +159,16 @@ module "asg" {
186159 max_size = 2
187160 min_size = 1
188161 hc_grace_period = 300
189- hc_check_type = " EC2"
190162 min_elb_capacity = 1
191163 load_balancers = " ${ aws_elb . elb . id } "
192164}
193165
194- # Create a new load balancer
166+ # # Creates a load balancer
195167resource "aws_elb" "elb" {
196- name = " ${ var . stack_item_label } -vpn-elb "
168+ name = " ${ var . stack_item_label } "
197169 subnets = [" ${ split (" ," ,var. subnets )} " ]
198170 internal = false
199- security_groups = [" ${ module . asg . sg_id } " ]
171+ security_groups = [" ${ module . cluster . sg_id } " ]
200172
201173 listener {
202174 instance_port = 1194
@@ -214,11 +186,12 @@ resource "aws_elb" "elb" {
214186 }
215187
216188 tags {
217- Name = " ${ var . stack_item_label } -vpn-elb "
218- application = " ${ var . stack_item_label } -vpn "
189+ Name = " ${ var . stack_item_label } "
190+ application = " ${ var . stack_item_fullname } "
219191 managed_by = " terraform"
220192 }
221- }
222-
223- # Create a Route53 record
224193
194+ lifecycle {
195+ create_before_destroy = true
196+ }
197+ }
0 commit comments