我有一个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",
]
}