Amazon web services 当Terraform plan声明必须替换数据库实例时,应用Terraform plan是否安全?

Amazon web services 当Terraform plan声明必须替换数据库实例时,应用Terraform plan是否安全?,amazon-web-services,terraform,amazon-rds,Amazon Web Services,Terraform,Amazon Rds,我正在导入现有资源(AWS RDS),但terraform plan命令显示了一个摘要: #aws_db_instance.my_main_db must be replaced +/- resource "aws_db_instance" "my_main_db" { ~ address = x allocated_storage = x + apply_immediately = x ~ arn = x ~ username = x + password = x (others argum

我正在导入现有资源(AWS RDS),但
terraform plan
命令显示了一个摘要:

#aws_db_instance.my_main_db must be replaced 
+/- resource "aws_db_instance" "my_main_db" {
~ address = x
allocated_storage = x
+ apply_immediately = x
~ arn = x
~ username = x
+ password = x
(others arguments with alot of +/- and ~)
}

my_main_db
已联机并具有持久数据。我的问题是作为标题;从应用运行现有数据库是否安全?我不想丢失所有客户数据。

这很可能不安全,但实际上只有熟悉该应用程序的人才能做出决定。查看属性以及将要更改或重新创建的内容。除非你对所有这些属性的变化感到满意,否则这是不安全的

“替换”在Terraform的术语中是指破坏现有对象并创建一个新对象来替换它。
+/-
符号(与
-/+
相反)表示将在“销毁前创建”模式下替换此特定资源,在该模式下,操作期间将短暂存在两个数据库实例。(这在实践中可能实现,也可能不实现,具体取决于实例名称是否在此操作中发生更改。)

特别是对于
aws_db_instance
,销毁一个实例相当于在RDS控制台中删除该实例:除非您有数据库内容的备份,否则它将丢失。即使您确实有备份,您也需要通过RDS控制台或API而不是Terraform进行恢复,因为Terraform不知道备份/恢复机制,因此其“创建”的想法是生成一个全新的空数据库

总而言之:直接应用这样的计划肯定不是“安全的”,因为Terraform计划破坏您的数据库及其所有内容


如果您需要对数据库进行更改,而这些更改在不创建全新RDS实例的情况下无法执行,则通常需要在Terraform之外使用特定于RDS的工具进行这些更改,以便您可以在新旧实例之间传输数据,无论是备份还是恢复(需要临时停机)或者暂时运行这两个实例并设置从旧到新的复制,直到您准备关闭旧实例。此类迁移的详细信息不在Terraform的范围内,因为它们特定于您正在使用的任何数据库引擎。

您应该编辑问题以显示资源的完整计划输出,并且同时显示您的Terraform代码。但不可能是安全的,因为这样会在没有任何数据的情况下破坏和重建数据库(除非它是从快照构建的).我添加了一个用于计划输出的示例。但是,是的,我认为你是对的;Terraform销毁并创建新实例以进行替换。这并没有显示我们需要看到的内容。有可能你可以避免替换,但我们需要查看资源的完整计划输出和Terraform代码。没有这一点,问题就无法真正得到回答。不是吗感谢你的快速回复。你应该得到一个接受的答案,并得到一个巨大的感谢!