DEV Community

Gias Uddin
Gias Uddin

Posted on

Creating an AWS MySQL RDS Instance with Terraform

Creating an AWS MySQL RDS Instance with Terraform

Amazon RDS (Relational Database Service) simplifies the setup, operation, and scaling of relational databases in the cloud. By using Terraform, you can manage your MySQL RDS instances as code, ensuring consistency and ease of deployment. In this article, we’ll walk through the process of creating a MySQL RDS instance on AWS using Terraform.

Prerequisites

Before getting started, ensure you have the following:

  • AWS Account: An active AWS account with the necessary permissions to create RDS instances.
  • Terraform Installed: Terraform should be installed on your local machine.
  • AWS Access Key and Secret Key: You’ll need these credentials to authenticate Terraform with AWS.

Steps to Create a MySQL RDS Instance

1. Define the AWS Provider

Start by defining the AWS provider in your Terraform configuration file. This will instruct Terraform to interact with AWS services in the specified region using your credentials.

provider "aws" {
  region     = "ap-southeast-2"
  access_key = "your-access-key"  # Replace with your AWS access key
  secret_key = "your-secret-key"  # Replace with your AWS secret key
}
Enter fullscreen mode Exit fullscreen mode

2. Create a Security Group

Next, define a security group that will control access to your MySQL RDS instance. This security group will allow inbound traffic on port 3306, which is the default port for MySQL.

resource "aws_security_group" "mysql_rds_sg" {
  name        = "rds-sg"
  description = "Security group for MySQL RDS instance"

  ingress {
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]  # Open to all; consider restricting this to specific IPs for better security
  }
}
Enter fullscreen mode Exit fullscreen mode

3. Create the MySQL RDS Instance

Now, define the MySQL RDS instance itself. This configuration specifies the instance type, storage, engine version, and other details.

resource "aws_db_instance" "awsdevrds" {
   allocated_storage      = 20
   max_allocated_storage  = 150
   storage_type           = "gp2"  # General Purpose SSD storage
   identifier             = "myrdsdev"
   engine                 = "mysql"
   engine_version         = "8.0.33"
   instance_class         = "db.t2.micro"  # Choose an instance class based on your workload
   username               = "admin"  # Replace with your desired username
   password               = "Passw!123"  # Replace with a strong password
   db_name                = "test_mysql_db"  # Name of the database
   backup_retention_period = 7  # Number of days to retain backups
   publicly_accessible    = true  # Make the instance publicly accessible (consider the security implications)
   skip_final_snapshot    = true  # Skip final snapshot when destroying the instance
   vpc_security_group_ids = [aws_security_group.mysql_rds_sg.id]  # Associate with the security group

   tags = {
     Name = "devrds"  # Tag your instance for easy identification
   }
}
Enter fullscreen mode Exit fullscreen mode

4. Initialize and Apply the Terraform Configuration

With the Terraform configuration ready, follow these steps to deploy the MySQL RDS instance:

  • Initialize Terraform:
  terraform init
Enter fullscreen mode Exit fullscreen mode
  • Create an Execution Plan:
  terraform plan 
Enter fullscreen mode Exit fullscreen mode
  • Apply the Plan:
  terraform apply
Enter fullscreen mode Exit fullscreen mode

This process will create a MySQL RDS instance on AWS as defined in your configuration. The instance will be secured with the custom security group, which controls access to the database.

5. Accessing the MySQL RDS Instance

Once the instance is up and running, you can access it via the endpoint provided in the AWS Management Console or through the Terraform output if configured. Ensure your security group is properly configured to allow access only from trusted sources.

6. Clean Up Resources

If you no longer need the MySQL RDS instance, you can destroy the resources created by Terraform to avoid incurring costs:

terraform destroy
Enter fullscreen mode Exit fullscreen mode

This command will delete the RDS instance and the associated security group from your AWS account.

Conclusion

Creating an AWS MySQL RDS instance with Terraform is a streamlined process that allows you to manage your database infrastructure as code. By defining your RDS instance and its security settings in a Terraform configuration file, you can easily deploy, modify, and destroy your database resources with consistency and efficiency.

For production environments, consider additional configurations such as multi-AZ deployments, encryption, and enhanced monitoring. Terraform’s flexibility and power make it an ideal tool for managing cloud infrastructure, ensuring your resources are deployed and maintained according to best practices.

Top comments (0)