在Terraform中添加Redis集群分片而不丢失状态

45次阅读
没有评论

问题描述

使用Terraform设置了一个Redis集群,现在希望在不丢失状态的情况下,向集群添加分片。目前在使用Terraform更新分片数量时,会导致Terraform创建新资源而不是执行原地更新。用户想知道是否有方法在Terraform中执行原地更新,或者是否可以使用Terraform在不丢失数据库状态的情况下添加分片。用户还尝试使用terraform refresh命令来同步状态,但是terraform apply仍然认为资源需要更改。

解决方案

请注意以下操作可能涉及版本差异及风险。建议在操作前做好备份并仔细阅读官方文档。

使用数据源来获取实际节点数量

您可以在创建aws_elasticache_replication_group资源时,使用数据源aws_elasticache_cluster来检索实际节点数量。这样您就不需要使用ignore_changes来忽略更改。

下面是在Terraform中执行此操作的步骤:

  1. 在Terraform配置文件中,定义aws_elasticache_replication_group资源,与您目前的配置类似。
  2. 添加一个数据源定义,以检索实际节点数量。这将帮助Terraform了解当前部署的节点数量。
  3. 在资源定义中,使用获取的节点数量作为分片数目。

以下是示例代码:

# 定义aws_elasticache_replication_group资源
resource "aws_elasticache_replication_group" "instance" {
  replication_group_id         = "test"
  # 其他配置项
}

# 定义aws_elasticache_cluster数据源
data "aws_elasticache_cluster" "existing_cluster" {
  cluster_id = aws_elasticache_replication_group.instance.primary_endpoint_address
}

# 使用数据源中的节点数量作为分片数目
resource "aws_elasticache_replication_group" "instance" {
  replication_group_id = "test"
  # 其他配置项

  cluster_mode {
    num_node_groups = data.aws_elasticache_cluster.existing_cluster.num_cache_nodes
  }
}

通过上述步骤,您可以使用数据源中实际节点数量作为新分片的数量,从而避免在Terraform中创建新资源。

Terraform中的原地更新

此部分基于最佳答案的用户投票。但请根据您的情况自行验证。

幸运的是,Terraform现在支持对分片数量进行原地更新,不再会导致问题。根据更新后的Terraform文档,您可以看到以下描述:

num_node_groups 指定此Redis复制组的节点组(分片)数量。更改此数字将在其他设置修改之前触发在线调整操作。

在此之前的文档中,描述为:

更改此数字将强制创建新资源。

这意味着您现在可以安全地使用Terraform在不丢失数据库状态的情况下,更新分片的数量。不再需要手动更改或使用AWS UI。

总结

通过使用Terraform的数据源来检索实际节点数量,您可以避免创建新资源,从而保留数据库状态。此外,Terraform现在已经支持对分片数量进行原地更新,您可以放心地使用Terraform来管理Redis集群的分片配置,无需担心丢失状态。

请注意,根据您的实际情况和环境,建议您在执行任何更改之前,仔细查阅官方文档并在非生产环境中进行测试。

正文完