User_data template_file extra quotes when running cloud-init script

Hi,

I’m finding extra quotes and double quotes turning into single quotes once ran as part of cloud-init and I’m not sure why or if there is a way around it.

Terraform Version

Terraform v0.13.5
+ provider registry.terraform.io/hashicorp/archive v2.0.0
+ provider registry.terraform.io/hashicorp/aws v3.22.0
+ provider registry.terraform.io/hashicorp/random v2.2.0
+ provider registry.terraform.io/hashicorp/template v2.1.0

Terraform Configuration Files

data template_file "BastionHostUserData" {
  template = file("${path.module}/scripts/BastionUserData.sh")
  vars = {
    Region           = var.aws-region
    SshKeysParam     = var.BastionHostPubKeysName
    BastionHostname  = lower("bastion.${terraform.workspace}.staging.${var.Route53ZonePubName}")
    Prompt           = terraform.workspace
    DbMasterPassword = var.DbMasterPassword
    DbHostname       = var.DbHostname
    DbAppUser        = var.DbAppUser
    DbAppPassword    = var.DbAppPassword
  }
}

Relevant portion within the user_data script:

  mysql -u root -p"${DbMasterPassword}" -h ${DbHostname} -Be "CREATE USER \'${DbAppUser}\'@\'%\' IDENTIFIED BY \'${DbAppPassword}\';"
  mysql -u root -p"${DbMasterPassword}" -h ${DbHostname} -Be "GRANT ALL ON database.* TO \'${DbAppUser}\'@\'%\';"

I've also tried:

  mysql -u root -p"${DbMasterPassword}" -h ${DbHostname} -Be "CREATE USER '${DbAppUser}'@'%' IDENTIFIED BY '${DbAppPassword}';"
  mysql -u root -p"${DbMasterPassword}" -h ${DbHostname} -Be "GRANT ALL ON database.* TO '${DbAppUser}'@'%';"

Expected Behavior

I would expect the commands to run out as follows:

mysql -u root -p"${var1}" -h ${var2} -Be "CREATE USER \'${var3}\'@\'%\' IDENTIFIED BY \'${var4}\';"
Needs to translate to:
mysql -u root -pValueOfVar1 -h ValueOfVar2 -Be "CREATE USER 'ValueOfVar3'@'%' IDENTIFIED BY 'ValueOfVar4';"

When I omit the trying to escape the single quote the command fails completely and the single quote is omitted.
Weirdly enough if I echo the command output it seems the strings are expanding to what I want but for whatever reason terraform is doing something different when it actually runs.

Actual Behavior

Instead I get output like the following:
'CREATE USER '\''xxx'\''@'\''@'\'' IDENTIFIED BY '\''xxxxxxxx'\'''

Is there a way for me to pass in data into my script to allow for what I need above?

Steps to Reproduce

Duplicate the script and attach it to an aws ec2 instance and parse the log or watch error.