terraform次要aws用户“数据变更”;“强制更换”最好的解决方案是什么?
我对AWS EC2用户_数据引导bash脚本做了一个小改动(仅限评论)。Terraform已经检测到了这一点,现在想用一个新的来取代EC2。但这是一个实时服务,我不想为了让terraform满意而把它拆下来,备份所有数据,构建一个新服务器,然后恢复数据 有没有更简单的方法来解决这个问题,通过某种方式使代码/statefile/aws保持一致,这样我就可以使用terraform对环境进行其他更改,而不必担心会吹走这个服务器 我甚至尝试过从AWS控制台编辑用户数据,以使其符合我认为应该进行的更改,但这没有起作用terraform次要aws用户“数据变更”;“强制更换”最好的解决方案是什么?,terraform,user-data,Terraform,User Data,我对AWS EC2用户_数据引导bash脚本做了一个小改动(仅限评论)。Terraform已经检测到了这一点,现在想用一个新的来取代EC2。但这是一个实时服务,我不想为了让terraform满意而把它拆下来,备份所有数据,构建一个新服务器,然后恢复数据 有没有更简单的方法来解决这个问题,通过某种方式使代码/statefile/aws保持一致,这样我就可以使用terraform对环境进行其他更改,而不必担心会吹走这个服务器 我甚至尝试过从AWS控制台编辑用户数据,以使其符合我认为应该进行的更改,但
目前,我正在使用
-target
进行特定的更改,但从长远来看,这可能是不可持续的。您可以使用生命周期
元参数指示提供者忽略对该资源的用户数据
参数的更改:
resource "aws_instance" "this" {
# ...
lifecycle {
ignore_changes = [user_data]
}
}
您可以使用
lifecycle
meta参数指示提供程序忽略对该资源的user\u data
参数的更改:
resource "aws_instance" "this" {
# ...
lifecycle {
ignore_changes = [user_data]
}
}
谢谢,我没有想到这一点,而且它肯定比
-target
要好,我想一旦用户数据真的改变了,我就可以把生命周期声明拿出来。我唯一的问题是,我有一个用于EC2的模块,如果我更改了会影响所有EC2的模块,而不仅仅是我目前遇到问题的模块。在更新时,我尝试将用户_数据作为变量传递给模块,以便我可以忽略它,只针对受影响的“aws_实例”,但由于生命周期语句不能是动态的,因此失败得惊人(包括VAR)。因此,这几乎排除了作为选项的可能性。@PBurke理解,这当然是一个限制,但这是您目前在这里的编码选项。谢谢,我没有想到这一个,它肯定比-target
好,我想一旦用户数据真的发生了变化,我就可以删除lifecycle语句。我唯一的选择是问题是我有一个用于EC2的模块,如果我更改了会影响所有EC2的模块,而不仅仅是我目前遇到问题的模块。在更新时,我尝试将用户_数据作为变量传递给模块,以便我可以忽略它,只对受影响的“aws_实例”,但这失败了,因为生命周期语句不能是动态的(包括VAR)。因此,这几乎排除了作为选项的可能性。@PBurke理解,这当然是一个限制,但这是您目前在这里的编码选项。