Terraform aws_elasticache_cluster:更改节点类型时,如何强制创建新的Redis?

时间:2018-12-04 20:30:13

标签: redis terraform amazon-elasticache terraform-provider-aws

我有一个terraform模块,它创建aws elastiache集群并使用redis的端点地址更新私有dns条目。使用生命周期(在销毁之前创建),一切正常。问题是,如果我更改node_type,将导致停机时间(它们将修改节点而不是创建一个新节点)。

因此,从那里,我向集群添加了一个随机名称,但是现在,我遇到了另一个问题。 Terraform将首先创建一个新群集,然后销毁旧群集,但不会更新de DNS。但是,如果我在之后重新运行Terraform Apply,它将看到差异,并更新DNS。我认为问题与DNS条目有关:aws_elasticache_cluster.camshub-redis.cache_nodes.0.address。

################
# data sources #
################

data "aws_vpc" "selected" {
  tags {
    Name = "VPC_${var.env}"
  }
}

data "aws_subnet" "sb_private_az_a" {
  vpc_id = "${data.aws_vpc.selected.id}"

  tags {
    Name = "${var.env}_Private_Subnet_${var.az_a}"
  }
}

data "aws_subnet" "sb_private_az_b" {
  vpc_id = "${data.aws_vpc.selected.id}"

  tags {
    Name = "${var.env}_Private_Subnet_${var.az_b}"
  }
}

data "aws_route53_zone" "zone" {
  name         = "${var.zone_name}"
  private_zone = true
  vpc_id       = "${data.aws_vpc.selected.id}"
}

################
# Elasticache  #
################


resource "random_id" "server" {
  byte_length = 4
}


resource "aws_elasticache_cluster" "camshub-redis" {
  cluster_id           = "${var.env}-redis-${random_id.server.hex}"
  engine               = "redis"
  node_type            = "${var.node_type}"
  num_cache_nodes      = 1
  parameter_group_name = "default.redis4.0"
  engine_version       = "4.0.10"
  port                 = 6379
  subnet_group_name    = "${aws_elasticache_subnet_group.elasticache_subnet_group.name}"
  security_group_ids   = ["${aws_security_group.sg-elasticache-redis.id}"]

  lifecycle {
    create_before_destroy = true
  }

  depends_on = [
    "aws_elasticache_subnet_group.elasticache_subnet_group",
  ]
}


resource "aws_elasticache_subnet_group" "elasticache_subnet_group" {
  name       = "${var.env}-elasticache-subnet-group"
  subnet_ids = ["${data.aws_subnet.sb_private_az_a.id}", "${data.aws_subnet.sb_private_az_b.id}"]
}

resource "aws_security_group" "sg-elasticache-redis" {
  name        = "${var.env}-sg-elasticache-redis"
  description = "Allow HTTP, HTTPS, and SSH"
  vpc_id      = "${data.aws_vpc.selected.id}"

  // Redis
  ingress {
    from_port   = 6379
    to_port     = 6379
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

################
# Route53      #
################

resource "aws_route53_record" "route53" {
  zone_id = "${data.aws_route53_zone.zone.zone_id}"
  name    = "${var.sub_domain}"
  type    = "${var.type}"
  ttl     = "${var.ttl}"

  records = [
    "${aws_elasticache_cluster.camshub-redis.cache_nodes.0.address}",
  ]

    depends_on = [
    "aws_elasticache_cluster.camshub-redis",
  ]
}

0 个答案:

没有答案