Terraform - 我应该使用 user_data 还是 provisioner 来 bootstrap 资源?
Terraform - should I use user_data or provisioner to bootstrap a resource?
看来我可以将 user_data
与模板文件一起使用,或者将 "remote-exec" provisioner
与 bootstrap 的内联命令一起使用。那么哪个被认为更地道呢?
你应该使用 user_data
。 user data 字段是惯用的,因为它是 AWS 原生的,而 remote-exec provisioner 是特定于 Terraform 的,这只是调用 AWS API.
的多种方式之一
此外,用户数据可以在 AWS 控制台中查看,这通常是在 AWS 中使用 Auto Scaling 组的重要部分,您希望每个 EC2 实例在启动时执行相同的配置代码。使用 Terraform 的远程执行供应器无法做到这一点。
尽管我同意 Josh 的观点,但如果实例没有 运行 时间更改,您可以使用加壳器构建 ami,然后在启动配置中使用它。这样您就不必等待用户数据 运行。
Packer 是 Hashicorp 工具系列的一部分
完全根据条件和场景。
案例:如果您主要在自动缩放组中使用模板,则应该使用 user_data。由于启动的所有新实例都将使用相同的初始化脚本启动,这还有一个好处,您实际上可以在 AWS 控制台日志中看到 o/p。
案例:当您启动新实例时,一旦它启动,您的配置管理工具就会运行或模板工具。
provisioner "remote-exec" {
inline = [
"puppet apply",
"consul join ${aws_instance.web.private_ip}",
]
}
参考Docs远程执行
看来我可以将 user_data
与模板文件一起使用,或者将 "remote-exec" provisioner
与 bootstrap 的内联命令一起使用。那么哪个被认为更地道呢?
你应该使用 user_data
。 user data 字段是惯用的,因为它是 AWS 原生的,而 remote-exec provisioner 是特定于 Terraform 的,这只是调用 AWS API.
此外,用户数据可以在 AWS 控制台中查看,这通常是在 AWS 中使用 Auto Scaling 组的重要部分,您希望每个 EC2 实例在启动时执行相同的配置代码。使用 Terraform 的远程执行供应器无法做到这一点。
尽管我同意 Josh 的观点,但如果实例没有 运行 时间更改,您可以使用加壳器构建 ami,然后在启动配置中使用它。这样您就不必等待用户数据 运行。
Packer 是 Hashicorp 工具系列的一部分
完全根据条件和场景。
案例:如果您主要在自动缩放组中使用模板,则应该使用 user_data。由于启动的所有新实例都将使用相同的初始化脚本启动,这还有一个好处,您实际上可以在 AWS 控制台日志中看到 o/p。
案例:当您启动新实例时,一旦它启动,您的配置管理工具就会运行或模板工具。
provisioner "remote-exec" {
inline = [
"puppet apply",
"consul join ${aws_instance.web.private_ip}",
]
}
参考Docs远程执行