module "statementdb_migration_bootstrap" {
  source = "git@github.com:theorchard/terraform-chef-bootstrap.git?ref=4.0.1"

  chef_role         = "${var.environment}_mysql_statementdb"
  aws_instance_name = "${var.environment}-${var.migration_service_name}"
  aws_iam_role_id   = aws_iam_role.instance_iam_role.id

  node_attributes = {
    datadog = {
      tags = {
        environment  = var.environment
        service_name = var.migration_service_name
      }
    }
  }
}

resource "aws_instance" "statementdb_migration_mysql" {
  # checkov:skip=CKV_AWS_79:Debian AMI need metadata endpoint v1 enabled or SSH does not work.
  ami                                  = data.aws_ami.debian.id
  key_name                             = "${var.environment}-mysql-${var.service_name}01"
  monitoring                           = true
  subnet_id                            = data.aws_subnet.instance_subnet.id
  vpc_security_group_ids               = [aws_security_group.instance_security_group.id]
  associate_public_ip_address          = false
  iam_instance_profile                 = aws_iam_instance_profile.iam_instance_profile.name
  instance_type                        = "r5.2xlarge"
  ebs_optimized                        = true
  instance_initiated_shutdown_behavior = "stop"
  disable_api_termination              = true
  user_data                            = module.statementdb_migration_bootstrap.user_data_output

  root_block_device {
    volume_type           = "gp3"
    volume_size           = 250
    delete_on_termination = false
    encrypted             = true
    kms_key_id            = aws_kms_key.kms_key.arn
  }

  volume_tags = merge(module.default_tags.tags, {
    Name         = "${var.environment}-mysql-${var.migration_service_name}"
    map-migrated = var.map_migrated_tag
  })

  tags = merge(module.default_tags.tags, {
    Name         = "${var.environment}-mysql-${var.migration_service_name}"
    map-migrated = var.map_migrated_tag
  })

  lifecycle {
    ignore_changes = [
      ami,
    ]
  }
}

resource "aws_route53_record" "statementdb_migration_dns_record" {
  zone_id = data.aws_route53_zone.route53_zone.zone_id
  name    = "${var.environment}-${var.migration_service_name}"
  type    = "A"
  ttl     = "60"
  records = [aws_instance.statementdb_migration_mysql.private_ip]
}

resource "aws_ebs_volume" "statementdb_migration_volume" {
  availability_zone = data.aws_subnet.instance_subnet.availability_zone
  snapshot_id       = "snap-0b512009c9233eb42" # snapshot of the existing statementdb volume from 2026-05-19
  encrypted         = true
  type              = "gp3"
  size              = 15000  # set to match snapshot size
  iops              = 3000
  kms_key_id        = aws_kms_key.kms_key.arn
  throughput        = 125

  tags = {
    Name               = "${var.environment}-mysql-${var.migration_service_name}"
    environment        = var.environment
    application_family = var.application_family
    service_name       = var.migration_service_name
    map-migrated       = var.map_migrated_tag
    terraformed        = true
  }
}

resource "aws_volume_attachment" "statementdb_migration_attachment" {
  device_name = "/dev/sdb"
  volume_id   = aws_ebs_volume.statementdb_migration_volume.id
  instance_id = aws_instance.statementdb_migration_mysql.id
}
