【发布时间】:2017-11-06 18:22:14
【问题描述】:
似乎我可以将user_data 与模板文件一起使用,或者将“远程执行”provisioner 与内联命令一起使用来引导。那么哪一个被认为更惯用呢?
【问题讨论】:
标签: cloud devops provisioning terraform
似乎我可以将user_data 与模板文件一起使用,或者将“远程执行”provisioner 与内联命令一起使用来引导。那么哪一个被认为更惯用呢?
【问题讨论】:
标签: cloud devops provisioning terraform
您应该使用user_data。 user data 字段是惯用的,因为它是 AWS 原生的,而 remote-exec 配置器是特定于 Terraform 的,这只是调用 AWS API 的众多方法之一。
此外,用户数据可在 AWS 控制台中查看,这通常是在 AWS 中使用 Auto Scaling 组的重要部分,您希望每个 EC2 实例在启动时执行相同的配置代码。使用 Terraform 的 remote-exec 配置器无法做到这一点。
【讨论】:
user_data 也适用,因为它可以包含在启动配置中。因此,使用 user_data 可以在静态实例和自动缩放实例之间提供一致性。
虽然我同意 Josh 的观点,但如果实例没有运行时更改,您可以使用 packer 构建一个 ami,然后在启动配置中使用它。这样您就不必等待用户数据运行。
Packer 是 Hashicorp 工具系列的一部分
【讨论】:
它完全基于条件和场景。
案例:如果您主要在自动缩放组中使用模板,您应该使用 user_data。由于启动的所有新实例都将使用相同的初始化脚本启动,这还有一个好处,您实际上可以在 AWS 控制台日志中看到 o/p。
案例:当您启动新实例时,一旦启动,您的配置管理工具或模板工具就会运行。
provisioner "remote-exec" {
inline = [
"puppet apply",
"consul join ${aws_instance.web.private_ip}",
]
}
远程执行请参考Docs
【讨论】: