1
votes

I am trying to create an rds global database in aws using Terraform. The primary cluster gets created but the secondary cluster fails with the following error-

* aws_rds_cluster.secondary: error creating RDS cluster: 
InvalidParameterCombination: Cannot specify user name for cross 
region replication cluster
status code: 400, request id: 10b82a78-898c-49e6-b28f- 
0a318fdc226f

I tried by removing master_username but I got the below error-

* aws_rds_cluster.secondary: provider.aws: aws_rds_cluster: : 
"master_username": required field is not set

My Terraform Module to create rds global database in aws-

resource "aws_rds_global_cluster" "rdsglobal" {
  provider                  = "aws.primary"

  global_cluster_identifier = "${var.global_database_id}"
  storage_encrypted         = "${var.storage_encrypted}"
}

resource "aws_rds_cluster_instance" "primary" {
  provider                  = "aws.primary"
  count                     = "${var.instance_count}"
  identifier                = "${var.db_name}-${count.index+1}"
  cluster_identifier        = "${aws_rds_cluster.primary.id}"
  instance_class            = "${var.instance_class}"
  engine                    = "${var.engine}"
  engine_version            = "${var.engine_version}"
  publicly_accessible       = "${var.publicly_accessible}"

}

resource "aws_rds_cluster" "primary" {
  provider                  = "aws.primary"
  cluster_identifier        = "${var.primary_cluster_id}"
  database_name             = "${var.db_name}"
  port                      = "${var.port}"
  engine                    = "${var.engine}"
  engine_version            = "${var.engine_version}"
  master_username           = "${var.master_username}"
  master_password           = "${random_string.password.result}"
  vpc_security_group_ids    = ["${var.security_group_ids}"] 
  db_subnet_group_name      = "${var.db_subnet_group_name}" 
  storage_encrypted         = "${var.storage_encrypted}"
  backup_retention_period   = "${var.backup_retention_period}"
  skip_final_snapshot       = "${var.skip_final_snapshot}"
  engine_mode               = "${var.engine_mode}"
  global_cluster_identifier = "${aws_rds_global_cluster.rdsglobal.id}"

}


resource "aws_rds_cluster_instance" "secondary" {
  provider                  = "aws.secondary"
  count                     = "${var.instance_count}"
  identifier                = "${var.db_name}-${count.index+1}"
  cluster_identifier        = "${aws_rds_cluster.secondary.id}"
  instance_class            = "${var.instance_class}"
  engine                    = "${var.engine}"
  engine_version            = "${var.engine_version}"
  publicly_accessible       = "${var.publicly_accessible}"

}

resource "aws_rds_cluster" "secondary" {
  depends_on                = ["aws_rds_cluster_instance.primary"]
  provider                  = "aws.secondary"
  cluster_identifier        = "${var.secondary_cluster_id}"
  port                      = "${var.port}"
  engine                    = "${var.engine}"
  engine_version            = "${var.engine_version}"
  master_username           = "${var.master_username}"
  master_password           = "${random_string.password.result}"
  vpc_security_group_ids    = ["${var.secondary_security_group_ids}"] 
  db_subnet_group_name      = "${var.db_subnet_group_name}" 
  engine_mode               = "${var.engine_mode}"
  global_cluster_identifier = "${aws_rds_global_cluster.rdsglobal.id}"

}

Reference: https://www.terraform.io/docs/providers/aws/r/rds_global_cluster.html

1
I was able to create the rds global database using aws cli but not able to do the same using Terraform. Any help will be greatly appreciated.jroy
I don't have an answer, but that error message is given when you try to create a cross region read replica and you specify master username/password. This is the tech that's behind global rds clusters. The documentation for adding a seconday cluster (docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/…) does not show specifying the root user/pass. It might be a change in the API. I would suggest creating an issue with the AWS Terraform provider.Eric M. Johnson
Thanks @EricM.Johnsonjroy

1 Answers

2
votes

If you are creating a global cluster, you don't need to provide master_username and master_password for the secondary cluster.