title: Creating RDS Instances from Snapshot Using Terraform
body: <p>Working on a Terraform project in which I am creating an RDS cluster by grabbing and using the most recent production db snapshot:</p>
  
  <pre><code># Get latest snapshot from production DB
  data "aws_db_snapshot" "db_snapshot" {
      most_recent = true
      db_instance_identifier = "${var.db_instance_to_clone}"
  }
  
  #Create RDS instance from snapshot
  resource "aws_db_instance" "primary" {
      identifier = "${var.app_name}-primary"
      snapshot_identifier = "${data.aws_db_snapshot.db_snapshot.id}"
      instance_class = "${var.instance_class}"
      vpc_security_group_ids = ["${var.security_group_id}"]
      skip_final_snapshot = true
      final_snapshot_identifier = "snapshot"
      parameter_group_name = "${var.parameter_group_name}"
      publicly_accessible = true
      timeouts {
        create = "2h"
      }
  }
  </code></pre>
  
  <p>The issue with this approach is that following runs of the terraform code (once another snapshot has been taken) want to re-create the primary RDS instance (and subsequently, the read replicas) with the latest snapshot of the DB. I was thinking something along the lines of a boolean count parameters that specifies first run, but setting <code>count = 0</code> on the snapshot resource causes issues with the snapshot_id parameters of the db resource. Likewise setting a <code>count = 0</code> on the db resource would indicate that it would destroy the db.</p>
  
  <p>Use case for this is to be able to make changes to other aspects of the production infrastructure that this terraform plan manages without having to re-create the entire RDS cluster, which is a very time consuming resource to destroy/create.</p>