简体   繁体   English

使用Terraform计数但使用不同的标签创建多个RDS实例

[英]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.

相关问题 使用 Terraform 从快照创建 RDS 实例 - Creating RDS Instances from Snapshot Using Terraform 使用Terraform从最近的快照创建RDS实例 - Creating RDS instances from not the recent snapshot using Terraform 使用 (count, for_each) Terraform 创建多个 ec2 aws 实例并附加具有特定 IP 的多个网络接口 - Creating multiple ec2 aws instances and attaching multiple networking interfaces with specific IP using (count, for_each) Terraform 使用每个 terraform 在单独的 AZ 中创建不同的 EC2 实例 - Creating different EC2 instances in separate AZs using for each terraform 使用 terraform 创建多个实例和一个网络接口时出错 - Error when creating multiple instances and one network interface using terraform 使用 Terraform 在多个子网中创建 EC2 实例 - Creating EC2 instances in multiple subnets with Terraform using for each 使用Terraform创建SQL Server RDS实例 - Creating SQL server RDS instance using Terraform Terraform - AWS - 创建多个实例 - 不同的 AZ(其中实例数大于 AZ 列表长度) - Terraform - AWS - create multiple instances - different AZ (where instance count is greater than AZ list length) 使用计数在 terraform 中定义多个 ec2 实例并将它们注册到负载均衡器 - Defining multiple ec2 instances in terraform using count and registering them with a load balancer 使用Terraform为RDS创建Route53条目 - Creating a Route53 entry for RDS using Terraform
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM