Skip to content

Instantly share code, notes, and snippets.

@fwartner
Last active September 9, 2020 13:00
Show Gist options
  • Save fwartner/36f02fd2cdf2855922b965c2fda21fe1 to your computer and use it in GitHub Desktop.
Save fwartner/36f02fd2cdf2855922b965c2fda21fe1 to your computer and use it in GitHub Desktop.
data.template_file.xentral_app: Refreshing state...
data.aws_availability_zones.available: Refreshing state...
data.aws_iam_policy_document.ecs_task_execution_role: Refreshing state...
------------------------------------------------------------------------
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_alb.main will be created
+ resource "aws_alb" "main" {
+ arn = (known after apply)
+ arn_suffix = (known after apply)
+ dns_name = (known after apply)
+ drop_invalid_header_fields = false
+ enable_deletion_protection = false
+ enable_http2 = true
+ id = (known after apply)
+ idle_timeout = 60
+ internal = (known after apply)
+ ip_address_type = (known after apply)
+ load_balancer_type = "application"
+ name = "xentral-load-balancer"
+ security_groups = (known after apply)
+ subnets = (known after apply)
+ vpc_id = (known after apply)
+ zone_id = (known after apply)
+ subnet_mapping {
+ allocation_id = (known after apply)
+ private_ipv4_address = (known after apply)
+ subnet_id = (known after apply)
}
}
# aws_alb_listener.front_end will be created
+ resource "aws_alb_listener" "front_end" {
+ arn = (known after apply)
+ id = (known after apply)
+ load_balancer_arn = (known after apply)
+ port = 80
+ protocol = "HTTP"
+ ssl_policy = (known after apply)
+ default_action {
+ order = (known after apply)
+ target_group_arn = (known after apply)
+ type = "forward"
}
}
# aws_alb_target_group.app will be created
+ resource "aws_alb_target_group" "app" {
+ arn = (known after apply)
+ arn_suffix = (known after apply)
+ deregistration_delay = 300
+ id = (known after apply)
+ lambda_multi_value_headers_enabled = false
+ load_balancing_algorithm_type = (known after apply)
+ name = "xentral-target-group"
+ port = 80
+ protocol = "HTTP"
+ proxy_protocol_v2 = false
+ slow_start = 0
+ target_type = "ip"
+ vpc_id = (known after apply)
+ health_check {
+ enabled = true
+ healthy_threshold = 3
+ interval = 30
+ matcher = "200"
+ path = "/"
+ port = "traffic-port"
+ protocol = "HTTP"
+ timeout = 3
+ unhealthy_threshold = 2
}
+ stickiness {
+ cookie_duration = (known after apply)
+ enabled = (known after apply)
+ type = (known after apply)
}
}
# aws_appautoscaling_policy.down will be created
+ resource "aws_appautoscaling_policy" "down" {
+ arn = (known after apply)
+ id = (known after apply)
+ name = "xentral_scale_down"
+ policy_type = "StepScaling"
+ resource_id = "service/xentral-cluster/xentral-service"
+ scalable_dimension = "ecs:service:DesiredCount"
+ service_namespace = "ecs"
+ step_scaling_policy_configuration {
+ adjustment_type = "ChangeInCapacity"
+ cooldown = 60
+ metric_aggregation_type = "Maximum"
+ step_adjustment {
+ metric_interval_upper_bound = "0"
+ scaling_adjustment = -1
}
}
}
# aws_appautoscaling_policy.up will be created
+ resource "aws_appautoscaling_policy" "up" {
+ arn = (known after apply)
+ id = (known after apply)
+ name = "xentral_scale_up"
+ policy_type = "StepScaling"
+ resource_id = "service/xentral-cluster/xentral-service"
+ scalable_dimension = "ecs:service:DesiredCount"
+ service_namespace = "ecs"
+ step_scaling_policy_configuration {
+ adjustment_type = "ChangeInCapacity"
+ cooldown = 60
+ metric_aggregation_type = "Maximum"
+ step_adjustment {
+ metric_interval_lower_bound = "0"
+ scaling_adjustment = 1
}
}
}
# aws_appautoscaling_target.target will be created
+ resource "aws_appautoscaling_target" "target" {
+ id = (known after apply)
+ max_capacity = 6
+ min_capacity = 3
+ resource_id = "service/xentral-cluster/xentral-service"
+ role_arn = (known after apply)
+ scalable_dimension = "ecs:service:DesiredCount"
+ service_namespace = "ecs"
}
# aws_cloudwatch_log_group.xentral_log_group will be created
+ resource "aws_cloudwatch_log_group" "xentral_log_group" {
+ arn = (known after apply)
+ id = (known after apply)
+ name = "/ecs/xentral-app"
+ retention_in_days = 30
+ tags = {
+ "Name" = "xentral-log-group"
}
}
# aws_cloudwatch_log_stream.xentral_log_stream will be created
+ resource "aws_cloudwatch_log_stream" "xentral_log_stream" {
+ arn = (known after apply)
+ id = (known after apply)
+ log_group_name = "/ecs/xentral-app"
+ name = "xentral-log-stream"
}
# aws_cloudwatch_metric_alarm.service_cpu_high will be created
+ resource "aws_cloudwatch_metric_alarm" "service_cpu_high" {
+ actions_enabled = true
+ alarm_actions = (known after apply)
+ alarm_name = "xentral_cpu_utilization_high"
+ arn = (known after apply)
+ comparison_operator = "GreaterThanOrEqualToThreshold"
+ dimensions = {
+ "ClusterName" = "xentral-cluster"
+ "ServiceName" = "xentral-service"
}
+ evaluate_low_sample_count_percentiles = (known after apply)
+ evaluation_periods = 2
+ id = (known after apply)
+ metric_name = "CPUUtilization"
+ namespace = "AWS/ECS"
+ period = 60
+ statistic = "Average"
+ threshold = 85
+ treat_missing_data = "missing"
}
# aws_cloudwatch_metric_alarm.service_cpu_low will be created
+ resource "aws_cloudwatch_metric_alarm" "service_cpu_low" {
+ actions_enabled = true
+ alarm_actions = (known after apply)
+ alarm_name = "xentral_cpu_utilization_low"
+ arn = (known after apply)
+ comparison_operator = "LessThanOrEqualToThreshold"
+ dimensions = {
+ "ClusterName" = "xentral-cluster"
+ "ServiceName" = "xentral-service"
}
+ evaluate_low_sample_count_percentiles = (known after apply)
+ evaluation_periods = 2
+ id = (known after apply)
+ metric_name = "CPUUtilization"
+ namespace = "AWS/ECS"
+ period = 60
+ statistic = "Average"
+ threshold = 10
+ treat_missing_data = "missing"
}
# aws_ecs_cluster.main will be created
+ resource "aws_ecs_cluster" "main" {
+ arn = (known after apply)
+ id = (known after apply)
+ name = "xentral-cluster"
+ setting {
+ name = (known after apply)
+ value = (known after apply)
}
}
# aws_ecs_service.main will be created
+ resource "aws_ecs_service" "main" {
+ cluster = (known after apply)
+ deployment_maximum_percent = 200
+ deployment_minimum_healthy_percent = 100
+ desired_count = 3
+ enable_ecs_managed_tags = false
+ iam_role = (known after apply)
+ id = (known after apply)
+ launch_type = "FARGATE"
+ name = "xentral-service"
+ platform_version = (known after apply)
+ scheduling_strategy = "REPLICA"
+ task_definition = (known after apply)
+ load_balancer {
+ container_name = "xentral-app"
+ container_port = 80
+ target_group_arn = (known after apply)
}
+ network_configuration {
+ assign_public_ip = true
+ security_groups = (known after apply)
+ subnets = (known after apply)
}
}
# aws_ecs_task_definition.app will be created
+ resource "aws_ecs_task_definition" "app" {
+ arn = (known after apply)
+ container_definitions = jsonencode(
[
+ {
+ cpu = 1024
+ image = "deinebaustoffe/xentral:latest"
+ logConfiguration = {
+ logDriver = "awslogs"
+ options = {
+ awslogs-group = "/ecs/xentral-app"
+ awslogs-region = "eu-central-1"
+ awslogs-stream-prefix = "ecs"
}
}
+ memory = 2048
+ name = "central"
+ portMappings = [
+ {
+ containerPort = 80
+ hostPort = 80
},
]
},
]
)
+ cpu = "1024"
+ execution_role_arn = (known after apply)
+ family = "xentral-app-task"
+ id = (known after apply)
+ memory = "2048"
+ network_mode = "awsvpc"
+ requires_compatibilities = [
+ "FARGATE",
]
+ revision = (known after apply)
}
# aws_eip.gw[0] will be created
+ resource "aws_eip" "gw" {
+ allocation_id = (known after apply)
+ association_id = (known after apply)
+ customer_owned_ip = (known after apply)
+ domain = (known after apply)
+ id = (known after apply)
+ instance = (known after apply)
+ network_interface = (known after apply)
+ private_dns = (known after apply)
+ private_ip = (known after apply)
+ public_dns = (known after apply)
+ public_ip = (known after apply)
+ public_ipv4_pool = (known after apply)
+ vpc = true
}
# aws_eip.gw[1] will be created
+ resource "aws_eip" "gw" {
+ allocation_id = (known after apply)
+ association_id = (known after apply)
+ customer_owned_ip = (known after apply)
+ domain = (known after apply)
+ id = (known after apply)
+ instance = (known after apply)
+ network_interface = (known after apply)
+ private_dns = (known after apply)
+ private_ip = (known after apply)
+ public_dns = (known after apply)
+ public_ip = (known after apply)
+ public_ipv4_pool = (known after apply)
+ vpc = true
}
# aws_iam_role.ecs_task_execution_role will be created
+ resource "aws_iam_role" "ecs_task_execution_role" {
+ arn = (known after apply)
+ assume_role_policy = jsonencode(
{
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ Service = "ecs-tasks.amazonaws.com"
}
+ Sid = ""
},
]
+ Version = "2012-10-17"
}
)
+ create_date = (known after apply)
+ force_detach_policies = false
+ id = (known after apply)
+ max_session_duration = 3600
+ name = "xentral-task-role"
+ path = "/"
+ unique_id = (known after apply)
}
# aws_iam_role_policy_attachment.ecs_task_execution_role will be created
+ resource "aws_iam_role_policy_attachment" "ecs_task_execution_role" {
+ id = (known after apply)
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
+ role = "xentral-task-role"
}
# aws_internet_gateway.gw will be created
+ resource "aws_internet_gateway" "gw" {
+ arn = (known after apply)
+ id = (known after apply)
+ owner_id = (known after apply)
+ vpc_id = (known after apply)
}
# aws_nat_gateway.gw[0] will be created
+ resource "aws_nat_gateway" "gw" {
+ allocation_id = (known after apply)
+ id = (known after apply)
+ network_interface_id = (known after apply)
+ private_ip = (known after apply)
+ public_ip = (known after apply)
+ subnet_id = (known after apply)
}
# aws_nat_gateway.gw[1] will be created
+ resource "aws_nat_gateway" "gw" {
+ allocation_id = (known after apply)
+ id = (known after apply)
+ network_interface_id = (known after apply)
+ private_ip = (known after apply)
+ public_ip = (known after apply)
+ subnet_id = (known after apply)
}
# aws_route.internet_access will be created
+ resource "aws_route" "internet_access" {
+ destination_cidr_block = "0.0.0.0/0"
+ destination_prefix_list_id = (known after apply)
+ egress_only_gateway_id = (known after apply)
+ gateway_id = (known after apply)
+ id = (known after apply)
+ instance_id = (known after apply)
+ instance_owner_id = (known after apply)
+ local_gateway_id = (known after apply)
+ nat_gateway_id = (known after apply)
+ network_interface_id = (known after apply)
+ origin = (known after apply)
+ route_table_id = (known after apply)
+ state = (known after apply)
}
# aws_route_table.private[0] will be created
+ resource "aws_route_table" "private" {
+ id = (known after apply)
+ owner_id = (known after apply)
+ propagating_vgws = (known after apply)
+ route = [
+ {
+ cidr_block = "0.0.0.0/0"
+ egress_only_gateway_id = ""
+ gateway_id = ""
+ instance_id = ""
+ ipv6_cidr_block = ""
+ local_gateway_id = ""
+ nat_gateway_id = (known after apply)
+ network_interface_id = ""
+ transit_gateway_id = ""
+ vpc_peering_connection_id = ""
},
]
+ vpc_id = (known after apply)
}
# aws_route_table.private[1] will be created
+ resource "aws_route_table" "private" {
+ id = (known after apply)
+ owner_id = (known after apply)
+ propagating_vgws = (known after apply)
+ route = [
+ {
+ cidr_block = "0.0.0.0/0"
+ egress_only_gateway_id = ""
+ gateway_id = ""
+ instance_id = ""
+ ipv6_cidr_block = ""
+ local_gateway_id = ""
+ nat_gateway_id = (known after apply)
+ network_interface_id = ""
+ transit_gateway_id = ""
+ vpc_peering_connection_id = ""
},
]
+ vpc_id = (known after apply)
}
# aws_route_table_association.private[0] will be created
+ resource "aws_route_table_association" "private" {
+ id = (known after apply)
+ route_table_id = (known after apply)
+ subnet_id = (known after apply)
}
# aws_route_table_association.private[1] will be created
+ resource "aws_route_table_association" "private" {
+ id = (known after apply)
+ route_table_id = (known after apply)
+ subnet_id = (known after apply)
}
# aws_security_group.ecs_tasks will be created
+ resource "aws_security_group" "ecs_tasks" {
+ arn = (known after apply)
+ description = "allow inbound access from the ALB only"
+ egress = [
+ {
+ cidr_blocks = [
+ "0.0.0.0/0",
]
+ description = ""
+ 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 = []
+ description = ""
+ from_port = 80
+ ipv6_cidr_blocks = []
+ prefix_list_ids = []
+ protocol = "tcp"
+ security_groups = (known after apply)
+ self = false
+ to_port = 80
},
]
+ name = "xentral-ecs-tasks-security-group"
+ owner_id = (known after apply)
+ revoke_rules_on_delete = false
+ vpc_id = (known after apply)
}
# aws_security_group.lb will be created
+ resource "aws_security_group" "lb" {
+ arn = (known after apply)
+ description = "controls access to the ALB"
+ egress = [
+ {
+ cidr_blocks = [
+ "0.0.0.0/0",
]
+ description = ""
+ 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 = ""
+ from_port = 80
+ ipv6_cidr_blocks = []
+ prefix_list_ids = []
+ protocol = "tcp"
+ security_groups = []
+ self = false
+ to_port = 80
},
]
+ name = "xentral-load-balancer-security-group"
+ owner_id = (known after apply)
+ revoke_rules_on_delete = false
+ vpc_id = (known after apply)
}
# aws_subnet.private[0] will be created
+ resource "aws_subnet" "private" {
+ arn = (known after apply)
+ assign_ipv6_address_on_creation = false
+ availability_zone = "eu-central-1a"
+ availability_zone_id = (known after apply)
+ cidr_block = "172.17.0.0/24"
+ id = (known after apply)
+ ipv6_cidr_block_association_id = (known after apply)
+ map_public_ip_on_launch = false
+ owner_id = (known after apply)
+ vpc_id = (known after apply)
}
# aws_subnet.private[1] will be created
+ resource "aws_subnet" "private" {
+ arn = (known after apply)
+ assign_ipv6_address_on_creation = false
+ availability_zone = "eu-central-1b"
+ availability_zone_id = (known after apply)
+ cidr_block = "172.17.1.0/24"
+ id = (known after apply)
+ ipv6_cidr_block_association_id = (known after apply)
+ map_public_ip_on_launch = false
+ owner_id = (known after apply)
+ vpc_id = (known after apply)
}
# aws_subnet.public[0] will be created
+ resource "aws_subnet" "public" {
+ arn = (known after apply)
+ assign_ipv6_address_on_creation = false
+ availability_zone = "eu-central-1a"
+ availability_zone_id = (known after apply)
+ cidr_block = "172.17.2.0/24"
+ id = (known after apply)
+ ipv6_cidr_block_association_id = (known after apply)
+ map_public_ip_on_launch = true
+ owner_id = (known after apply)
+ vpc_id = (known after apply)
}
# aws_subnet.public[1] will be created
+ resource "aws_subnet" "public" {
+ arn = (known after apply)
+ assign_ipv6_address_on_creation = false
+ availability_zone = "eu-central-1b"
+ availability_zone_id = (known after apply)
+ cidr_block = "172.17.3.0/24"
+ id = (known after apply)
+ ipv6_cidr_block_association_id = (known after apply)
+ map_public_ip_on_launch = true
+ owner_id = (known after apply)
+ vpc_id = (known after apply)
}
# aws_vpc.main will be created
+ resource "aws_vpc" "main" {
+ arn = (known after apply)
+ assign_generated_ipv6_cidr_block = false
+ cidr_block = "172.17.0.0/16"
+ default_network_acl_id = (known after apply)
+ default_route_table_id = (known after apply)
+ default_security_group_id = (known after apply)
+ dhcp_options_id = (known after apply)
+ enable_classiclink = (known after apply)
+ enable_classiclink_dns_support = (known after apply)
+ enable_dns_hostnames = (known after apply)
+ enable_dns_support = true
+ id = (known after apply)
+ instance_tenancy = "default"
+ ipv6_association_id = (known after apply)
+ ipv6_cidr_block = (known after apply)
+ main_route_table_id = (known after apply)
+ owner_id = (known after apply)
}
Plan: 32 to add, 0 to change, 0 to destroy.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment