@@ -6,6 +6,12 @@ locals {
6
6
is_t_instance_type = replace (var. instance_type , " /^t(2|3|3a|4g){1}\\ ..*$/" , " 1" ) == " 1" ? true : false
7
7
8
8
ami = try (coalesce (var. ami , try (nonsensitive (data. aws_ssm_parameter . this [0 ]. value ), null )), null )
9
+
10
+ security_group_name = try (coalesce (var. security_group_name , " ${ var . name } -sg" ), " " )
11
+ sg_ingress_rules = try (lookup (var. security_group_rules , " ingress" , {}), {})
12
+ create_sg_ingress_rule = length (keys (local. sg_ingress_rules )) > 0 ? true : false
13
+ sg_egress_rules = try (lookup (var. security_group_rules , " egress" , {}), {})
14
+ create_sg_egress_rule = length (keys (local. sg_egress_rules )) > 0 ? true : false
9
15
}
10
16
11
17
data "aws_ssm_parameter" "this" {
@@ -33,7 +39,7 @@ resource "aws_instance" "this" {
33
39
34
40
availability_zone = var. availability_zone
35
41
subnet_id = var. subnet_id
36
- vpc_security_group_ids = var. vpc_security_group_ids
42
+ vpc_security_group_ids = compact ( concat ([ try (aws_security_group . this [ 0 ] . id , " " )], var. vpc_security_group_ids ))
37
43
38
44
key_name = var. key_name
39
45
monitoring = var. monitoring
@@ -211,7 +217,7 @@ resource "aws_instance" "ignore_ami" {
211
217
212
218
availability_zone = var. availability_zone
213
219
subnet_id = var. subnet_id
214
- vpc_security_group_ids = var. vpc_security_group_ids
220
+ vpc_security_group_ids = compact ( concat ([ try (aws_security_group . this [ 0 ] . id , " " )], var. vpc_security_group_ids ))
215
221
216
222
key_name = var. key_name
217
223
monitoring = var. monitoring
@@ -395,7 +401,7 @@ resource "aws_spot_instance_request" "this" {
395
401
396
402
availability_zone = var. availability_zone
397
403
subnet_id = var. subnet_id
398
- vpc_security_group_ids = var. vpc_security_group_ids
404
+ vpc_security_group_ids = compact ( concat ([ try (aws_security_group . this [ 0 ] . id , " " )], var. vpc_security_group_ids ))
399
405
400
406
key_name = var. key_name
401
407
monitoring = var. monitoring
@@ -620,3 +626,52 @@ resource "aws_eip" "this" {
620
626
621
627
tags = merge (var. tags , var. eip_tags )
622
628
}
629
+
630
+ # ###############################################################################
631
+ # Security Group
632
+ # ###############################################################################
633
+
634
+ resource "aws_security_group" "this" {
635
+ count = local. create && var. create_security_group ? 1 : 0
636
+
637
+ name = var. security_group_use_name_prefix ? null : local. security_group_name
638
+ name_prefix = var. security_group_use_name_prefix ? " ${ local . security_group_name } -" : null
639
+ vpc_id = var. vpc_id
640
+ description = coalesce (var. security_group_description , " Control traffic to/from EC2 instance ${ var . name } " )
641
+
642
+ tags = merge (var. tags , var. security_group_tags , { Name = local.security_group_name })
643
+
644
+ lifecycle {
645
+ create_before_destroy = true
646
+ }
647
+ }
648
+
649
+ resource "aws_vpc_security_group_egress_rule" "this" {
650
+ for_each = { for k , v in local . sg_egress_rules : k => v if local . create && var . create_security_group && local . create_sg_egress_rule }
651
+
652
+ security_group_id = aws_security_group. this [0 ]. id
653
+ cidr_ipv4 = each. value . cidr_ipv4
654
+ cidr_ipv6 = each. value . cidr_ipv6
655
+ description = each. value . description
656
+ from_port = each. value . from_port
657
+ to_port = each. value . to_port
658
+ ip_protocol = each. value . ip_protocol
659
+ prefix_list_id = each. value . prefix_list_id
660
+ referenced_security_group_id = each. value . referenced_security_group_id
661
+ tags = merge (try (each. value . tags , {}), var. security_group_tags , { Name = local.security_group_name })
662
+ }
663
+
664
+ resource "aws_vpc_security_group_ingress_rule" "this" {
665
+ for_each = { for k , v in local . sg_ingress_rules : k => v if local . create && var . create_security_group && local . create_sg_ingress_rule }
666
+
667
+ security_group_id = aws_security_group. this [0 ]. id
668
+ cidr_ipv4 = each. value . cidr_ipv4
669
+ cidr_ipv6 = each. value . cidr_ipv6
670
+ description = each. value . description
671
+ from_port = each. value . from_port
672
+ to_port = each. value . to_port
673
+ ip_protocol = each. value . ip_protocol
674
+ prefix_list_id = each. value . prefix_list_id
675
+ referenced_security_group_id = each. value . referenced_security_group_id
676
+ tags = merge (try (each. value . tags , {}), var. security_group_tags , { Name = local.security_group_name })
677
+ }
0 commit comments