diff --git a/tools/terraform/percona/network.tf b/tools/terraform/percona/network.tf new file mode 100644 index 0000000000..dbdce6985e --- /dev/null +++ b/tools/terraform/percona/network.tf @@ -0,0 +1,30 @@ +resource "aws_acm_certificate" "certificate" { + domain_name = var.domain_name + validation_method = "DNS" + + lifecycle { + create_before_destroy = true + } +} + +resource "aws_route53_record" "record" { + for_each = { + for dvo in aws_acm_certificate.certificate.domain_validation_options : dvo.domain_name => { + name = dvo.resource_record_name + record = dvo.resource_record_value + type = dvo.resource_record_type + } + } + + allow_overwrite = true + name = each.value.name + records = [each.value.record] + ttl = 60 + type = each.value.type + zone_id = var.zone_id +} + +resource "aws_acm_certificate_validation" "percona" { + certificate_arn = aws_acm_certificate.certificate.arn + validation_record_fqdns = [for record in aws_route53_record.record : record.fqdn] +} diff --git a/tools/terraform/percona/percona.tf b/tools/terraform/percona/percona.tf new file mode 100644 index 0000000000..a65acd583d --- /dev/null +++ b/tools/terraform/percona/percona.tf @@ -0,0 +1,131 @@ +data "aws_ami" "percona" { + most_recent = true + + filter { + name = "name" + values = ["PMM2 Server *"] + } + + owners = ["679593333241"] # Percona +} + + +resource "aws_route53_record" "record" { + name = "percona" + type = "A" + zone_id = var.zone_id + alias { + evaluate_target_health = false + name = aws_lb.main.dns_name + zone_id = aws_lb.main.zone_id + } +} + +resource "aws_lb" "main" { + name = "percona" + internal = false + security_groups = [aws_security_group.lb.id, aws_security_group.backend.id] + subnets = var.public_subnets + idle_timeout = 120 +} + +resource "aws_lb_listener" "https" { + load_balancer_arn = aws_lb.main.arn + port = 443 + protocol = "HTTPS" + ssl_policy = "ELBSecurityPolicy-FS-1-2-Res-2019-08" + certificate_arn = aws_acm_certificate_validation.percona.certificate_arn + + default_action { + target_group_arn = aws_lb_target_group.percona.arn + type = "forward" + } +} + +resource "aws_lb_target_group" "percona" { + name = "percona" + protocol = "HTTP" + target_type = "instance" + port = "80" + vpc_id = var.vpc_id +} + +resource "aws_lb_target_group_attachment" "percona" { + target_group_arn = aws_lb_target_group.percona.arn + target_id = aws_instance.percona.id +} + +resource "aws_instance" "percona" { + ami = data.aws_ami.percona.id + instance_type = "m5.large" + subnet_id = var.private_subnet + vpc_security_group_ids = [aws_security_group.backend.id] + iam_instance_profile = aws_iam_instance_profile.profile.name +} + +resource "aws_iam_instance_profile" "profile" { + name = "percona-profile" + role = aws_iam_role.role.name +} + +resource "aws_iam_role" "role" { + name = "percona-role" + + assume_role_policy = <