[英]Creating multiple RDS instances using Terraform count but with different Tags
我滿足了創建多個RDS實例且所有db屬性保持不變的要求。 只是標簽不同。 我正在使用Terraform進行部署,在這種情況下,計數確實可以為我提供幫助。 但是有一種方法可以使用count創建我的RDS實例,但是標簽應該不同。
碼:
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"]
}
}
假設我部署了2個RDS,下面是我希望標簽顯示的樣子:
#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
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}"
}
請確認是否有任何方法可以實現。
上面的代碼將僅生成一個RDS或不生成任何RDS。 您不能使用它創建2個以上的RDS。
count = "${var.RDS_INSTANCE["deploy"] == "true" ? 1 : 0}"
而且我認為,即使規格要求相同,創建具有“ count”目的的多個RDS也不是一個好主意。 例如,有4個RDS,並且如果您想擴展這些RDS之一。 很難管理。 最好將代碼復制並粘貼多次。 或者,您可以為其創建模塊。
無論如何,您可以為每個RDS創建不同的標簽,如下所示。 使列表變量(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))}"
...
}
如果很難創建新的列表變量,則可以為其創建局部變量。
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.