Redis |地形|每次执行terraform apply后重新创建

时间:2019-08-09 10:04:59

标签: redis terraform

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

在问题中添加terraform计划:

-/+ 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")
  )
}

1 个答案:

答案 0 :(得分:0)

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

我对其进行了测试,并且可以正常工作。
您必须添加将public void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT); gl.glPushMatrix(); gl.glBegin(GL2.GL_LINES); gl.glVertex2d(-250,0); gl.glVertex2d(250,0); gl.glVertex2d(0,250); gl.glVertex2d(0,-250); gl.glVertex2d(-250,250); gl.glVertex2d(250,-250); gl.glVertex2d(250,250); gl.glVertex2d(-250,-250); gl.glEnd(); int rad = 100; drawCircle(gl,rad); drawCircle2(gl,rad/2); drawCircle3(gl,rad/2); drawCircle4(gl,rad/2); } private void drawCircle(GL2 gl, int r) { int x = r, y = 0, d = 5 - 4*r; draw8Way(gl, x, y); while (y <= x) { if (d < 0) { d = d + ((2 * y + 3) * 4); y++; } else { d += ((-2 * x + 2 * y + 5) * 4); x--; y++; } draw8Way(gl, x, y); } } void drawCircle2(GL2 gl, int r) { int x = r, y = 0, d = 5 - 4*r; draw8Way2(gl, x, y,r); while (y <= x) { if (d < 0) { d = d + ((2 * y + 3) * 4); y++; } else { d += ((-2 * x + 2 * y + 5) * 4); x--; y++; } //System.out.println("X= "+x+" Y= "+y); draw8Way2(gl, x, y,r); //break; } } void drawCircle3(GL2 gl, int r) { int x = r, y = 0, d = 5 - 4*r; draw8Way2(gl, x, y,r); while (y <= x) { if (d < 0) { d = d + ((2 * y + 3) * 4); y++; } else { d += ((-2 * x + 2 * y + 5) * 4); x--; y++; } //System.out.println("X= "+x+" Y= "+y); draw8Way2(gl, x, y,-r); } } void drawCircle4(GL2 gl, int r) { int x = r, y = 0, d = 5 - 4*r; draw8Way3(gl, x, y,r); while (y <= x) { if (d < 0) { d = d + ((2 * y + 3) * 4); y++; } else { d += ((-2 * x + 2 * y + 5) * 4); x--; y++; } //System.out.println("X= "+x+" Y= "+y); draw8Way3(gl, x, y,r); } } private void draw8Way(GL2 gl, int x, int y) { gl.glBegin(GL2.GL_POINTS); gl.glVertex2d(x, y); gl.glVertex2d(y, x); gl.glVertex2d(-x, y); gl.glVertex2d(-y, x); gl.glVertex2d(-x, -y); gl.glVertex2d(-y, -x); gl.glVertex2d(x, -y); gl.glVertex2d(y, -x); gl.glEnd(); } private void draw8Way2(GL2 gl, int x, int y, int r) { gl.glBegin(GL2.GL_POINTS); gl.glVertex2d(x, y+r); gl.glVertex2d(y+r, x); gl.glVertex2d(x+r, y); gl.glVertex2d(y, x+r); gl.glVertex2d(-x, y+r); gl.glVertex2d(-y+r, x); gl.glVertex2d(-x+r, y); gl.glVertex2d(-y, x+r); gl.glVertex2d(-x, -y+r); gl.glVertex2d(-y+r, -x); gl.glVertex2d(-x+r, -y); gl.glVertex2d(-y, -x+r); gl.glVertex2d(x, -y+r); gl.glVertex2d(y+r, -x); gl.glVertex2d(x+r, -y); gl.glVertex2d(y, -x+r); gl.glEnd(); } private void draw8Way3(GL2 gl, int x, int y, int r) { } 设置为yes的参数组。
我正在使用Redis 5.0.5,因此我在cluster-enabled上添加了:

aws_elasticache_replication_group