如何防止 Terraform 询问在 AWS Secrets Manager 上设置的变量的值?

How to prevent terraform from asking for the value of a variable that is set on AWS Secrets Manager?

我有以下 HCL 代码,它从 terraform plan 上的终端询问并读取 secret_api_key 变量并将其保存在秘密管理器中。

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
}

在另一种配置中,秘密是这样读的:

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 密钥?它需要在我第一次这样做时询问我,以将其存储在机密管理器中。但在那之后,它是多余的。我怎样才能避免这种情况?

不是真的。

要么您每次都手动提供一个值,要么您不这样做,但每次您要评估 Terraform 配置时,Terraform 变量都需要以某种形状、方式或形式指定的值,无论是您还是默认情况下。

如果您 plan/apply aws_secretsmanager_secret,除非您对值进行硬编码或指定默认值,否则无法手动提供值。

Terraform 的工作原理是计算状态差异 - 它需要知道您的预期状态是什么(使用您的变量值),然后将其与实际状态进行比较。

我会建议您 plan/apply 秘密的 Terraform 配置,当您想要 create/update 它将秘密的创建与秘密的使用分开。

然后,您可以使用 data.aws_secretsmanager_secret.secret_api_key 访问它。