Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
terraform次要aws用户“数据变更”;“强制更换”最好的解决方案是什么?_Terraform_User Data - Fatal编程技术网

terraform次要aws用户“数据变更”;“强制更换”最好的解决方案是什么?

terraform次要aws用户“数据变更”;“强制更换”最好的解决方案是什么?,terraform,user-data,Terraform,User Data,我对AWS EC2用户_数据引导bash脚本做了一个小改动(仅限评论)。Terraform已经检测到了这一点,现在想用一个新的来取代EC2。但这是一个实时服务,我不想为了让terraform满意而把它拆下来,备份所有数据,构建一个新服务器,然后恢复数据 有没有更简单的方法来解决这个问题,通过某种方式使代码/statefile/aws保持一致,这样我就可以使用terraform对环境进行其他更改,而不必担心会吹走这个服务器 我甚至尝试过从AWS控制台编辑用户数据,以使其符合我认为应该进行的更改,但

我对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理解,这当然是一个限制,但这是您目前在这里的编码选项。