首页 > 解决方案 > 如何使用 Terraform 自动切换到 AWS 的 RDS 中的新参数组?

问题描述

为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 进行自动化?如果将来要添加新的参数组,最佳做法是什么?

标签: amazon-web-servicesterraformamazon-rds

解决方案


这是 TF 的一个长期存在但尚未解决的问题,已在 GitHub 上报告:

您现在必须手动执行此操作。


推荐阅读