# Terraform configuration to create a MySQL RDS instance.

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

# --- 1. Data Source for Default VPC and Subnets ---
data "aws_vpc" "default" {
  default = true
}

data "aws_subnets" "default" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.default.id]
  }
  filter {
    name   = "default-for-az"
    values = ["true"]
  }
}

# --- 2. Create DB Subnet Group ---
resource "aws_db_subnet_group" "main" {
  name        = "my-terraform-db-subnet-group"
  subnet_ids  = tolist(data.aws_subnets.default.ids)[0:2] # Use first two default subnets
  description = "DB subnet group for Terraform RDS instance"

  tags = {
    Name = "MyTerraformDBSubnetGroup"
  }
}

# --- 3. Create Security Group for RDS ---
resource "aws_security_group" "rds_sg" {
  name        = "MyTerraformRDSSG"
  description = "Allow MySQL traffic for RDS"
  vpc_id      = data.aws_vpc.default.id

  ingress {
    description = "MySQL from anywhere"
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # For simplicity, restrict in production
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "MyTerraformRDSSG"
  }
}

# --- 4. Create RDS Instance ---
resource "aws_db_instance" "mysql_instance" {
  allocated_storage    = 20
  db_name              = "mydb"
  engine               = "mysql"
  engine_version       = "8.0.28"
  instance_class       = "db.t3.micro"
  identifier           = "my-terraform-mysql-instance"
  username             = "admin"
  password             = "MySecurePassword123!" # !!! IMPORTANT: Use a strong password in production !!!
  db_subnet_group_name = aws_db_subnet_group.main.name
  vpc_security_group_ids = [aws_security_group.rds_sg.id]
  skip_final_snapshot  = true # For demo purposes, skip final snapshot
  publicly_accessible  = true # For demo purposes, make publicly accessible

  tags = {
    Name = "MyTerraformMySQLInstance"
  }
}

# --- Outputs ---
output "rds_instance_endpoint" {
  value       = aws_db_instance.mysql_instance.address
  description = "The endpoint address of the RDS instance."
}

output "rds_instance_id" {
  value       = aws_db_instance.mysql_instance.id
  description = "The ID of the RDS instance."
}
