仅将 AWS Aurora Engine 版本指定为 Terraform 中的主版本号

Pau*_*ldo 7 amazon-web-services terraform amazon-aurora terraform-provider-aws

我有一些创建 AWS Aurora RDS 集群的 Terraform 代码:

resource "aws_rds_cluster" "default" {
  provider                = aws.customer
  cluster_identifier      = "my_id"
  engine                  = "aurora-mysql"
  engine_version          = "5.7.mysql_aurora.2.03.2"
  database_name           = var.db_name
  port                    = var.db_port
  master_username         = var.db_master_username
  master_password         = random_password.sqlpassword.result
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
  db_subnet_group_name    = aws_db_subnet_group.default.name
  vpc_security_group_ids  = [aws_security_group.rds.id]
  deletion_protection     = true
}
Run Code Online (Sandbox Code Playgroud)

这段代码已经工作正常有一段时间了,直到最近因此terraform apply错误而失败Error: Failed to modify RDS Cluster (my_id): InvalidParameterCombination: Cannot upgrade aurora-mysql from 5.7.mysql_aurora.2.07.2 to 5.7.mysql_aurora.2.03.2

长话短说,AWS 在维护时段升级了次要版本号,并拒绝允许 Terraform 降级数据库。我同意 AWS 这样做,但我不想每次发生这种情况时都必须提交新的 Terraform 代码。

engine version我尝试在by using中不太具体engine_version="5.7.mysql_aurora.2",但失败了,如下所示: InvalidParameterCombination: Cannot find upgrade target from 5.7.mysql_aurora.2.07.2 with requested version 5.7.mysql_aurora.2.

允许 RDS 次要版本随 AWS 执行的修改而浮动的适当 Terraform 方法是什么?

小智 3

您可以ignore_changes向资源添加生命周期块。

resource "aws_rds_cluster" "default" {
  provider                = aws.customer
  cluster_identifier      = "my_id"
  engine                  = "aurora-mysql"
  engine_version          = "5.7.mysql_aurora.2.03.2"
  database_name           = var.db_name
  port                    = var.db_port
  master_username         = var.db_master_username
  master_password         = random_password.sqlpassword.result
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
  db_subnet_group_name    = aws_db_subnet_group.default.name
  vpc_security_group_ids  = [aws_security_group.rds.id]
  deletion_protection     = true

  lifecycle {
    ignore_changes = [
      engine_version,
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里阅读更多相关信息:https://www.terraform.io/docs/language/meta-arguments/lifecycle.html