>

모든 db 속성이 동일하게 남아있는 여러 RDS 인스턴스를 생성해야한다는이 요구 사항에 부딪 쳤습니다. 태그 만 달라야합니다. 내 배포에 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}"
  } 

이를 달성 할 수있는 방법이 있는지 확인하십시오.


  • 답변 # 1

    위의 코드는 하나의 RDS 만 만들거나 아무것도 만들지 않습니다. RDS를 2 개 이상 만들 수 없습니다.

     count = "${var.RDS_INSTANCE["deploy"] == "true" ? 1 : 0}"
    
    

    그리고 스펙 요구 사항이 동일하더라도 다른 목적으로 "카운트"를 갖는 다중 RDS를 만드는 것은 좋지 않다고 생각합니다. 예를 들어, 4 개의 RDS가 있으며 해당 RDS 중 하나를 확장하려는 경우. 관리하기가 어렵습니다. 코드를 복사하여 여러 번 붙여 넣는 것이 좋습니다. 또는 모듈을 만들 수도 있습니다.

    어쨌든 아래와 같이 각 RDS에 대해 서로 다른 태그를 만들 수 있습니다. 목록 변수 (var.PRODUCT)를 만들고 var.PRODUCT1 또는 var.PRODUCT2 대신 "element"를 사용하십시오

    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))}"
    ...
      }
    
    
    

관련 자료

  • 이전 jquery - AJAX 쿼리에서 반환되는 JSON 요소에 액세스하는 방법
  • 다음 자바 스크립트로 엑셀로 HTML 테이블을 내보낼 때 유니 코드 데이터 문제