如何基于.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
相关产品推荐
相关产品推荐

