尝试从AWS Secret Manager的数据源获取用户名和密码时遇到问题:
username = data.external.secret_map.result["rds_user"]
password = data.external.secret_map.result["rds_pass"]
其他部分位于单独的模板中,例如:
data "aws_secretsmanager_secret_version" "rds" {
secret_id = "SOME-SECRET-ID"
depends_on = [aws_secretsmanager_secret_version.rds]
}
data "external" "secret_map" {
program = ["echo", data.aws_secretsmanager_secret_version.rds.secret_string]
}
我可以确认秘密放置和检索可用于所有其他段,并且只有模块中的用户名部分触发替换,而不触发密码,但是密码也存在问题,因为即使触发密码就位更改没有变化。
这是在第一次成功申请后发生的,第二次建议更换
~ username = "root" -> (known after apply) # forces replacement
但是如果我继续错误消息说数据库已经存在,则失败
Error: Error creating DB Instance: DBInstanceAlreadyExists: DB
Instance already exists
status code: 400, request id:
使用aws_secretsmanager_secret_version,因为aws_secretsmanager_secret不提供秘密放置,而仅提供检索。 Terraform版本0.12
回复:ydaetskcor 抱歉,我确实无法从我的代码中提供更多信息,但是您可以通过以下方式重现上述行为:
在{@ {3}}可用的rds使用示例上方添加以下代码行
locals {
secrets = {
rds_user = "root"
rds_pass = random_password.rds_pass.result
}
}
data "aws_secretsmanager_secret_version" "rds_read" {
secret_id = "SOME-SECRET-ID"
depends_on = [aws_secretsmanager_secret_version.rds_write]
}
data "external" "secret_map" {
program = ["echo", data.aws_secretsmanager_secret_version.rds_read.secret_string]
}
resource "random_password" "rds_pass" {
length = 64
special = false
}
resource "aws_secretsmanager_secret_version" "rds_write" {
secret_id = "SOME-SECRET-ID"
secret_string = "${jsonencode(local.secrets)}"
}
并从用法示例中更改以下几行 来自:
username = "user"
password = "YourPwdShouldBeLongAndSecure!"
收件人:
username = data.external.secret_map.result["rds_user"]
password = data.external.secret_map.result["rds_pass"]