【发布时间】:2019-06-17 01:27:47
【问题描述】:
我从 Terraform 开始。我试图让它设置一个友好的主机名,而不是 AWS 使用的通常的 ip-10.10.10.10。但是,我还没有找到怎么做。
我尝试使用配置器,如下所示:
provisioner "local-exec" {
command = "sudo hostnamectl set-hostname friendly.example.com"
}
但这不起作用,主机名没有改变。
所以现在,我正在尝试这个:
resource "aws_instance" "example" {
ami = "ami-XXXXXXXX"
instance_type = "t2.micro"
tags = {
Name = "friendly.example.com"
}
user_data = "${data.template_file.user_data.rendered}"
}
data "template_file" "user_data" {
template = "${file("user-data.conf")}"
vars {
hostname = "${aws_instance.example.tags.Name}"
}
}
在user-data.conf 我有一行可以使用变量,如下所示:
hostname = ${hostname}
但这给了我一个循环依赖:
$ terraform apply
Error: Error asking for user input: 1 error(s) occurred:
* Cycle: aws_instance.example, data.template_file.user_data
另外,这意味着我必须为每个实例创建不同的 user_data 资源,这似乎有点痛苦。你不能重复使用它们吗?这应该是模板的目的吧?
我一定错过了什么,但我找不到答案。 谢谢。
【问题讨论】:
-
关于第一次尝试:
local-exec在您的“本地”设备上执行。你想要remote-exec。 -
@MattSchuchard 啊,谢谢!我认为它对于正在配置的实例是本地的。我会试试这个。
-
@MattSchuchard 我得到了它的工作,感谢您的建议。如果您将其发布为答案,我会将其标记为已选择。
标签: terraform cloud-init