@@ -6,6 +6,12 @@ locals {
66 is_t_instance_type = replace (var. instance_type , " /^t(2|3|3a|4g){1}\\ ..*$/" , " 1" ) == " 1" ? true : false
77
88 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
915}
1016
1117data "aws_ssm_parameter" "this" {
@@ -33,7 +39,7 @@ resource "aws_instance" "this" {
3339
3440 availability_zone = var. availability_zone
3541 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 ))
3743
3844 key_name = var. key_name
3945 monitoring = var. monitoring
@@ -211,7 +217,7 @@ resource "aws_instance" "ignore_ami" {
211217
212218 availability_zone = var. availability_zone
213219 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 ))
215221
216222 key_name = var. key_name
217223 monitoring = var. monitoring
@@ -395,7 +401,7 @@ resource "aws_spot_instance_request" "this" {
395401
396402 availability_zone = var. availability_zone
397403 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 ))
399405
400406 key_name = var. key_name
401407 monitoring = var. monitoring
@@ -620,3 +626,52 @@ resource "aws_eip" "this" {
620626
621627 tags = merge (var. tags , var. eip_tags )
622628}
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