Terraform创建AWS ElastiCache全局复制组副集群自动故障转移配置异常
问题根因
- 当副区域ElastiCache集群加入全局复制组后,AWS会自动将
automatic_failover_enabled参数设置为true,该参数由全局复制组统一管控,不支持手动修改 - 你使用的3.x版本AWS Provider中,
aws_elasticache_replication_group资源的global_replication_group_id和automatic_failover_enabled被标记为互斥参数,不能显式同时配置 - 副区域资源未显式设置
automatic_failover_enabled时,Terraform会默认该参数值为false,和AWS侧实际的true值产生差异,每次apply都会尝试回改,触发全局集群不允许修改的报错
解决方案
直接修改副区域的aws_elasticache_replication_group.redis_cache_cluster_sec资源,添加lifecycle.ignore_changes规则,忽略该参数的差异即可:
resource "aws_elasticache_replication_group" "redis_cache_cluster_sec" { replication_group_id = "${local.cluster_prefix}-redis" replication_group_description = "Provisioned using Terraform" global_replication_group_id = "${local.globalstore_prefix}-global" auth_token = var.auth_token subnet_group_name = aws_elasticache_subnet_group.subnet_group.name security_group_ids = [aws_security_group.redis_sg.id] # 新增lifecycle块忽略全局复制组统一管控的参数 lifecycle { ignore_changes = [ automatic_failover_enabled, multi_az_enabled, number_cache_clusters, node_type, engine_version ] } }
加入全局复制组后,副集群的规格、副本数、多AZ、自动故障切换、引擎版本等参数均由主区域集群同步,无需在副区域配置中定义,直接通过ignore_changes忽略这些参数的状态差异,即可解决Terraform反复尝试修改参数触发的报错。
验证操作
修改代码后执行terraform plan,确认不会再出现修改automatic_failover_enabled的变更计划,执行terraform apply即可正常完成部署。
内容的提问来源于stack exchange,提问作者cnu
相关产品推荐
相关产品推荐

