ujj*_*arg 10 amazon-web-services amazon-rds terraform terraform-provider-aws
我是 Terraform 的新手。我正在使用 Terraform 编写 AWS 脚本。执行Terraform Destroy时出现错误。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
}
Run Code Online (Sandbox Code Playgroud)
Terraform Destroy抛出错误“aws_rds_cluster.aurora-cluster-ci:需要最终快照时需要 RDS Cluster FinalSnapshotIdentifier”
我的脚本中有“final_snapshot_identifier”键。
Rtm*_*tmY 10
我在尝试destroy在 RDS 实例(不在 AWS Aurora 下)执行 a 时遇到了同样的问题,但原理是相同的。
以下是我为解决此问题而采取的几个步骤:
更改skip_final_snapshot为true并删除final_snapshot_identifier如果存在
(请参阅下面的评论 #1 和 #2)。
删除backup_window(在 AWS Aurora 下,它可能称为preferred_backup_window)。
更改backup_retention_period为0。
确保apply_immediately设置为true(请参阅下面的评论 #3)。
运行terraform apply并检查要影响的更改(请参阅下面的注释 #4 中的提示)。
现在您可以运行terraform destroy并且不会出现任何错误(在我的情况下,我将deletion_protectionset添加到true并添加以删除它)。
来自Terraform 文档:
skip_final_snapshot- (可选)确定是否在删除数据库实例之前创建最终数据库快照。如果true指定,则不创建 DBSnapshot。如果false指定,则在删除数据库实例之前使用来自 的值创建数据库快照final_snapshot_identifier。默认为false。
final_snapshot_identifier- (可选)删除此数据库实例时您的最终数据库快照的名称。如果skip_final_snapshot设置为 ,则必须提供false。
在问题skip_final_snapshot中指定的代码中,过去true和final_snapshot_identifier现在仍然被指定。
(*) 不要与snapshot_identifier字段混淆。
对于那些想要了解这里发生的事情的人,在提到的开放问题中有一个很好的线程,其中名为@caiges 的贡献者在那里给出了很好的解释:
对于初学者来说,
skip_final_snapshot默认False这也应该要求final_snapshot_identifier进行设置,但它不是那么会发生什么是创建/更新应用,更新状态这里skip_final_snapshot是False不过final_snapshot_identifier是null。
这会导致销毁操作在其验证阶段失败。这可以解决,但对于那些已经有既往状态的人来说,我真的没有什么好故事。
一种可能性是,skip_final_shopshot如果标识符为空,则删除操作会忽略。
另一个可能是默认final_snapshot_identifier为随机的,如果skip_final_snapshot设置为或默认为 False。
我认为出于数据安全的原因,忽略skip_final_snapshotiffinal_snapshot_identifier为 null 是一个坏主意,最好只是随机化一个标识符。
apply_immediately来自Terraform 文档的注释:
注意:当服务器重新启动时,使用 apply_immediately 会导致短暂的停机时间。有关更多信息,请参阅有关 RDS 维护的 AWS 文档。
运行时,terraform plan确保 ~(update in-place sign) 出现在 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 = ...
}
Run Code Online (Sandbox Code Playgroud)
这可能听起来微不足道,但在这种错误的情况下,当您尝试了解某些更新没有发生的原因时,它可以节省大量调试时间。
这是一个已知的错误,在适用于 AWS 的 Terraform 提供程序的当前版本中仍然存在:
https://github.com/terraform-providers/terraform-provider-aws/issues/2588
简而言之,它忽略了skip_final_snapshot参数。
| 归档时间: |
|
| 查看次数: |
8627 次 |
| 最近记录: |