Terraform - 我应该使用 user_data 还是 provisioner 来 bootstrap 资源?

Terraform - should I use user_data or provisioner to bootstrap a resource?

看来我可以将 user_data 与模板文件一起使用,或者将 "remote-exec" provisioner 与 bootstrap 的内联命令一起使用。那么哪个被认为更地道呢?

你应该使用 user_datauser data 字段是惯用的,因为它是 AWS 原生的,而 remote-exec provisioner 是特定于 Terraform 的,这只是调用 AWS API.

的多种方式之一

此外,用户数据可以在 AWS 控制台中查看,这通常是在 AWS 中使用 Auto Scaling 组的重要部分,您希望每个 EC2 实例在启动时执行相同的配置代码。使用 Terraform 的远程执行供应器无法做到这一点。

尽管我同意 Josh 的观点,但如果实例没有 运行 时间更改,您可以使用加壳器构建 ami,然后在启动配置中使用它。这样您就不必等待用户数据 运行。

Packer 是 Hashicorp 工具系列的一部分

https://www.packer.io/docs/builders/amazon-ebs.html

完全根据条件和场景。

案例:如果您主要在自动缩放组中使用模板,则应该使用 user_data。由于启动的所有新实例都将使用相同的初始化脚本启动,这还有一个好处,您实际上可以在 AWS 控制台日志中看到 o/p。

案例:当您启动新实例时,一旦它启动,您的配置管理工具就会运行或模板工具。

provisioner "remote-exec" {
inline = [
  "puppet apply",
  "consul join ${aws_instance.web.private_ip}",
]
}

参考Docs远程执行