Skip to content

Conversation

@jameslaneovermind
Copy link
Contributor

this will actually provision the new demo infrastructure

@env0
Copy link

env0 bot commented Dec 9, 2025

🚀  env0 had composed a PR Plan for environment Terraform Example / production :

Plan: 18 to add, 1 to change, 0 to destroy.
Plan Details
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+   create
!   update in-place

Terraform will perform the following actions:


  # module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0] will be created
+   resource "aws_cloudwatch_metric_alarm" "high_cpu" {
+       actions_enabled                       = true
+       alarm_actions                         = (known after apply)
+       alarm_description                     = "CPU utilization exceeds 80%"
+       alarm_name                            = (known after apply)
+       arn                                   = (known after apply)
+       comparison_operator                   = "GreaterThanThreshold"
+       dimensions                            = (known after apply)
+       evaluate_low_sample_count_percentiles = (known after apply)
+       evaluation_periods                    = 2
+       id                                    = (known after apply)
+       metric_name                           = "CPUUtilization"
+       namespace                             = "AWS/EC2"
+       ok_actions                            = (known after apply)
+       period                                = 300
+       statistic                             = "Average"
+       tags                                  = (known after apply)
+       tags_all                              = (known after apply)
+       threshold                             = 80
+       treat_missing_data                    = "missing"
    }

  # module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0] will be created
+   resource "aws_cloudwatch_metric_alarm" "unhealthy_targets" {
+       actions_enabled                       = true
+       alarm_actions                         = (known after apply)
+       alarm_description                     = "Load balancer has unhealthy targets"
+       alarm_name                            = (known after apply)
+       arn                                   = (known after apply)
+       comparison_operator                   = "GreaterThanThreshold"
+       dimensions                            = (known after apply)
+       evaluate_low_sample_count_percentiles = (known after apply)
+       evaluation_periods                    = 2
+       id                                    = (known after apply)
+       metric_name                           = "UnHealthyHostCount"
+       namespace                             = "AWS/ApplicationELB"
+       ok_actions                            = (known after apply)
+       period                                = 60
+       statistic                             = "Average"
+       tags                                  = (known after apply)
+       tags_all                              = (known after apply)
+       threshold                             = 0
+       treat_missing_data                    = "missing"
    }

  # module.api_server.aws_iam_instance_profile.api_server[0] will be created
+   resource "aws_iam_instance_profile" "api_server" {
+       arn         = (known after apply)
+       create_date = (known after apply)
+       id          = (known after apply)
+       name        = (known after apply)
+       name_prefix = (known after apply)
+       path        = "/"
+       role        = (known after apply)
+       tags        = (known after apply)
+       tags_all    = (known after apply)
+       unique_id   = (known after apply)
    }

  # module.api_server.aws_iam_role.api_server[0] will be created
+   resource "aws_iam_role" "api_server" {
+       arn                   = (known after apply)
+       assume_role_policy    = jsonencode(
            {
+               Statement = [
+                   {
+                       Action    = "sts:AssumeRole"
+                       Effect    = "Allow"
+                       Principal = {
+                           Service = "ec2.amazonaws.com"
                        }
                    },
                ]
+               Version   = "2012-10-17"
            }
        )
+       create_date           = (known after apply)
+       force_detach_policies = false
+       id                    = (known after apply)
+       managed_policy_arns   = (known after apply)
+       max_session_duration  = 3600
+       name                  = (known after apply)
+       name_prefix           = (known after apply)
+       path                  = "/"
+       tags                  = (known after apply)
+       tags_all              = (known after apply)
+       unique_id             = (known after apply)
    }

  # module.api_server.aws_iam_role_policy_attachment.cloudwatch_agent[0] will be created
+   resource "aws_iam_role_policy_attachment" "cloudwatch_agent" {
+       id         = (known after apply)
+       policy_arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
+       role       = (known after apply)
    }

  # module.api_server.aws_iam_role_policy_attachment.ssm[0] will be created
+   resource "aws_iam_role_policy_attachment" "ssm" {
+       id         = (known after apply)
+       policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
+       role       = (known after apply)
    }


  # module.api_server.aws_instance.api_server[0] will be created
+   resource "aws_instance" "api_server" {
+       ami                                  = "ami-02a95139d1d364420"
+       arn                                  = (known after apply)
+       associate_public_ip_address          = true
+       availability_zone                    = (known after apply)
+       cpu_core_count                       = (known after apply)
+       cpu_threads_per_core                 = (known after apply)
+       disable_api_stop                     = (known after apply)
+       disable_api_termination              = (known after apply)
+       ebs_optimized                        = (known after apply)
+       enable_primary_ipv6                  = (known after apply)
+       get_password_data                    = false
+       host_id                              = (known after apply)
+       host_resource_group_arn              = (known after apply)
+       iam_instance_profile                 = (known after apply)
+       id                                   = (known after apply)
+       instance_initiated_shutdown_behavior = (known after apply)
+       instance_lifecycle                   = (known after apply)
+       instance_state                       = (known after apply)
+       instance_type                        = "c5.large"
+       ipv6_address_count                   = (known after apply)
+       ipv6_addresses                       = (known after apply)
+       key_name                             = (known after apply)
+       monitoring                           = (known after apply)
+       outpost_arn                          = (known after apply)
+       password_data                        = (known after apply)
+       placement_group                      = (known after apply)
+       placement_partition_number           = (known after apply)
+       primary_network_interface_id         = (known after apply)
+       private_dns                          = (known after apply)
+       private_ip                           = (known after apply)
+       public_dns                           = (known after apply)
+       public_ip                            = (known after apply)
+       secondary_private_ips                = (known after apply)
+       security_groups                      = (known after apply)
+       source_dest_check                    = true
+       spot_instance_request_id             = (known after apply)
+       subnet_id                            = "subnet-0a1b287732e8ad0b7"
+       tags                                 = (known after apply)
+       tags_all                             = (known after apply)
+       tenancy                              = (known after apply)
+       user_data                            = "1ffd9ca91b1b9ea29b17ccb86b019b0e7cfd294b"
+       user_data_base64                     = (known after apply)
+       user_data_replace_on_change          = false
+       vpc_security_group_ids               = (known after apply)

+       root_block_device {
+           delete_on_termination = true
+           device_name           = (known after apply)
+           encrypted             = (known after apply)
+           iops                  = (known after apply)
+           kms_key_id            = (known after apply)
+           tags                  = (known after apply)
+           tags_all              = (known after apply)
+           throughput            = (known after apply)
+           volume_id             = (known after apply)
+           volume_size           = 8
+           volume_type           = "gp3"
        }
    }

  # module.api_server.aws_lb.api[0] will be created
+   resource "aws_lb" "api" {
+       arn                                                          = (known after apply)
+       arn_suffix                                                   = (known after apply)
+       client_keep_alive                                            = 3600
+       desync_mitigation_mode                                       = "defensive"
+       dns_name                                                     = (known after apply)
+       drop_invalid_header_fields                                   = false
+       enable_deletion_protection                                   = false
+       enable_http2                                                 = true
+       enable_tls_version_and_cipher_suite_headers                  = false
+       enable_waf_fail_open                                         = false
+       enable_xff_client_port                                       = false
+       enable_zonal_shift                                           = false
+       enforce_security_group_inbound_rules_on_private_link_traffic = (known after apply)
+       id                                                           = (known after apply)
+       idle_timeout                                                 = 60
+       internal                                                     = false
+       ip_address_type                                              = (known after apply)
+       load_balancer_type                                           = "application"
+       name                                                         = (known after apply)
+       name_prefix                                                  = (known after apply)
+       preserve_host_header                                         = false
+       security_groups                                              = (known after apply)
+       subnets                                                      = [
+           "subnet-07fc72cf57c70e4f0",
+           "subnet-0a1b287732e8ad0b7",
        ]
+       tags                                                         = (known after apply)
+       tags_all                                                     = (known after apply)
+       vpc_id                                                       = (known after apply)
+       xff_header_processing_mode                                   = "append"
+       zone_id                                                      = (known after apply)
    }

  # module.api_server.aws_lb_listener.http[0] will be created
+   resource "aws_lb_listener" "http" {
+       arn                                                                   = (known after apply)
+       id                                                                    = (known after apply)
+       load_balancer_arn                                                     = (known after apply)
+       port                                                                  = 80
+       protocol                                                              = "HTTP"
+       routing_http_request_x_amzn_mtls_clientcert_header_name               = (known after apply)
+       routing_http_request_x_amzn_mtls_clientcert_issuer_header_name        = (known after apply)
+       routing_http_request_x_amzn_mtls_clientcert_leaf_header_name          = (known after apply)
+       routing_http_request_x_amzn_mtls_clientcert_serial_number_header_name = (known after apply)
+       routing_http_request_x_amzn_mtls_clientcert_subject_header_name       = (known after apply)
+       routing_http_request_x_amzn_mtls_clientcert_validity_header_name      = (known after apply)
+       routing_http_request_x_amzn_tls_cipher_suite_header_name              = (known after apply)
+       routing_http_request_x_amzn_tls_version_header_name                   = (known after apply)
+       routing_http_response_access_control_allow_credentials_header_value   = (known after apply)
+       routing_http_response_access_control_allow_headers_header_value       = (known after apply)
+       routing_http_response_access_control_allow_methods_header_value       = (known after apply)
+       routing_http_response_access_control_allow_origin_header_value        = (known after apply)
+       routing_http_response_access_control_expose_headers_header_value      = (known after apply)
+       routing_http_response_access_control_max_age_header_value             = (known after apply)
+       routing_http_response_content_security_policy_header_value            = (known after apply)
+       routing_http_response_server_enabled                                  = (known after apply)
+       routing_http_response_strict_transport_security_header_value          = (known after apply)
+       routing_http_response_x_content_type_options_header_value             = (known after apply)
+       routing_http_response_x_frame_options_header_value                    = (known after apply)
+       ssl_policy                                                            = (known after apply)
+       tags                                                                  = (known after apply)
+       tags_all                                                              = (known after apply)
+       tcp_idle_timeout_seconds                                              = (known after apply)

+       default_action {
+           order            = (known after apply)
+           target_group_arn = (known after apply)
+           type             = "forward"
        }
    }

  # module.api_server.aws_lb_target_group.api[0] will be created
+   resource "aws_lb_target_group" "api" {
+       arn                                = (known after apply)
+       arn_suffix                         = (known after apply)
+       connection_termination             = (known after apply)
+       deregistration_delay               = "30"
+       id                                 = (known after apply)
+       ip_address_type                    = (known after apply)
+       lambda_multi_value_headers_enabled = false
+       load_balancer_arns                 = (known after apply)
+       load_balancing_algorithm_type      = (known after apply)
+       load_balancing_anomaly_mitigation  = (known after apply)
+       load_balancing_cross_zone_enabled  = (known after apply)
+       name                               = (known after apply)
+       name_prefix                        = (known after apply)
+       port                               = 80
+       preserve_client_ip                 = (known after apply)
+       protocol                           = "HTTP"
+       protocol_version                   = (known after apply)
+       proxy_protocol_v2                  = false
+       slow_start                         = 0
+       tags                               = (known after apply)
+       tags_all                           = (known after apply)
+       target_type                        = "instance"
+       vpc_id                             = "vpc-02901bcbb89561298"

+       health_check {
+           enabled             = true
+           healthy_threshold   = 2
+           interval            = 30
+           matcher             = "200"
+           path                = "/health"
+           port                = "traffic-port"
+           protocol            = "HTTP"
+           timeout             = 5
+           unhealthy_threshold = 3
        }
    }


  # module.api_server.aws_lb_target_group_attachment.api[0] will be created
+   resource "aws_lb_target_group_attachment" "api" {
+       id               = (known after apply)
+       port             = 80
+       target_group_arn = (known after apply)
+       target_id        = (known after apply)
    }

  # module.api_server.aws_security_group.alb[0] will be created
+   resource "aws_security_group" "alb" {
+       arn                    = (known after apply)
+       description            = "Security group for Application Load Balancer"
+       egress                 = [
+           {
+               cidr_blocks      = [
+                   "0.0.0.0/0",
                ]
+               description      = "All outbound"
+               from_port        = 0
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "-1"
+               security_groups  = []
+               self             = false
+               to_port          = 0
            },
        ]
+       id                     = (known after apply)
+       ingress                = [
+           {
+               cidr_blocks      = [
+                   "0.0.0.0/0",
                ]
+               description      = "HTTP from internet"
+               from_port        = 80
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "tcp"
+               security_groups  = []
+               self             = false
+               to_port          = 80
            },
        ]
+       name                   = (known after apply)
+       name_prefix            = (known after apply)
+       owner_id               = (known after apply)
+       revoke_rules_on_delete = false
+       tags                   = (known after apply)
+       tags_all               = (known after apply)
+       vpc_id                 = "vpc-02901bcbb89561298"
    }

  # module.api_server.aws_security_group.api_server[0] will be created
+   resource "aws_security_group" "api_server" {
+       arn                    = (known after apply)
+       description            = "Security group for API server"
+       egress                 = [
+           {
+               cidr_blocks      = [
+                   "0.0.0.0/0",
                ]
+               description      = "All outbound"
+               from_port        = 0
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "-1"
+               security_groups  = []
+               self             = false
+               to_port          = 0
            },
+           {
+               cidr_blocks      = []
+               description      = "Database access"
+               from_port        = 5432
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "tcp"
+               security_groups  = (known after apply)
+               self             = false
+               to_port          = 5432
            },
        ]
+       id                     = (known after apply)
+       ingress                = [
+           {
+               cidr_blocks      = []
+               description      = "HTTP from ALB"
+               from_port        = 80
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "tcp"
+               security_groups  = (known after apply)
+               self             = false
+               to_port          = 80
            },
        ]
+       name                   = (known after apply)
+       name_prefix            = (known after apply)
+       owner_id               = (known after apply)
+       revoke_rules_on_delete = false
+       tags                   = (known after apply)
+       tags_all               = (known after apply)
+       vpc_id                 = "vpc-02901bcbb89561298"
    }

  # module.api_server.aws_security_group.database[0] will be created
+   resource "aws_security_group" "database" {
+       arn                    = (known after apply)
+       description            = "Security group for database tier"
+       egress                 = [
+           {
+               cidr_blocks      = [
+                   "0.0.0.0/0",
                ]
+               description      = "All outbound"
+               from_port        = 0
+               ipv6_cidr_blocks = []
+               prefix_list_ids  = []
+               protocol         = "-1"
+               security_groups  = []
+               self             = false
+               to_port          = 0
            },
        ]
+       id                     = (known after apply)
+       ingress                = (known after apply)
+       name                   = (known after apply)
+       name_prefix            = (known after apply)
+       owner_id               = (known after apply)
+       revoke_rules_on_delete = false
+       tags                   = (known after apply)
+       tags_all               = (known after apply)
+       vpc_id                 = "vpc-02901bcbb89561298"
    }

  # module.api_server.aws_security_group_rule.database_from_api[0] will be created
+   resource "aws_security_group_rule" "database_from_api" {
+       description              = "PostgreSQL from API servers"
+       from_port                = 5432
+       id                       = (known after apply)
+       protocol                 = "tcp"
+       security_group_id        = (known after apply)
+       security_group_rule_id   = (known after apply)
+       self                     = false
+       source_security_group_id = (known after apply)
+       to_port                  = 5432
+       type                     = "ingress"
    }

  # module.api_server.aws_sns_topic.alerts[0] will be created
+   resource "aws_sns_topic" "alerts" {
+       arn                         = (known after apply)
+       beginning_archive_time      = (known after apply)
+       content_based_deduplication = false
+       fifo_throughput_scope       = (known after apply)
+       fifo_topic                  = false
+       id                          = (known after apply)
+       name                        = (known after apply)
+       name_prefix                 = (known after apply)
+       owner                       = (known after apply)
+       policy                      = (known after apply)
+       signature_version           = (known after apply)
+       tags                        = (known after apply)
+       tags_all                    = (known after apply)
+       tracing_config              = (known after apply)
    }

  # module.api_server.aws_sns_topic_policy.alerts[0] will be created
+   resource "aws_sns_topic_policy" "alerts" {
+       arn    = (known after apply)
+       id     = (known after apply)
+       owner  = (known after apply)
+       policy = (known after apply)
    }

  # module.api_server.random_id.suffix[0] will be created
+   resource "random_id" "suffix" {
+       b64_std     = (known after apply)
+       b64_url     = (known after apply)
+       byte_length = 4
+       dec         = (known after apply)
+       hex         = (known after apply)
+       id          = (known after apply)
    }

  # module.heritage[0].aws_rds_cluster.face_database will be updated in-place
!   resource "aws_rds_cluster" "face_database" {
        id                                    = "facial-recognition-terraform-example"
        tags                                  = {}
        # (46 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }


Plan: 18 to add, 1 to change, 0 to destroy.

Changes to Outputs:
+   api_server_instance_id = (known after apply)
+   api_server_url         = (known after apply)
Monthly cost change for overmindtech/terraform-example/env0_tf_plan.json
Amount:  +$94 ($282 → $376)
Percent: +33%
Cost Estimation Details
Key: * usage cost, ~ changed, + added, - removed

──────────────────────────────────
Project: overmindtech/terraform-example/env0_tf_plan.json

+ module.api_server.aws_instance.api_server[0]
  +$74

+     Instance usage (Linux/UNIX, on-demand, c5.large)
      +$74

+     root_block_device
    
+         Storage (general purpose SSD, gp3)
          +$0.74

+ module.api_server.aws_lb.api[0]
  +$19

+     Application load balancer
      +$19

+     Load balancer capacity units
      Monthly cost depends on usage
        +$6.13 per LCU

+ module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0]
  +$0.10

+     Standard resolution
      +$0.10

+ module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0]
  +$0.10

+     Standard resolution
      +$0.10

+ module.api_server.aws_sns_topic.alerts[0]
  Monthly cost depends on usage

+     API requests (over 1M)
      Monthly cost depends on usage
        +$0.50 per 1M requests

+     HTTP/HTTPS notifications (over 100k)
      Monthly cost depends on usage
        +$0.06 per 100k notifications

+     Email/Email-JSON notifications (over 1k)
      Monthly cost depends on usage
        +$2.00 per 100k notifications

+     Kinesis Firehose notifications
      Monthly cost depends on usage
        +$0.23 per 1M notifications

+     Mobile Push notifications
      Monthly cost depends on usage
        +$0.67 per 1M notifications

+     MacOS notifications
      Monthly cost depends on usage
        +$0.67 per 1M notifications

Monthly cost change for overmindtech/terraform-example/env0_tf_plan.json
Amount:  +$94 ($282 → $376)
Percent: +33%

──────────────────────────────────
Key: * usage cost, ~ changed, + added, - removed

*Usage costs can be estimated by updating Infracost Cloud settings, see docs for other options.

137 cloud resources were detected:
∙ 44 were estimated
∙ 91 were free
∙ 2 are not supported yet, see https://infracost.io/requested-resources:
  ∙ 1 x aws_cloudfront_monitoring_subscription
  ∙ 1 x aws_cloudwatch_query_definition

Infracost estimate: Monthly estimate increased by $94 ↑
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Changed project                                    ┃ Baseline cost ┃ Usage cost* ┃ Total change ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━┫
┃ overmindtech/terraform-example/env0_tf_plan.json   ┃          +$94 ┃           - ┃  +$94 (+33%) ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━━┛

Full PR Plan logs on env0

@github-actions
Copy link

github-actions bot commented Dec 9, 2025

Overmind

Open in Overmind ↗


model|risks_v6

🔴 Change Signals

Routine 🔴 ▇▅▃▂▁ Multiple AWS resources, including CloudWatch alarms, IAM roles, and load balancers, are showing the first ever modification of attributes, which is unusual compared to typical patterns.

View signals ↗


🔥 Risks

[!NOTE] > Overmind has not identified any risks associated with this change
This could be due to the change being low risk with no impact on other parts of the system, or involving resources that Overmind currently does not support.


🟣 Expected Changes

Note

No expected changes found.


🟠 Unmapped Changes

+ aws_cloudwatch_metric_alarm › module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0]
--- current
+++ proposed
@@ -0,0 +1,29 @@
+type: aws_cloudwatch_metric_alarm
+id: github.com/overmindtech/terraform-example.aws_cloudwatch_metric_alarm.module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0]
+attributes:
+  actions_enabled: true
+  alarm_actions: (known after apply)
+  alarm_description: CPU utilization exceeds 80%
+  alarm_name: (known after apply)
+  arn: (known after apply)
+  comparison_operator: GreaterThanThreshold
+  datapoints_to_alarm: null
+  dimensions: (known after apply)
+  evaluate_low_sample_count_percentiles: (known after apply)
+  evaluation_periods: 2
+  extended_statistic: null
+  id: (known after apply)
+  insufficient_data_actions: null
+  metric_name: CPUUtilization
+  namespace: AWS/EC2
+  ok_actions: (known after apply)
+  period: 300
+  statistic: Average
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0]
+  terraform_name: module.api_server.aws_cloudwatch_metric_alarm.high_cpu[0]
+  threshold: 80
+  threshold_metric_id: null
+  treat_missing_data: missing
+  unit: null
+ aws_cloudwatch_metric_alarm › module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0]
--- current
+++ proposed
@@ -0,0 +1,29 @@
+type: aws_cloudwatch_metric_alarm
+id: github.com/overmindtech/terraform-example.aws_cloudwatch_metric_alarm.module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0]
+attributes:
+  actions_enabled: true
+  alarm_actions: (known after apply)
+  alarm_description: Load balancer has unhealthy targets
+  alarm_name: (known after apply)
+  arn: (known after apply)
+  comparison_operator: GreaterThanThreshold
+  datapoints_to_alarm: null
+  dimensions: (known after apply)
+  evaluate_low_sample_count_percentiles: (known after apply)
+  evaluation_periods: 2
+  extended_statistic: null
+  id: (known after apply)
+  insufficient_data_actions: null
+  metric_name: UnHealthyHostCount
+  namespace: AWS/ApplicationELB
+  ok_actions: (known after apply)
+  period: 60
+  statistic: Average
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0]
+  terraform_name: module.api_server.aws_cloudwatch_metric_alarm.unhealthy_targets[0]
+  threshold: 0
+  threshold_metric_id: null
+  treat_missing_data: missing
+  unit: null
+ aws_iam_instance_profile › module.api_server.aws_iam_instance_profile.api_server[0]
--- current
+++ proposed
@@ -0,0 +1,15 @@
+type: aws_iam_instance_profile
+id: github.com/overmindtech/terraform-example.aws_iam_instance_profile.module.api_server.aws_iam_instance_profile.api_server[0]
+attributes:
+  arn: (known after apply)
+  create_date: (known after apply)
+  id: (known after apply)
+  name: (known after apply)
+  name_prefix: (known after apply)
+  path: /
+  role: (known after apply)
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_iam_instance_profile.api_server[0]
+  terraform_name: module.api_server.aws_iam_instance_profile.api_server[0]
+  unique_id: (known after apply)
+ aws_iam_role › module.api_server.aws_iam_role.api_server[0]
--- current
+++ proposed
@@ -0,0 +1,21 @@
+type: aws_iam_role
+id: github.com/overmindtech/terraform-example.aws_iam_role.module.api_server.aws_iam_role.api_server[0]
+attributes:
+  arn: (known after apply)
+  assume_role_policy: '{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"}}],"Version":"2012-10-17"}'
+  create_date: (known after apply)
+  description: null
+  force_detach_policies: false
+  id: (known after apply)
+  inline_policy: (known after apply)
+  managed_policy_arns: (known after apply)
+  max_session_duration: 3600
+  name: (known after apply)
+  name_prefix: (known after apply)
+  path: /
+  permissions_boundary: null
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_iam_role.api_server[0]
+  terraform_name: module.api_server.aws_iam_role.api_server[0]
+  unique_id: (known after apply)
+ aws_iam_role_policy_attachment › module.api_server.aws_iam_role_policy_attachment.cloudwatch_agent[0]
--- current
+++ proposed
@@ -0,0 +1,8 @@
+type: aws_iam_role_policy_attachment
+id: github.com/overmindtech/terraform-example.aws_iam_role_policy_attachment.module.api_server.aws_iam_role_policy_attachment.cloudwatch_agent[0]
+attributes:
+  id: (known after apply)
+  policy_arn: arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
+  role: (known after apply)
+  terraform_address: module.api_server.aws_iam_role_policy_attachment.cloudwatch_agent[0]
+  terraform_name: module.api_server.aws_iam_role_policy_attachment.cloudwatch_agent[0]
+ aws_iam_role_policy_attachment › module.api_server.aws_iam_role_policy_attachment.ssm[0]
--- current
+++ proposed
@@ -0,0 +1,8 @@
+type: aws_iam_role_policy_attachment
+id: github.com/overmindtech/terraform-example.aws_iam_role_policy_attachment.module.api_server.aws_iam_role_policy_attachment.ssm[0]
+attributes:
+  id: (known after apply)
+  policy_arn: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
+  role: (known after apply)
+  terraform_address: module.api_server.aws_iam_role_policy_attachment.ssm[0]
+  terraform_name: module.api_server.aws_iam_role_policy_attachment.ssm[0]
+ aws_instance › module.api_server.aws_instance.api_server[0]
--- current
+++ proposed
@@ -0,0 +1,74 @@
+type: aws_instance
+id: github.com/overmindtech/terraform-example.aws_instance.module.api_server.aws_instance.api_server[0]
+attributes:
+  ami: ami-02a95139d1d364420
+  arn: (known after apply)
+  associate_public_ip_address: true
+  availability_zone: (known after apply)
+  capacity_reservation_specification: (known after apply)
+  cpu_core_count: (known after apply)
+  cpu_options: (known after apply)
+  cpu_threads_per_core: (known after apply)
+  disable_api_stop: (known after apply)
+  disable_api_termination: (known after apply)
+  ebs_block_device: (known after apply)
+  ebs_optimized: (known after apply)
+  enable_primary_ipv6: (known after apply)
+  enclave_options: (known after apply)
+  ephemeral_block_device: (known after apply)
+  get_password_data: false
+  hibernation: null
+  host_id: (known after apply)
+  host_resource_group_arn: (known after apply)
+  iam_instance_profile: (known after apply)
+  id: (known after apply)
+  instance_initiated_shutdown_behavior: (known after apply)
+  instance_lifecycle: (known after apply)
+  instance_market_options: (known after apply)
+  instance_state: (known after apply)
+  instance_type: c5.large
+  ipv6_address_count: (known after apply)
+  ipv6_addresses: (known after apply)
+  key_name: (known after apply)
+  maintenance_options: (known after apply)
+  metadata_options: (known after apply)
+  monitoring: (known after apply)
+  network_interface: (known after apply)
+  outpost_arn: (known after apply)
+  password_data: (known after apply)
+  placement_group: (known after apply)
+  placement_partition_number: (known after apply)
+  primary_network_interface_id: (known after apply)
+  private_dns: (known after apply)
+  private_dns_name_options: (known after apply)
+  private_ip: (known after apply)
+  public_dns: (known after apply)
+  public_ip: (known after apply)
+  root_block_device:
+    - delete_on_termination: true
+      device_name: (known after apply)
+      encrypted: (known after apply)
+      iops: (known after apply)
+      kms_key_id: (known after apply)
+      tags: (known after apply)
+      tags_all: (known after apply)
+      throughput: (known after apply)
+      volume_id: (known after apply)
+      volume_size: 8
+      volume_type: gp3
+  secondary_private_ips: (known after apply)
+  security_groups: (known after apply)
+  source_dest_check: true
+  spot_instance_request_id: (known after apply)
+  subnet_id: subnet-0a1b287732e8ad0b7
+  tags: (known after apply)
+  tags_all: (known after apply)
+  tenancy: (known after apply)
+  terraform_address: module.api_server.aws_instance.api_server[0]
+  terraform_name: module.api_server.aws_instance.api_server[0]
+  timeouts: null
+  user_data: 1ffd9ca91b1b9ea29b17ccb86b019b0e7cfd294b
+  user_data_base64: (known after apply)
+  user_data_replace_on_change: false
+  volume_tags: null
+  vpc_security_group_ids: (known after apply)
+ aws_lb › module.api_server.aws_lb.api[0]
--- current
+++ proposed
@@ -0,0 +1,40 @@
+type: aws_lb
+id: github.com/overmindtech/terraform-example.aws_lb.module.api_server.aws_lb.api[0]
+attributes:
+  arn: (known after apply)
+  arn_suffix: (known after apply)
+  client_keep_alive: 3600
+  customer_owned_ipv4_pool: null
+  desync_mitigation_mode: defensive
+  dns_name: (known after apply)
+  dns_record_client_routing_policy: null
+  drop_invalid_header_fields: false
+  enable_cross_zone_load_balancing: null
+  enable_deletion_protection: false
+  enable_http2: true
+  enable_tls_version_and_cipher_suite_headers: false
+  enable_waf_fail_open: false
+  enable_xff_client_port: false
+  enable_zonal_shift: false
+  enforce_security_group_inbound_rules_on_private_link_traffic: (known after apply)
+  id: (known after apply)
+  idle_timeout: 60
+  internal: false
+  ip_address_type: (known after apply)
+  load_balancer_type: application
+  name: (known after apply)
+  name_prefix: (known after apply)
+  preserve_host_header: false
+  security_groups: (known after apply)
+  subnet_mapping: (known after apply)
+  subnets:
+    - subnet-07fc72cf57c70e4f0
+    - subnet-0a1b287732e8ad0b7
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_lb.api[0]
+  terraform_name: module.api_server.aws_lb.api[0]
+  timeouts: null
+  vpc_id: (known after apply)
+  xff_header_processing_mode: append
+  zone_id: (known after apply)
+ aws_lb_listener › module.api_server.aws_lb_listener.http[0]
--- current
+++ proposed
@@ -0,0 +1,41 @@
+type: aws_lb_listener
+id: github.com/overmindtech/terraform-example.aws_lb_listener.module.api_server.aws_lb_listener.http[0]
+attributes:
+  alpn_policy: null
+  arn: (known after apply)
+  certificate_arn: null
+  default_action:
+    - order: (known after apply)
+      target_group_arn: (known after apply)
+      type: forward
+  id: (known after apply)
+  load_balancer_arn: (known after apply)
+  mutual_authentication: (known after apply)
+  port: 80
+  protocol: HTTP
+  routing_http_request_x_amzn_mtls_clientcert_header_name: (known after apply)
+  routing_http_request_x_amzn_mtls_clientcert_issuer_header_name: (known after apply)
+  routing_http_request_x_amzn_mtls_clientcert_leaf_header_name: (known after apply)
+  routing_http_request_x_amzn_mtls_clientcert_serial_number_header_name: (known after apply)
+  routing_http_request_x_amzn_mtls_clientcert_subject_header_name: (known after apply)
+  routing_http_request_x_amzn_mtls_clientcert_validity_header_name: (known after apply)
+  routing_http_request_x_amzn_tls_cipher_suite_header_name: (known after apply)
+  routing_http_request_x_amzn_tls_version_header_name: (known after apply)
+  routing_http_response_access_control_allow_credentials_header_value: (known after apply)
+  routing_http_response_access_control_allow_headers_header_value: (known after apply)
+  routing_http_response_access_control_allow_methods_header_value: (known after apply)
+  routing_http_response_access_control_allow_origin_header_value: (known after apply)
+  routing_http_response_access_control_expose_headers_header_value: (known after apply)
+  routing_http_response_access_control_max_age_header_value: (known after apply)
+  routing_http_response_content_security_policy_header_value: (known after apply)
+  routing_http_response_server_enabled: (known after apply)
+  routing_http_response_strict_transport_security_header_value: (known after apply)
+  routing_http_response_x_content_type_options_header_value: (known after apply)
+  routing_http_response_x_frame_options_header_value: (known after apply)
+  ssl_policy: (known after apply)
+  tags: (known after apply)
+  tags_all: (known after apply)
+  tcp_idle_timeout_seconds: (known after apply)
+  terraform_address: module.api_server.aws_lb_listener.http[0]
+  terraform_name: module.api_server.aws_lb_listener.http[0]
+  timeouts: null
+ aws_lb_target_group › module.api_server.aws_lb_target_group.api[0]
--- current
+++ proposed
@@ -0,0 +1,42 @@
+type: aws_lb_target_group
+id: github.com/overmindtech/terraform-example.aws_lb_target_group.module.api_server.aws_lb_target_group.api[0]
+attributes:
+  arn: (known after apply)
+  arn_suffix: (known after apply)
+  connection_termination: (known after apply)
+  deregistration_delay: "30"
+  health_check:
+    - enabled: true
+      healthy_threshold: 2
+      interval: 30
+      matcher: "200"
+      path: /health
+      port: traffic-port
+      protocol: HTTP
+      timeout: 5
+      unhealthy_threshold: 3
+  id: (known after apply)
+  ip_address_type: (known after apply)
+  lambda_multi_value_headers_enabled: false
+  load_balancer_arns: (known after apply)
+  load_balancing_algorithm_type: (known after apply)
+  load_balancing_anomaly_mitigation: (known after apply)
+  load_balancing_cross_zone_enabled: (known after apply)
+  name: (known after apply)
+  name_prefix: (known after apply)
+  port: 80
+  preserve_client_ip: (known after apply)
+  protocol: HTTP
+  protocol_version: (known after apply)
+  proxy_protocol_v2: false
+  slow_start: 0
+  stickiness: (known after apply)
+  tags: (known after apply)
+  tags_all: (known after apply)
+  target_failover: (known after apply)
+  target_group_health: (known after apply)
+  target_health_state: (known after apply)
+  target_type: instance
+  terraform_address: module.api_server.aws_lb_target_group.api[0]
+  terraform_name: module.api_server.aws_lb_target_group.api[0]
+  vpc_id: vpc-02901bcbb89561298
+ aws_lb_target_group_attachment › module.api_server.aws_lb_target_group_attachment.api[0]
--- current
+++ proposed
@@ -0,0 +1,10 @@
+type: aws_lb_target_group_attachment
+id: github.com/overmindtech/terraform-example.aws_lb_target_group_attachment.module.api_server.aws_lb_target_group_attachment.api[0]
+attributes:
+  availability_zone: null
+  id: (known after apply)
+  port: 80
+  target_group_arn: (known after apply)
+  target_id: (known after apply)
+  terraform_address: module.api_server.aws_lb_target_group_attachment.api[0]
+  terraform_name: module.api_server.aws_lb_target_group_attachment.api[0]
+ aws_security_group › module.api_server.aws_security_group.alb[0]
--- current
+++ proposed
@@ -0,0 +1,32 @@
+type: aws_security_group
+id: github.com/overmindtech/terraform-example.aws_security_group.module.api_server.aws_security_group.alb[0]
+attributes:
+  arn: (known after apply)
+  description: Security group for Application Load Balancer
+  egress:
+    - cidr_blocks:
+        - 0.0.0.0/0
+      description: All outbound
+      from_port: 0
+      protocol: "-1"
+      self: false
+      to_port: 0
+  id: (known after apply)
+  ingress:
+    - cidr_blocks:
+        - 0.0.0.0/0
+      description: HTTP from internet
+      from_port: 80
+      protocol: tcp
+      self: false
+      to_port: 80
+  name: (known after apply)
+  name_prefix: (known after apply)
+  owner_id: (known after apply)
+  revoke_rules_on_delete: false
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_security_group.alb[0]
+  terraform_name: module.api_server.aws_security_group.alb[0]
+  timeouts: null
+  vpc_id: vpc-02901bcbb89561298
+ aws_security_group › module.api_server.aws_security_group.api_server[0]
--- current
+++ proposed
@@ -0,0 +1,37 @@
+type: aws_security_group
+id: github.com/overmindtech/terraform-example.aws_security_group.module.api_server.aws_security_group.api_server[0]
+attributes:
+  arn: (known after apply)
+  description: Security group for API server
+  egress:
+    - cidr_blocks:
+        - 0.0.0.0/0
+      description: All outbound
+      from_port: 0
+      protocol: "-1"
+      self: false
+      to_port: 0
+    - description: Database access
+      from_port: 5432
+      protocol: tcp
+      security_groups: (known after apply)
+      self: false
+      to_port: 5432
+  id: (known after apply)
+  ingress:
+    - description: HTTP from ALB
+      from_port: 80
+      protocol: tcp
+      security_groups: (known after apply)
+      self: false
+      to_port: 80
+  name: (known after apply)
+  name_prefix: (known after apply)
+  owner_id: (known after apply)
+  revoke_rules_on_delete: false
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_security_group.api_server[0]
+  terraform_name: module.api_server.aws_security_group.api_server[0]
+  timeouts: null
+  vpc_id: vpc-02901bcbb89561298
+ aws_security_group › module.api_server.aws_security_group.database[0]
--- current
+++ proposed
@@ -0,0 +1,25 @@
+type: aws_security_group
+id: github.com/overmindtech/terraform-example.aws_security_group.module.api_server.aws_security_group.database[0]
+attributes:
+  arn: (known after apply)
+  description: Security group for database tier
+  egress:
+    - cidr_blocks:
+        - 0.0.0.0/0
+      description: All outbound
+      from_port: 0
+      protocol: "-1"
+      self: false
+      to_port: 0
+  id: (known after apply)
+  ingress: (known after apply)
+  name: (known after apply)
+  name_prefix: (known after apply)
+  owner_id: (known after apply)
+  revoke_rules_on_delete: false
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_security_group.database[0]
+  terraform_name: module.api_server.aws_security_group.database[0]
+  timeouts: null
+  vpc_id: vpc-02901bcbb89561298
+ aws_security_group_rule › module.api_server.aws_security_group_rule.database_from_api[0]
--- current
+++ proposed
@@ -0,0 +1,19 @@
+type: aws_security_group_rule
+id: github.com/overmindtech/terraform-example.aws_security_group_rule.module.api_server.aws_security_group_rule.database_from_api[0]
+attributes:
+  cidr_blocks: null
+  description: PostgreSQL from API servers
+  from_port: 5432
+  id: (known after apply)
+  ipv6_cidr_blocks: null
+  prefix_list_ids: null
+  protocol: tcp
+  security_group_id: (known after apply)
+  security_group_rule_id: (known after apply)
+  self: false
+  source_security_group_id: (known after apply)
+  terraform_address: module.api_server.aws_security_group_rule.database_from_api[0]
+  terraform_name: module.api_server.aws_security_group_rule.database_from_api[0]
+  timeouts: null
+  to_port: 5432
+  type: ingress
+ aws_sns_topic › module.api_server.aws_sns_topic.alerts[0]
--- current
+++ proposed
@@ -0,0 +1,38 @@
+type: aws_sns_topic
+id: github.com/overmindtech/terraform-example.aws_sns_topic.module.api_server.aws_sns_topic.alerts[0]
+attributes:
+  application_failure_feedback_role_arn: null
+  application_success_feedback_role_arn: null
+  application_success_feedback_sample_rate: null
+  archive_policy: null
+  arn: (known after apply)
+  beginning_archive_time: (known after apply)
+  content_based_deduplication: false
+  delivery_policy: null
+  display_name: null
+  fifo_throughput_scope: (known after apply)
+  fifo_topic: false
+  firehose_failure_feedback_role_arn: null
+  firehose_success_feedback_role_arn: null
+  firehose_success_feedback_sample_rate: null
+  http_failure_feedback_role_arn: null
+  http_success_feedback_role_arn: null
+  http_success_feedback_sample_rate: null
+  id: (known after apply)
+  kms_master_key_id: null
+  lambda_failure_feedback_role_arn: null
+  lambda_success_feedback_role_arn: null
+  lambda_success_feedback_sample_rate: null
+  name: (known after apply)
+  name_prefix: (known after apply)
+  owner: (known after apply)
+  policy: (known after apply)
+  signature_version: (known after apply)
+  sqs_failure_feedback_role_arn: null
+  sqs_success_feedback_role_arn: null
+  sqs_success_feedback_sample_rate: null
+  tags: (known after apply)
+  tags_all: (known after apply)
+  terraform_address: module.api_server.aws_sns_topic.alerts[0]
+  terraform_name: module.api_server.aws_sns_topic.alerts[0]
+  tracing_config: (known after apply)
+ aws_sns_topic_policy › module.api_server.aws_sns_topic_policy.alerts[0]
--- current
+++ proposed
@@ -0,0 +1,9 @@
+type: aws_sns_topic_policy
+id: github.com/overmindtech/terraform-example.aws_sns_topic_policy.module.api_server.aws_sns_topic_policy.alerts[0]
+attributes:
+  arn: (known after apply)
+  id: (known after apply)
+  owner: (known after apply)
+  policy: (known after apply)
+  terraform_address: module.api_server.aws_sns_topic_policy.alerts[0]
+  terraform_name: module.api_server.aws_sns_topic_policy.alerts[0]
+ random_id › module.api_server.random_id.suffix[0]
--- current
+++ proposed
@@ -0,0 +1,13 @@
+type: random_id
+id: github.com/overmindtech/terraform-example.random_id.module.api_server.random_id.suffix[0]
+attributes:
+  b64_std: (known after apply)
+  b64_url: (known after apply)
+  byte_length: 4
+  dec: (known after apply)
+  hex: (known after apply)
+  id: (known after apply)
+  keepers: null
+  prefix: null
+  terraform_address: module.api_server.random_id.suffix[0]
+  terraform_name: module.api_server.random_id.suffix[0]

💥 Blast Radius

Items 0

Edges 0

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overmind

⛔ Auto-Blocked


🔴 Decision

Auto-blocked: Routine score (-5) is below minimum (-1)


📊 Signals Summary

Routine 🔴 -5


🔥 Risks Summary

High 0 · Medium 0 · Low 0


View full analysis in Overmind ↗

@jameslaneovermind jameslaneovermind merged commit e58d430 into main Dec 9, 2025
8 checks passed
@jameslaneovermind jameslaneovermind deleted the provision-api-server branch December 9, 2025 23:42
jameslaneovermind added a commit that referenced this pull request Dec 9, 2025
chore: trigger infrastructure provisioning for api-server module
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants