【问题标题】:Terraform EC2 instance import - user data differentTerraform EC2 实例导入 - 用户数据不同
【发布时间】:2018-06-19 17:50:49
【问题描述】:

我正在尝试将现有 EC2 实例导入 Terraform。我已经获取了 EC2 实例用户数据,并将其添加到我的 TF 配置文件中,例如

    user_data               = <<EOF
<powershell>
& $env:SystemRoot\System32\control.exe "intl.cpl,,/f:`"UKRegion.xml`""
& tzutil /s "GMT Standard Time" 
Set-Culture en-GB
</powershell>
EOF

资源导入正常,但是当我运行terraform plan 时,我得到 TF 想要销毁并重新创建实例,作为 user_data 中的“更改”“强制新资源”。

user_data: "946f756af0df239b19f86a72653e58dcc04c4b27" => "811599030dc713b18c3e35437a82b35095190a81" (forces new resource)

我尝试将用户数据从 EC2 控制台复制并粘贴到 TF 文件中,但这不起作用。这是可能吗?

【问题讨论】:

  • 你的目标是什么?您是否希望能够在不破坏实例的情况下更改 user_data?
  • 为了导入 EC2 实例,我需要确保“user_data”变量与当前针对 AWS 中的实例设置的变量相匹配。我已经准确地复制了 user_data(好吧,肉眼......)但是,当我运行一个计划时,TF 认为 UD 已经改变,并且想要销毁/创建实例。我不希望它破坏实例

标签: amazon-web-services terraform


【解决方案1】:

您不能从状态中复制 user_data 值,因为它是一个编码字符串,如果您将其复制到资源配置中,它将在与当前状态进行比较之前再次进行编码,并且不匹配。

但您可以从 EC2 控制台的实例设置中复制当前用户数据值,并将其粘贴到 .tf 文件中资源的 user_data 属性中。

如果有多行数据,您需要将文件中的每个换行符替换为\n,因为您不能使用多行字符串。

例如:

resource "aws_instance" "instance1" {
  ami = "ami-0123456789abcdef0"
  instance_type = "t4.medium"
  user_data = "setting1=value\nsetting2=value\nsetting3=value"
}

注意:EC2 中的用户数据大小限制为 16KB,但如果您要从 EC2 复制到 Terraform 配置,这不会成为问题。 (但它会使阅读和管理变得困难,因此您可能需要考虑将配置存储在自定义图像中。)

或者,正如您已经建议的那样,如果您的设置支持这一点并且您可以暂时关闭实例,请从实例设置中完全删除用户数据。

【讨论】:

    【解决方案2】:

    根据这个 github issue,看来这是 terraform 如何将 user_data 解释为“计算”值的问题。似乎有一个解决方法。

    • 首先使用您的计划命令(包括命令行中的额外参数)运行计划/应用周期:
      -target=template_file.userdata-consul。这将告诉 Terraform 完成更新模板文件所需的最少工作,这应该
      保持启动配置不变。
    • 现在再次运行计划,由于现在已经重新创建了 template_file,它应该将解析的模板插入为 预期进入 user_data,然后应该没有差异 因为“新”模板渲染应该与 “旧”一个。

    【讨论】:

    • 感谢您的回答,但我不确定这是不是同一件事(链接的问题似乎与计算模板文件的解释有关?)无论如何我尝试了解决方法 - @987654322 @但它仍然认为user_data已经改变,因此需要重新创建实例。
    • @kafka 您没有尝试从 EC2 复制 user_data 值,而是尝试复制 terraform 检测到的值 (946f756af0df239b19f86a72653e58dcc04c4b27) 并将其添加到 TF 配置文件中?
    • 我有,我希望我可以获取“计算”值并简单地将其插入,但无济于事。最后,我所做的解决方法是停止实例并删除 AWS 控制台中的用户数据。这解决了它,但我很幸运我可以做到这一点(尽管使用这些服务器,UD 仅在服务器创建时运行)
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多