Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何告诉Terraform跳过secret manager资源(如果存在)?_Amazon Web Services_Terraform_Terraform Provider Aws_Aws Secrets Manager - Fatal编程技术网

Amazon web services 如何告诉Terraform跳过secret manager资源(如果存在)?

Amazon 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

我的想法是,我想使用Terraform resource
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中设置它。