【发布时间】:2021-04-05 11:55:04
【问题描述】:
我正在使用 Packer 在 Google Compute Engine 上生成图像,并使用 Terraform 创建实例。我已经设置了这个元数据:
密钥:env_vars
值:export test=10
Packer 正在使用一个脚本,里面有这样的东西:
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/env_vars?recursive=tru&alt=text" -H "Metadata-Flavor: Google" -o /tmp/env_vars.sh
source /tmp/env_vars.sh # or . /tmp/env_vars.sh
问题是,当我通过 Terraform 使用此图像创建实例时,env 变量不可用。这意味着,如果我运行 printenv 或 echo $test,它是空的。
即使我为实例写了startup-script,它也不起作用。
但是,如果我通过 SSH 在实例中运行完全相同的脚本,它确实可以工作。
在上述所有场景中,都会创建文件env_vars.sh。
我只想从我的元数据中为任何实例设置环境变量。
关于如何实现这一点的任何建议?
编辑:
这是地形代码:
# create instance
resource "google_compute_instance" "default" {
count = 1
name = var.machine_name
machine_type = var.machine_type
zone = var.region_zone
tags = ["allow-http-ssh-rule"]
boot_disk {
initialize_params {
image = var.source_image
}
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
}
【问题讨论】:
-
能否分享您用于创建 VM 实例的 terraform 代码?以此为起点。 (如果您要在此处分享,请删除任何 PII 信息)
-
当然!我刚刚更新了我的帖子。我在做什么来设置环境变量有意义吗?
标签: environment-variables terraform google-compute-engine metadata packer