【问题标题】:terraform minor aws user_data change "forces replacement" - What Is The Best Resolution?terraform minor aws user_data 更改“强制替换”-最佳解决方案是什么?
【发布时间】:2021-01-20 09:31:58
【问题描述】:

我对我的 AWS EC2 user_data bootstrap bash 脚本进行了小改动(仅限 cmets)。 Terraform 已检测到这一点,现在想用新的 EC2 替换。但这是一项实时服务,我宁愿不必将其关闭、备份所有数据、构建新服务器,然后恢复数据——只是为了让 terraform 满意!

有没有更简单的方法来解决这个问题,以某种方式将代码/状态文件/aws 对齐,以便我可以使用 terraform 对环境进行其他更改,而不必担心炸毁该服务器?

我什至尝试从 AWS 控制台编辑用户数据,以使其与我认为应该进行的更改保持一致,但这没有奏效。

目前我正在使用-target 进行特定更改,但从长远来看这可能是不可持续的。

【问题讨论】:

    标签: terraform user-data


    【解决方案1】:

    您可以使用lifecycle 元参数指示提供者忽略对该资源的user_data 参数的更改:

    resource "aws_instance" "this" {
      # ...
    
      lifecycle {
        ignore_changes = [user_data]
      }
    }
    

    【讨论】:

    • 谢谢,我没想到那个,它肯定比-target 好,而且我想一旦user_data 确实发生了变化,我就可以删除生命周期语句。我唯一的问题是我有一个 EC2 模块,如果我更改了会影响所有 EC2 的模块,而不仅仅是我目前遇到问题的那个。
    • 一个更新,我尝试将 user_data 作为 var 传递给模块,因此我可以忽略它只是受影响的“aws_instance”,但是由于生命周期语句不能是动态的(包括变量)。所以这几乎排除了一个选项。
    • @PBurke 明白了,这当然是一个限制,但目前这是您在这里的编码选项。
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多