使用 Terraform 管理访问 RDS 数据库的凭据时出现问题

Issue when using Terraform to manage credentials that access RDS database

我通过 Terraform 创建了一个秘密,秘密是为了访问也在 Terraform 中定义的 RDS 数据库,在秘密中,我不想包括 usernamepassword ,所以我创建了一个空的秘密,然后在 AWS 控制台中手动添加凭证。

然后在RDS定义中:

resource "aws_rds_cluster" "example_db_cluster" {
  cluster_identifier = local.db_name
  engine             = "aurora-mysql"
  engine_version     = "xxx"
  engine_mode        = "xxx"
  availability_zones = [xxx]
  database_name   = "xxx"
  master_username = jsondecode(aws_secretsmanager_secret_version.db_secret_string.secret_string)["username"]
  master_password = jsondecode(aws_secretsmanager_secret_version.db_secret_string.secret_string)["password"]
.....

问题是当我应用terraform时,因为secret是空的,所以Terraform找不到usernamepassword的字符串,这会导致错误,有没有人有更好的方法实施这个?感觉在 Secret Manager 中手动创建秘密更容易。

您可以生成 random_password 并使用 aws_secretsmanager_secret_version 添加到您的秘密。

这是一个例子:

resource "random_password" "default_password" {
 length  = 20
 special = false
}

variable "secretString" {
 default = {
  usernae = "dbuser"
  password = random_password.default_password.result
 }

 type = map(string)
}

resource "aws_secretsmanager_secret" "db_secret_string" {
 name = "db_secret_string"
}

resource "aws_secretsmanager_secret_version" "secret" {
 secret_id = aws_secretsmanager_secret.db_secret_string.id
 secret_string = jsonencode(var.secretString)
}