// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 data "aws_availability_zones" "available" {} resource "aws_network_interface" "eip" { count = "${var.num_rs_members}" subnet_id = "${element(var.subnets, count.index % length(var.subnets))}" security_groups = ["${var.sg}"] tags { Name = "eip-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ssm_parameter" "eip-ssm" { count = "${var.num_rs_members}" name = "/${var.ProjectTag}/${var.Environment}/rsmember/eip/${count.index}" type = "String" value = "${element(aws_network_interface.eip.*.private_ip, count.index)}" overwrite = "true" tags { Name = "ssm-eip-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ssm_parameter" "eipeni-ssm" { count = "${var.num_rs_members}" name = "/${var.ProjectTag}/${var.Environment}/rsmember/eipeni/${count.index}" type = "String" value = "${element(aws_network_interface.eip.*.id, count.index)}" overwrite = "true" tags { Name = "ssm-eipeni-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ebs_volume" "rs_data" { count = "${var.init_rs_members}" availability_zone = "${element(data.aws_availability_zones.available.names,count.index % length(var.subnets))}" encrypted = "true" size = "${var.data_vol_size}" iops = "${var.data_vol_iops}" type = "io1" tags { Name = "datavol-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ebs_volume" "rs_logs" { count = "${var.num_rs_members}" availability_zone = "${element(data.aws_availability_zones.available.names,count.index % length(var.subnets))}" encrypted = "true" size = "${var.logs_vol_size}" iops = "${var.logs_vol_iops}" type = "io1" tags { Name = "logsvol-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ssm_parameter" "rs_data-ssm" { count = "${var.init_rs_members}" name = "/${var.ProjectTag}/${var.Environment}/rsmember/datavol/${count.index}" type = "String" value = "${element(aws_ebs_volume.rs_data.*.id, count.index)}" overwrite = "true" tags { Name = "ssm-datavol-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_ssm_parameter" "rs_logs-ssm" { count = "${var.num_rs_members}" name = "/${var.ProjectTag}/${var.Environment}/rsmember/logsvol/${count.index}" type = "String" value = "${element(aws_ebs_volume.rs_logs.*.id, count.index)}" overwrite = "true" tags { Name = "ssm-logsvol-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_launch_configuration" "rs_lc" { name_prefix = "rs" image_id = "${var.ami}" instance_type = "${var.instance_type}" iam_instance_profile = "${var.iam_profile}" key_name = "${var.key}" security_groups = ["${var.sg}"] ebs_optimized = "true" root_block_device { volume_type = "io1" volume_size = "${var.root_vol_size}" iops = "${var.root_vol_iops}" } } resource "aws_route53_record" "rs_eip_records" { count = "${var.num_rs_members}" zone_id = "${var.zone}" name = "rs-${count.index}.${lower(var.Environment)}.${lower(var.ProjectTag)}.local" type = "A" ttl = "300" records = ["${element(aws_network_interface.eip.*.private_ip, count.index)}"] } resource "aws_ssm_parameter" "rs_eip_records-ssm" { count = "${var.num_rs_members}" name = "/${var.ProjectTag}/${var.Environment}/rsmember/dns/${count.index}" type = "String" value = "${element(aws_route53_record.rs_eip_records.*.fqdn, count.index)}" overwrite = "true" tags { Name = "ssm-dns-rsmember-${count.index}" Project = "${var.ProjectTag}" Environment = "${var.Environment}" } } resource "aws_autoscaling_group" "rs_asg" { count = "${var.num_rs_members}" name_prefix = "rsmember-asg-" max_size = 1 min_size = 1 launch_configuration = "${aws_launch_configuration.rs_lc.name}" health_check_type = "EC2" desired_capacity = 1 vpc_zone_identifier = ["${element(var.subnets, count.index % length(var.subnets))}"] enabled_metrics = ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"] initial_lifecycle_hook = { name = "rs_instance_launch" heartbeat_timeout = 600 lifecycle_transition = "autoscaling:EC2_INSTANCE_LAUNCHING" notification_target_arn = "${var.LifecycleTopicArn}" role_arn = "${var.LifecycleRoleArn}" notification_metadata = <