sensitiveなデータベース認証情報変数を定義する

sensitiveフラグ、長さバリデーション、シークレットにデフォルト値なしのTerraformデータベースユーザー名とパスワード変数を作成します。

Common Patterns

詳細な説明

データベース認証情報変数

データベース認証情報はTerraformのsensitive変数の最も一般的な例です。プラン出力、ステートファイル、ログでの漏洩を防ぐために特別な処理が必要です。

変数定義

variable "db_username" {
  type        = string
  description = "Master username for the database"

  validation {
    condition     = length(var.db_username) >= 3 && length(var.db_username) <= 63
    error_message = "Database username must be between 3 and 63 characters."
  }
}

variable "db_password" {
  type        = string
  description = "Master password for the database"
  sensitive   = true

  validation {
    condition     = length(var.db_password) >= 8
    error_message = "Database password must be at least 8 characters."
  }
}

主な設計判断

  1. パスワードにデフォルトなし: sensitive値にはコード内でデフォルトを設定すべきではない
  2. ユーザー名にもデフォルトなし: 汎用的なadmin名の偶発的な使用を回避
  3. パスワードに**sensitive = true**: CLI出力から値を削除
  4. 長さバリデーション: AWSが拒否する前に明らかに間違った値を検出

安全な値の提供方法

オプション1: tfvarsファイル(gitignore済み)

# secrets.tfvars(gitにコミットしない)
db_username = "app_admin"
db_password = "SuperSecretP@ssw0rd!"

オプション2: 環境変数

export TF_VAR_db_username="app_admin"
export TF_VAR_db_password="SuperSecretP@ssw0rd!"

ユースケース

認証情報を安全に渡し、ソースにハードコードせず、Terraform CLI出力から削除する必要があるRDS、Aurora、またはデータベースモジュール。

試してみる — Terraform Variable Generator

フルツールを開く