我有以下 HCL 代码,它从 terraform plan
上的终端询问并读取 secret_api_key
变量,并将其保存在 secret 管理器中。
variable "secret_api_key" {
type = string
sensitive = true
}
resource "aws_secretsmanager_secret" "secret_api_key" {
name = "secret_api_key"
}
resource "aws_secretsmanager_secret_version" "secret_api_key" {
secret_id = aws_secretsmanager_secret.secret_api_key.id
secret_string = var.secret_api_key
}
在另一种配置中, secret 的读取方式如下:
data "aws_secretsmanager_secret" "secret_api_key" {
name = "secret_api_key"
depends_on = [aws_secretsmanager_secret.secret_api_key]
}
data "aws_secretsmanager_secret_version" "secret_api_key" {
secret_id = data.aws_secretsmanager_secret.secret_api_key.id
}
resource "aws_lambda_function" "s3_to_service" {
...
environment {
variables = {
SECRET_ARN = data.aws_secretsmanager_secret_version.secret_api_key.arn
}
}
}
如何强制 terraform 在每次计划时不询问我 API key ?它需要在我第一次这样做时询问我,将其存储在 secret 管理器中。但在那之后,那就是多余的了。我怎样才能避免这种情况?
最佳答案
不完全是。
要么每次都手动提供一个值,要么不提供,但每次您想要评估 Terraform 配置时,Terraform 变量都需要以某种形状、方式或形式指定的值,无论是由您还是默认情况下指定的值。
如果您计划/应用 aws_secretsmanager_secret
,则无法手动提供值,除非您硬编码值或指定默认值。
Terraform 的工作原理是计算状态差异 - 它需要知道您的预期状态(以及您的变量值),然后将其与实际状态进行比较。
我建议您在想要创建/更新 secret 时计划/应用 secret 的 Terraform 配置,并将 secret 的创建与 secret 的使用分开。
然后,您可以使用 data.aws_secretsmanager_secret.secret_api_key
来访问它。
关于amazon-web-services - 如何防止 terraform 询问在 AWS Secrets Manager 上设置的变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69795024/