首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform错误-当需要最终快照时需要RDS群集FinalSnapshotIdentifier

Terraform错误-当需要最终快照时需要RDS群集FinalSnapshotIdentifier
EN

Stack Overflow用户
提问于 2018-06-19 14:06:41
回答 9查看 20.1K关注 0票数 24

我对Terraform很陌生。我正在使用Terraform编写AWS脚本。在执行Terraform销毁时,我得到了一个错误。Terraform脚本是

代码语言:javascript
复制
resource "aws_rds_cluster" "aurora-cluster-ci" {
  cluster_identifier        = "aurora-cluster-ci"
  engine                    = "aurora-mysql"
  availability_zones        = ["us-east-1a", "us-east-1b", "us-east-1c"]
  database_name             = "${var.rds_dbname}"
  master_username           = "${var.rds_username}"
  master_password           = "${var.rds_password}"
  backup_retention_period   = 5
  engine_version            = "5.7.16"
  preferred_backup_window   = "07:00-09:00"
  apply_immediately         = true
  final_snapshot_identifier = "ci-aurora-cluster-backup"
  skip_final_snapshot       = true
}

Terraform破坏引发一个错误“aws_ RDS _cluster.极光-集群-ci:当需要最终快照时需要使用RDS群集FinalSnapshotIdentifier”

我的脚本中有"final_snapshot_identifier“键。

EN

回答 9

Stack Overflow用户

发布于 2020-07-20 11:21:28

解决方案:

在尝试对RDS实例执行destroy时(不是在Aurora下),我遇到了同样的问题,但原则是相同的。

以下是我为解决这个问题所采取的几个步骤:

  1. skip_final_snapshot更改为true,如果存在,则删除final_snapshot_identifier (见下文评论1和2)。
  2. 删除backup_window (在Aurora下,它可能称为preferred_backup_window)。
  3. backup_retention_period更改为0
  4. 确保apply_immediately设置为true (参见下面的注释3)。
  5. 运行terraform apply并检查要影响的更改(参见下面注释4的提示)。
  6. 现在您可以运行terraform destroy了,不应该出现任何错误(在我的示例中,我将deletion_protection设置为true并添加以删除它)。

意见1-了解相关领域的目的

来自Terraform文档

skip_final_snapshot -(可选)确定是否在删除DB实例之前创建最终DB快照。如果指定了true,则不会创建DBSnapshot。如果指定了false,则在删除DB实例之前使用来自final_snapshot_identifier的值创建一个DB快照。缺省值是false

final_snapshot_identifier -(可选)删除此DB实例时的最终DB快照的名称。如果skip_final_snapshot设置为false,则必须提供。

在问题中指定的代码中,skip_final_snapshottruefinal_snapshot_identifier仍然是指定的。

(*)不要与snapshot_identifier字段混淆。

注释2-是什么导致了这个错误?

对于那些想了解这里发生了什么的人来说,在提到的公开发行中有一个很好的线程,其中一个名为@caiges的贡献者给出了一个很好的解释:

首先,skip_final_snapshot默认为False,这也需要设置final_snapshot_identifier,但情况并非如此:应用创建/更新,状态更新( skip_final_snapshotFalsefinal_snapshot_identifiernull )。 这导致销毁操作失败,这是它的验证阶段。 这是可以解决的,但我真的没有一个伟大的故事,谁已经有前置状态。 一种可能是,如果标识符为null,删除操作将忽略skip_final_shopshot。 另一种可能是,如果将final_snapshot_identifier设置为或默认为False,则可以将skip_final_snapshot默认为随机设置。 我认为,出于数据安全的原因,如果skip_final_snapshot为null,忽略final_snapshot_identifier是个坏主意,最好是随机化标识符。

注释3-确保我们的更改立即生效:

关于apply_immediatelyTerraform博士注记

注意:在服务器重新启动时,使用apply_immediately可能会导致短暂的停机时间。有关更多信息,请参见RDS维护方面的AWS文档。

评论4(奖金)-节省一些时间:

运行terraform plan时,请确保Terraform的执行计划下的相关字段中出现了~ (更新就地标记)--在下面的示例中,您可以看到将应用2个更改:

代码语言:javascript
复制
~ resource "aws_db_instance" "postgresql" {
        address                               = ...
        allocated_storage                     = 100
        allow_major_version_upgrade           = false
        .
        .
      ~ apply_immediately                     = false -> true
        .
        .
      ~ backup_retention_period               = 7 -> 0
        .
        .
        tags                                  = ...
        username                              = ...
        vpc_security_group_ids  =  ...
    }

这可能听起来微不足道,但在这种错误的情况下,当您试图理解为什么某些更新没有发生时,它可以节省大量的调试时间。

票数 27
EN

Stack Overflow用户

发布于 2018-08-18 17:20:14

这是一个已知的bug,在AWS的Terraform提供程序的当前版本中仍处于打开状态:

https://github.com/terraform-providers/terraform-provider-aws/issues/2588

简而言之,它忽略了skip_final_snapshot参数。

票数 10
EN

Stack Overflow用户

发布于 2021-03-07 18:29:29

在我的例子中,我必须手动编辑.tfstate文件,并将"skip_final_snapshot“设置为true。然后起作用了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50930470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档