我对Terraform很陌生。我正在使用Terraform编写AWS脚本。在执行Terraform销毁时,我得到了一个错误。Terraform脚本是
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“键。
发布于 2020-07-20 11:21:28
解决方案:
在尝试对RDS实例执行destroy时(不是在Aurora下),我遇到了同样的问题,但原则是相同的。
以下是我为解决这个问题所采取的几个步骤:
skip_final_snapshot更改为true,如果存在,则删除final_snapshot_identifier
(见下文评论1和2)。backup_window (在Aurora下,它可能称为preferred_backup_window)。backup_retention_period更改为0。apply_immediately设置为true (参见下面的注释3)。terraform apply并检查要影响的更改(参见下面注释4的提示)。terraform destroy了,不应该出现任何错误(在我的示例中,我将deletion_protection设置为true并添加以删除它)。意见1-了解相关领域的目的
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_snapshot是true,final_snapshot_identifier仍然是指定的。
(*)不要与snapshot_identifier字段混淆。
注释2-是什么导致了这个错误?
对于那些想了解这里发生了什么的人来说,在提到的公开发行中有一个很好的线程,其中一个名为@caiges的贡献者给出了一个很好的解释:
首先,
skip_final_snapshot默认为False,这也需要设置final_snapshot_identifier,但情况并非如此:应用创建/更新,状态更新(skip_final_snapshot是False,final_snapshot_identifier是null)。 这导致销毁操作失败,这是它的验证阶段。 这是可以解决的,但我真的没有一个伟大的故事,谁已经有前置状态。 一种可能是,如果标识符为null,删除操作将忽略skip_final_shopshot。 另一种可能是,如果将final_snapshot_identifier设置为或默认为False,则可以将skip_final_snapshot默认为随机设置。 我认为,出于数据安全的原因,如果skip_final_snapshot为null,忽略final_snapshot_identifier是个坏主意,最好是随机化标识符。
注释3-确保我们的更改立即生效:
关于apply_immediately的Terraform博士注记
注意:在服务器重新启动时,使用apply_immediately可能会导致短暂的停机时间。有关更多信息,请参见RDS维护方面的AWS文档。
评论4(奖金)-节省一些时间:
运行terraform plan时,请确保Terraform的执行计划下的相关字段中出现了~ (更新就地标记)--在下面的示例中,您可以看到将应用2个更改:
~ 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 = ...
}这可能听起来微不足道,但在这种错误的情况下,当您试图理解为什么某些更新没有发生时,它可以节省大量的调试时间。
发布于 2018-08-18 17:20:14
这是一个已知的bug,在AWS的Terraform提供程序的当前版本中仍处于打开状态:
https://github.com/terraform-providers/terraform-provider-aws/issues/2588
简而言之,它忽略了skip_final_snapshot参数。
发布于 2021-03-07 18:29:29
在我的例子中,我必须手动编辑.tfstate文件,并将"skip_final_snapshot“设置为true。然后起作用了。
https://stackoverflow.com/questions/50930470
复制相似问题