【问题标题】:Redis | Terraform | Creates every time freshly after execution of terraform apply雷迪斯 |地形 |每次执行 terraform apply 后都会重新创建
【发布时间】:2020-09-09 15:53:42
【问题描述】:

我正在使用 Terraform 在 AWS 中创建 Redis。但是当我第一次执行terraform apply 命令时,它会毫无问题地创建。但是如果我在 TF 代码下面重新运行 Terraform apply 会破坏 Redis 并开始重新创建它,它应该告诉我它已经存在开始关注其他新添加的资源。 这是 Redis 的预期行为吗?

在问题中添加地形计划:

-/+ resource "aws_elasticache_replication_group" "redis" {
        apply_immediately              = true
        at_rest_encryption_enabled     = true
        auto_minor_version_upgrade     = false
        automatic_failover_enabled     = true
      + configuration_endpoint_address = (known after apply)
        engine                         = "redis"
        engine_version                 = "5.0.4"
      ~ id                             = "dev-af-redis" -> (known after apply)
        maintenance_window             = "sun:06:00-sun:07:00"
      ~ member_clusters                = [
          - "ca-cng-dev-af-redis-001",
          - "ca-cng-dev-af-redis-002",
        ] -> (known after apply)
        node_type                      = "cache.t2.medium"
      ~ number_cache_clusters          = 2 -> (known after apply)
        parameter_group_name           = "default.redis5.0"
        port                           = 6379
      ~ primary_endpoint_address       = "master.dev-af-redis.qxyj8a.euc1.cache.amazonaws.com" -> (known after apply)
        replication_group_description  = "Airflow Cluster"
        replication_group_id           = "dev-af-redis"
        security_group_ids             = [
            "sg-094175ad3062da04d",
        ]
      ~ security_group_names           = [] -> (known after apply)
      - snapshot_retention_limit       = 0 -> null
      ~ snapshot_window                = "02:30-03:30" -> (known after apply)
        subnet_group_name              = "dev-subnet-group-airflow"
        tags                           = {
            "Application"    = "project"
            "BusinessUnit"   = "subproject"
            "Classification" = "private"
            "Environment"    = "development"
            "Name"           = "dev-airflow-redis"
            "TechnicalOwner" = "ops"
            "Tier"           = "orchestration"
        }
        transit_encryption_enabled     = true

      + cluster_mode {
          + num_node_groups         = 1
          + replicas_per_node_group = 1 # forces replacement
        }
    }

Plan: 1 to add, 0 to change, 1 to destroy.

用于创建 Redis 的 TF 代码:-

resource "aws_elasticache_replication_group" "cng_redis" {
  replication_group_description = "Cluster"
  replication_group_id          = "dev-af-redis"
  engine                        = "redis"
  engine_version                = "5.0.4"
  node_type                     = "cache.t2.medium "
  port                          = 6379
  subnet_group_name             = "dev-subnet-group-airflow"
  security_group_ids            = ["${aws_security_group.airflow_sg.id}"]
  parameter_group_name          = "default.redis5.0"
  at_rest_encryption_enabled    = true
  transit_encryption_enabled    = true
  maintenance_window            = "sun:06:00-sun:07:00"
  auto_minor_version_upgrade    = false
  apply_immediately             = true

  automatic_failover_enabled = true

  cluster_mode {
    num_node_groups         = "1"
    replicas_per_node_group = "1"
  }

  tags = merge(
    var.common_tags,
    map("Classification", "private"),
    map("Name", "airflow-redis")
  )
}

【问题讨论】:

  • 您能否编辑您的问题以在计划输出中显示它想要重新创建事物的位置?
  • @ydaetskcoR 在我的问题中添加了 terraform 计划
  • 这是最初的计划,还是销毁/重建的计划?我本来希望看到 -/+ 进行销毁/重新创建?
  • 该计划还提到了它在一个模块中的事实 - 也许其他高层正在发生变化,迫使这种情况发生?
  • 那个计划和你之前展示的很不一样。看起来您只是从在禁用集群模式的复制组中使用 number_cache_clusters 到使用启用集群模式的复制组。这预计会导致重建,因为您不能以这种方式修改现有的复制组。

标签: redis terraform


【解决方案1】:

这是一个解决方案(“这不是错误,这是一个功能”案例,我想 ;)):https://github.com/terraform-providers/terraform-provider-aws/issues/4817#issuecomment-463993424

我测试了它,它可以工作。
您必须添加参数组并将cluster-enabled 设置为yes。
我使用的是 Redis 5.0.5,所以我在aws_elasticache_replication_group 中添加了:

resource "aws_elasticache_replication_group" "elc-rep-group" {
  ...
  automatic_failover_enabled = true #this is required, when cluster-enabled parameter is on
  parameter_group_name = "default.redis5.0.cluster.on"
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2017-03-20
    • 1970-01-01
    • 2021-08-28
    • 2013-04-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多