如何使用 Terraform 自动切换到 AWS 的 RDS 中的新参数组?

How to automatic switch to new parameter group in AWS' RDS with Terraform?

为RDS设置一个新的参数组,它的计划是

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
~ update in-place
- destroy

Terraform will perform the following actions:

  # aws_db_parameter_group.this will be destroyed
- resource "aws_db_parameter_group" "this" {
      - arn         = "arn:aws:rds:us-east-1:12301923210921:pg:db-aurora-parameter-group" -> null
      - description = "Parameter group for db Aurora Postgres instance" -> null
      - family      = "aurora-postgresql12" -> null
      - id          = "db-aurora-parameter-group" -> null
      - name        = "db-aurora-parameter-group" -> null
      - tags        = {
          - "Application" = "myapp db"
          - "Project"     = "myproj"
          - "Terraform"   = "true"
        } -> null
    }

  # aws_rds_cluster.this will be updated in-place
~ resource "aws_rds_cluster" "this" {
      ~ db_cluster_parameter_group_name     = "db-aurora-cluster-parameter-group" -> (known after apply)
        id                                  = "db"
        tags                                = {
            "Application" = "myapp db"
            "Project"     = "myproj"
            "Terraform"   = "true"
        }
        # (31 unchanged attributes hidden)
    }

  # aws_rds_cluster_instance.this will be updated in-place
~ resource "aws_rds_cluster_instance" "this" {
      ~ db_parameter_group_name         = "db-aurora-parameter-group" -> (known after apply)
        id                              = "instance001"
        tags                            = {
            "Application" = "myapp db"
            "Project"     = "myproj"
            "Terraform"   = "true"
        }
        # (25 unchanged attributes hidden)
    }

  # aws_rds_cluster_parameter_group.this will be destroyed
- resource "aws_rds_cluster_parameter_group" "this" {
      - arn         = "arn:aws:rds:us-east-1:12301923210921:cluster-pg:db-aurora-cluster-parameter-group" -> null
      - description = "Cluster parameter group for db Aurora Postgres instance" -> null
      - family      = "aurora-postgresql12" -> null
      - id          = "db-aurora-cluster-parameter-group" -> null
      - name        = "db-aurora-cluster-parameter-group" -> null
      - tags        = {
          - "Application" = "myapp db"
          - "Project"     = "myproj"
          - "Terraform"   = "true"
        } -> null

      - parameter {
          - apply_method = "immediate" -> null
          - name         = "log_lock_waits" -> null
          - value        = "1" -> null
        }
      - parameter {
          - apply_method = "immediate" -> null
          - name         = "log_temp_files" -> null
          - value        = "0" -> null
        }
      - parameter {
          - apply_method = "immediate" -> null
          - name         = "pgaudit.log_catalog" -> null
          - value        = "0" -> null
        }
    }

  # module.aws_db_parameter_group.aws_db_parameter_group.this will be created
+ resource "aws_db_parameter_group" "this" {
      + arn         = (known after apply)
      + description = "Parameter group for db Aurora Postgres instance"
      + family      = "aurora-postgresql12"
      + id          = (known after apply)
      + name        = (known after apply)
      + name_prefix = "db-"
      + tags        = {
          + "Application" = "myapp db"
          + "Name"        = "db"
          + "Project"     = "myproj"
          + "Terraform"   = "true"
        }
    }

  # module.aws_db_parameter_group.aws_rds_cluster_parameter_group.this will be created
+ resource "aws_rds_cluster_parameter_group" "this" {
      + arn         = (known after apply)
      + description = "Cluster parameter group for db Aurora Postgres instance"
      + family      = "aurora-postgresql12"
      + id          = (known after apply)
      + name        = (known after apply)
      + name_prefix = "db-"
      + tags        = {
          + "Application" = "myapp db"
          + "Name"        = "db"
          + "Project"     = "myproj"
          + "Terraform"   = "true"
        }

      + parameter {
          + apply_method = "immediate"
          + name         = "log_lock_waits"
          + value        = "1"
        }
      + parameter {
          + apply_method = "immediate"
          + name         = "log_temp_files"
          + value        = "0"
        }
      + parameter {
          + apply_method = "pending-reboot"
          + name         = "pgaudit.log_catalog"
          + value        = "0"
        }
    }

Plan: 2 to add, 2 to change, 2 to destroy.

通过terraform应用后,它会删除旧的参数组,但由于AWS规则不能。 如果手动切换到AWS中的新组,是可以的。

有没有办法使用 terraform 进行自动化?如果以后要添加新的参数组,最佳做法是什么?

这是一个持续时间长但 未解决的 TF 问题,已在 GitHub:

上报告

您现在必须手动完成。