【发布时间】:2016-04-13 07:38:48
【问题描述】:
使用 Terraform,我需要将文件复制到 Google Compute Engine 实例模板。为此,我通常使用file provisioner,但它不起作用,因为它依赖于SSH connections,由于需要外部可访问的主机地址而失败。由于实例模板的动态特性,我不知道如何将外部可访问的主机地址分配给实例。
如何实现将文件复制到通过实例模板(通过 Terraform)创建的 GCE 实例?
示例 Terraform google_compute_instance_template 定义
resource "google_compute_instance_template" "node" {
name = "kubernetes-node-template"
machine_type = "g1-small"
can_ip_forward = true
tags = ["staging", "node"]
network_interface {
network = "default"
}
provisioner "file" {
source = "worker/assets/kubelet.service"
destination = "/etc/systemd/system/kubelet.service"
}
connection {
user = "core"
type = "ssh"
private_key = "${file("~/.ssh/id_rsa")}"
}
}
【问题讨论】:
-
我正要添加完全相同的问题。我有几乎相同的配置,它不会导致错误,但不会传输文件。您是否在此尝试中收到任何错误?
-
@Adron 我记得它无法获取 SSH 连接并出现明显错误,是的。
-
啊,我能够使连接(至少没有出现错误)工作,但它实际上并没有传输我为源设置的文件。我确实必须设置 gcloud ~/.ssh/google_compute_engine 密钥(使用 gcloud init 进行设置并尝试建立您的第一个连接,然后它会要求您根据 cli 需要密钥的方式设置 ssh 密钥。)一旦我设置了 gcloud 密钥并将其添加到连接 private_key 值,错误就消失了,所以我假设它已连接。我现在的问题是实际上没有任何文件副本发生。
-
@Adron 对我来说失败并出现以下错误:
* dial tcp :22: getsockopt: connection refused。 -
据我了解,实例模板实际上无法连接或配置文件或脚本,因为它们不是运行机器,只有模板。可能最好使用文件构建映像或在实例从模板启动时配置它们
标签: ssh google-compute-engine terraform