【发布时间】:2017-11-11 21:09:06
【问题描述】:
目前,我们正在使用 Terraform 为我们的应用程序使用蓝/绿部署模型。
我们的 TF 文件有蓝色和绿色的资源,如下所示 -
resource "aws_instance" "green_node" {
count = "${var.node_count * var.keep_green * var.build}"
lifecycle = {
create_before_destroy = true
}
ami = "${var.green_ami_id}"
instance_type = "${lookup(var.instance_type,lower(var.env))}"
security_groups = "${split(",", lookup(var.security_groups, format("%s-%s", lower(var.env),var.region)))}"
subnet_id = "${element(split(",", lookup(var.subnets, format("%s-%s", lower(var.env),var.region))), count.index)}"
iam_instance_profile = "${var.iam_role}"
key_name = "${var.key_name}"
associate_public_ip_address = "false"
tags {
Name = "node-green-${var.env}-${count.index + 1}"
}
user_data = "${data.template_cloudinit_config.green_node.rendered}"
}
resource "aws_instance" "blue_node" {
count = "${var.node_count * var.keep_blue * var.build}"
lifecycle = {
create_before_destroy = true
}
ami = "${var.blue_ami_id}"
instance_type = "${lookup(var.instance_type,lower(var.env))}"
security_groups = "${split(",", lookup(var.security_groups, format("%s-%s", lower(var.env),var.region)))}"
subnet_id = "${element(split(",", lookup(var.subnets, format("%s-%s", lower(var.env),var.region))), count.index)}"
iam_instance_profile = "${var.iam_role}"
key_name = "${var.key_name}"
associate_public_ip_address = "false"
tags {
Name = "node-blue-${var.env}-${count.index + 1}"
}
user_data = "${data.template_cloudinit_config.blue_node.rendered}"
}
我的问题 - 有没有办法在不更新蓝色资源的情况下更新绿色资源,反之亦然Without Using Targeted Plan。例如。如果我们更新安全组(var.security_groups) 这是一个公共变量,那么蓝色和绿色都会发生更新,我将不得不做一个有针对性的计划(seen below)以避免蓝色资源与新安全组的更新 -
terraform plan -out=green.plan -target=<green_resource_name>
【问题讨论】:
-
你想如何调用 terraform?我不认为你可以在每次运行时自动在绿色和蓝色之间切换,如果这就是你的要求的话。
-
如果我想更新绿色,我目前正在制定一个有针对性的计划来停止蓝色资源的更新。我想知道是否有更好的方法来做到这一点。
标签: digital-ocean terraform blue-green-deployment