Amazon web services 如何告诉Terraform跳过secret manager资源(如果存在)?
我的想法是,我想使用Terraform resourceAmazon web services 如何告诉Terraform跳过secret manager资源(如果存在)?,amazon-web-services,terraform,terraform-provider-aws,aws-secrets-manager,Amazon Web Services,Terraform,Terraform Provider Aws,Aws Secrets Manager,我的想法是,我想使用Terraform resourceaws_secretsmanager\u secret只创建三个机密(不是工作区指定的机密),一个用于开发环境,一个用于预编程,第三个用于生产环境 比如: resource "aws_secretsmanager_secret" "dev_secret" { name = "example-secret-dev" } resource "aws_secretsman
aws_secretsmanager\u secret
只创建三个机密(不是工作区指定的机密),一个用于开发环境,一个用于预编程,第三个用于生产环境
比如:
resource "aws_secretsmanager_secret" "dev_secret" {
name = "example-secret-dev"
}
resource "aws_secretsmanager_secret" "preprod_secret" {
name = "example-secret-preprod"
}
resource "aws_secretsmanager_secret" "prod_secret" {
name = "example-secret-prod"
}
但是在创建它们之后,我不想每次运行“Terraform应用”时都覆盖它们,有没有办法告诉Terraform如果存在任何机密,跳过机密的创建而不覆盖
我看了一下,但仍然没有一个明确的解决方案,任何建议都将不胜感激。如果您在控制台或使用AWS SDK手动创建,它将不会覆盖该机密。aws_secretsmanager_secret仅创建机密,而不创建其值。要设置值,必须使用
无论如何,这是你可以轻松测试自己的东西。只需使用密码运行代码,在AWS控制台中更新其值,然后重新运行terraform apply。您应该看不到机密值的任何更改。如果您在控制台或使用AWS SDK手动创建机密,则不会覆盖该机密。aws_secretsmanager_secret仅创建机密,而不创建其值。要设置值,必须使用
无论如何,这是你可以轻松测试自己的东西。只需使用密码运行代码,在AWS控制台中更新其值,然后重新运行terraform apply。您应该看不到机密值的任何更改。TF不会无故覆盖您的资源。您提供的链接是正确的。你不能轻易地做你想做的事,因为这不是TF设计的目的。为什么它会覆盖它们?你的意思是你想用一些初始秘密来种子,并使用秘密管理器的轮换来轮换秘密,而不想Terraform将该值更改回种子值?TF不会无故覆盖你的资源。您提供的链接是正确的。你不能轻易地做你想做的事,因为这不是TF设计的目的。为什么它会覆盖它们?你的意思是你想用一些初始秘密来种子,并使用秘密管理器的轮换来轮换秘密,而不想Terraform将该值更改回种子值吗,我使用
aws\u secretsmanager\u secret
创建了一个空的秘密,并使用aws\u secretsmanager\u secret\u version
添加了一些占位符:用户名/密码,因为我的Terraform也需要这些凭据来创建RDS实例(请参见这个问题:),但现在的问题是在第一个Terraform应用之后,我有RDS实例和带有占位符凭据的密码,然后我将占位符修改为实际凭据(在下一条评论中继续),但我想更新RDS的真实凭据,因此我想我需要再次运行Terraform apply,但是问题是,aws\u secretsmanager\u secret\u version
会将凭据覆盖回占位符…..希望这有意义。更新:可能我在这里遗漏了一些东西,但在第二个Terraform应用中,aws\u secretsmanager\u secret\u version
不会覆盖机密字符串,所以我想这个秘密很好,但是传递给rds实例的master_用户名
和master_密码
不会得到更新…@Cecilia它不应该覆盖您的秘密。请尝试,这是很容易测试的。感谢您@Marcin的输入,我以前使用的是数据
源代码方法,我同意您的看法,我们不希望敏感值是纯文本,更新主密码似乎是一种合理的方法,令人遗憾的是,无法在AWS控制台中手动更新master_用户名,因此我想我必须在Terraform中设置它。为了澄清这一点,我使用AWS_secretsmanager_secret
创建了一个空密码,并使用AWS_secretsmanager_secret_version
添加了几个占位符:用户名/密码,因为我的Terraform也需要这些凭据来创建RDS实例(请参见此问题:),但现在的问题是在第一个Terraform应用后,我有了RDS实例和占位符凭据的机密,然后我将占位符修改为实际凭据(在下一个注释中继续)但是我想更新RDS的真实凭据,所以我想我需要再次运行Terraform apply,但问题是aws\u secretsmanager\u secret\u版本将覆盖凭据并返回到占位符…..希望这有意义。更新:可能我这里遗漏了一些内容,但在第二个Terraform apply中,aws_secretsmanager_secret_version
不会覆盖秘密字符串,所以我想这个秘密很好,但是传递给rds实例的master_用户名
和master_密码
不会被更新…@Cecilia它不应该覆盖你的秘密。请尝试,这是很容易测试的。感谢您@Marcin的输入,我以前使用的是数据
源代码方法,我同意您的看法,我们不希望敏感值是纯文本,更新主密码似乎是一种合理的方法,很遗憾,master_用户名不能在AWS控制台中手动更新,所以我想我必须在Terraform中设置它。