You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于.tfvars.json变量实现多区域RDS的条件化加密配置?

多区域RDS实例加密场景的条件配置实现

核心需求

需要实现两种配置场景的自动适配:

  • 当storage_encrypted = true时,必须使用指定的多区域KMS密钥ID创建RDS集群
  • 当storage_encrypted = false时,使用AWS默认KMS密钥创建RDS集群

步骤1:添加变量合法性校验

修改variables.tf,增加变量验证规则,确保启用加密时kms_key_id不为空且格式合法:

variable "storage_encrypted" {
  type        = bool
  default     = false
}

variable "kms_key_id" {
  type        = string
  default     = null
  validation {
    condition     = var.storage_encrypted ? (var.kms_key_id != null && can(regex("^arn:aws:kms:[a-z0-9-]+:[0-9]+:key/[a-f0-9-]+$", var.kms_key_id))) : true
    error_message = "当启用存储加密(storage_encrypted=true)时,必须提供合法的多区域KMS密钥ARN。"
  }
}

步骤2:调整RDS模块的条件配置

在secondary区域的aurora.tf模块中,根据storage_encrypted的值动态传递kms_key_id参数:

module "aurora_secondary" {
  source  = "terraform-aws-modules/rds-aurora/aws"
  version = "7.3.0"

  apply_immediately   = var.apply_immediately
  create_cluster = var.create_secondary_cluster
  providers = { aws = aws.secondary }

  is_primary_cluster = false  
  source_region             = var.primary_region

  name           = var.name

  engine                    = var.create_global_cluster ? aws_rds_global_cluster.this.*.engine[0] : null
  engine_version            = var.create_global_cluster ? aws_rds_global_cluster.this.*.engine_version[0] : null
  global_cluster_identifier = var.create_global_cluster ? aws_rds_global_cluster.this.*.id[0] : null
  
  # 条件配置存储加密与KMS密钥
  storage_encrypted = var.storage_encrypted
  kms_key_id        = var.storage_encrypted ? var.kms_key_id : null

  create_random_password              = var.create_random_password

  instance_class = var.instance_class
  instances = var.secondary_instances


  vpc_id                 = var.vpc_id_us_east_2
  create_db_subnet_group = var.create_secondary_db_subnet_group
  subnets  = var.private_subnets_us_east_2
  create_security_group  = var.create_secondary_security_group
  allowed_cidr_blocks    = var.allowed_cidr_blocks

  
  create_monitoring_role                = var.create_monitoring_role
  monitoring_interval                   = var.monitoring_interval
  monitoring_role_arn                   = var.monitoring_role_arn

  backup_retention_period = var.backup_retention_period
  preferred_backup_window = var.preferred_backup_window
  preferred_maintenance_window = var.preferred_maintenance_window

  depends_on = [
    module.aurora
  ]

  tags = local.cluster_tags
}

步骤3:两种场景的验证方式

场景1:启用存储加密(storage_encrypted=true)

使用vars.tfvars.json中的配置:

{
  "storage_encrypted" : true,   
  "kms_key_id" : "arn:aws:kms:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

执行terraform plan,检查输出中RDS集群的kms_key_id是否为指定的ARN;执行terraform apply后,在AWS控制台的RDS集群详情中确认加密密钥为指定的多区域KMS密钥。

场景2:关闭存储加密(storage_encrypted=false)

修改vars.tfvars.json(或直接使用变量默认值):

{
  "storage_encrypted" : false,
  "kms_key_id" : null
}

执行terraform plan,确认kms_key_id参数未被传递;执行terraform apply后,在AWS控制台的RDS集群详情中确认使用AWS默认的RDS加密密钥。

内容的提问来源于stack exchange,提问作者Anushka Fernando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:25:29