[英]Creating multiple RDS instances using Terraform count but with different Tags
I have hit upon this requirement of creating multiple RDS instances with all db properties remaining same. 我满足了创建多个RDS实例且所有db属性保持不变的要求。 Only that the tags be different. 只是标签不同。 I'm using Terraform for my deployments and count really helps me in these situations. 我正在使用Terraform进行部署,在这种情况下,计数确实可以为我提供帮助。 But is there a way where my RDS Instances are created using count but Tags should be different. 但是有一种方法可以使用count创建我的RDS实例,但是标签应该不同。
Code: 码:
resource "aws_db_instance" "rds-mysql" {
count = "${var.RDS_INSTANCE["deploy"] == "true" ? 1 : 0}"
allocated_storage = "${var.RDS_INSTANCE[format("allocated_storage.%s",var.ENVIRONMENT)]}"
auto_minor_version_upgrade = true
backup_retention_period = "${var.RDS_INSTANCE[format("backup_retention_period.%s",var.ENVIRONMENT)]}"
db_subnet_group_name = "${aws_db_subnet_group.rds-mysql.id}"
engine = "${var.RDS_INSTANCE["engine"]}"
final_snapshot_identifier = "${format("%s-%s-%s-rds-mysql-final-snapshot",var.PRODUCT,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
engine_version = "${var.RDS_INSTANCE["engine_version"]}"
instance_class = "${var.RDS_INSTANCE[format("instance_class.%s",var.ENVIRONMENT)]}"
multi_az = "${var.RDS_INSTANCE[format("multi_az.%s",var.ENVIRONMENT)]}"
parameter_group_name = "${aws_db_parameter_group.rds-mysql.id}"
password = "${var.RDS_MASTER_USER_PASSWORD}"
skip_final_snapshot = "${var.RDS_INSTANCE[format("skip_final_snapshot.%s",var.ENVIRONMENT)]}"
storage_encrypted = "${var.RDS_INSTANCE[format("storage_encrypted.%s",var.ENVIRONMENT)]}"
storage_type = "gp2"
username = "${var.RDS_INSTANCE["username"]}"
vpc_security_group_ids = ["${var.SG_RDS_MYSQL_ID}"]
tags {
Name = "${format("%s-%s-%s-rds-mysql",var.PRODUCT,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
Project = "${format("%s-share",var.PRODUCT)}"
Environment = "${var.ENVIRONMENT}"
}
#Resource lifecycle
lifecycle {
ignore_changes = ["allocated_storage","instance_class"]
}
}
Supposingly I deploy 2 RDS and below is what I intend my tags to look like: 假设我部署了2个RDS,下面是我希望标签显示的样子:
#RDS 1 #RDS 1
tags {
Name = "${format("%s-%s-%s-rds-mysql",var.PRODUCT1,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
Project = "${format("%s-share",var.PRODUCT1)}"
Environment = "${var.ENVIRONMENT}"
}
#RDS2 #RDS2
tags {
Name = "${format("%s-%s-%s-rds-mysql",var.PRODUCT2,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
Project = "${format("%s-share",var.PRODUCT2)}"
Environment = "${var.ENVIRONMENT}"
}
Please confirm if there's any way this can be achieved. 请确认是否有任何方法可以实现。
Above code will make only one RDS or nothing. 上面的代码将仅生成一个RDS或不生成任何RDS。 You cannot create more then 2 RDS with it. 您不能使用它创建2个以上的RDS。
count = "${var.RDS_INSTANCE["deploy"] == "true" ? 1 : 0}"
And I think it is not good idea to create muliple RDS with "count" for different purpose even the spec requirements are same. 而且我认为,即使规格要求相同,创建具有“ count”目的的多个RDS也不是一个好主意。 For example, there are 4 RDS and if you want to scale up one of those RDS. 例如,有4个RDS,并且如果您想扩展这些RDS之一。 It is hard to manage it. 很难管理。 It is better to copy the code and paste it multiple times. 最好将代码复制并粘贴多次。 Or you can create module for it. 或者,您可以为其创建模块。
Anyway, you can create different tags for each RDS like below. 无论如何,您可以为每个RDS创建不同的标签,如下所示。 Make list variable (var.PRODUCT) and use "element" instead of var.PRODUCT1 or var.PRODUCT2 使列表变量(var.PRODUCT)并使用“元素”代替var.PRODUCT1或var.PRODUCT2
variable "PRODUCT" {
default = [
"test1",
"test2",
"test3",
]
}
...
tags {
Name = "${format("%s-%s-%s-rds-mysql", element(var.PRODUCT, count.index) ,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
Project = "${format("%s-share", element(var.PRODUCT, count.index))}"
...
}
If it is hard to create new list variable, then you can create local variable for it. 如果很难创建新的列表变量,则可以为其创建局部变量。
locals {
PRODUCT = ["${var.PRODUCT1}", "${var.PRODUCT2}", "${var.PRODUCT3}"]
}
...
tags {
Name = "${format("%s-%s-%s-rds-mysql", element(local.PRODUCT, count.index) ,var.ENVIRONMENT,var.REGION_SHORT_NAME)}"
Project = "${format("%s-share", element(local.PRODUCT, count.index))}"
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.