provider "aws" {
  region = "us-east-1"
}

# Terraform backends cannot contain interpolations - of the form ${var.environment}-${var.service_name}-state
terraform {
  backend "s3" {
    bucket  = "dev-orcd-terraform-state"
    key     = "dev/kafka-infra/debezium_source/debezium_mysql9/rds_mysql/terraform.tfstate"
    region  = "us-east-1"
    encrypt = true
  }
}

module "vpc_info" {
  source = "git@github.com:theorchard/terraform-vpc-info.git?ref=3.0.2"

  environment = "dev"
}

data "aws_route53_zone" "route53_zone" {
  name = "dev.theorchard.io"
}

resource "aws_rds_cluster_parameter_group" "db_parameter_group_8" {
  name        = "${var.environment}-${var.service_name}-aurora-mysql80"
  description = "${var.environment}-${var.service_name}-aurora-mysql80"
  family      = "aurora-mysql8.0"

  parameter {
    name         = "binlog_format"
    value        = "ROW"
    apply_method = "pending-reboot"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_client"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_connection"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_database"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_filesystem"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_results"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "character_set_server"
    value        = "utf8"
  }
  parameter {
    apply_method = "immediate"
    name         = "collation_connection"
    value        = "utf8_general_ci"
  }
  parameter {
    apply_method = "immediate"
    name         = "collation_server"
    value        = "utf8_general_ci"
  }

  parameter {
    apply_method = "immediate"
    name         = "max_heap_table_size"
    value        = "8589934592"
  }
  parameter {
    apply_method = "immediate"
    name         = "slow_query_log"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "tmp_table_size"
    value        = "8589934592"
  }
}


module "rds_cluster" {
  source = "git@github.com:theorchard/terraform-rds.git?ref=6.3.0"

  providers = {
    aws.dns = aws
  }

  environment        = var.environment
  service_name       = var.service_name
  application_family = var.application_family
  vpc_id             = module.vpc_info.vpc_id
  route53_zone_id    = data.aws_route53_zone.route53_zone.zone_id

  rds_engine         = "aurora-mysql"
  rds_engine_version = "8.0.mysql_aurora.3.07.1"

  rds_cluster_instance_class       = "db.t4g.medium" # only Graviton instances are supported
  rds_cluster_instance_count       = "1"
  rds_master_username              = "mysql_admin"      # choose something sensible, since this value is permanent
  rds_master_password              = "s0mePass!changme" # this value is temporary and should be changed as soon as the instance is online
  rds_performance_insights_enabled = false
  rds_db_subnet_group_name         = "private_rds_subnet_group"
  enabled_cloudwatch_logs_exports  = ["audit", "error", "general"]

  rds_db_cluster_parameter_group_name       = aws_rds_cluster_parameter_group.db_parameter_group_8.name
  rds_cluster_instance_parameter_group_name = "default.aurora-mysql8.0"
}
