Google cloud platform 使用Packer在谷歌云平台上启动脚本

Google cloud platform 使用Packer在谷歌云平台上启动脚本,google-cloud-platform,terraform,google-compute-engine,packer,Google Cloud Platform,Terraform,Google Compute Engine,Packer,我正在使用hashicorp的Packer为谷歌云(Amazon的AMI)创建机器图像。我希望在云上创建实例后,每个实例都运行一个脚本。正如我从Packer文档中了解到的,我可以使用启动脚本\u文件来执行此操作。现在我可以工作了,但脚本似乎只运行一次,在创建映像时,每个运行的实例上都会产生相同的输出。如何仅在创建实例时触发此脚本,以便每个实例都有不同的输出 封隔器配置: { "builders": [{ "type": "

我正在使用hashicorp的Packer为谷歌云(Amazon的AMI)创建机器图像。我希望在云上创建实例后,每个实例都运行一个脚本。正如我从Packer文档中了解到的,我可以使用
启动脚本\u文件
来执行此操作。现在我可以工作了,但脚本似乎只运行一次,在创建映像时,每个运行的实例上都会产生相同的输出。如何仅在创建实例时触发此脚本,以便每个实例都有不同的输出

封隔器配置:

{
    "builders": [{
        "type": "googlecompute",
        "project_id": "project-id",
        "source_image": "debian-9-stretch-v20200805",
        "ssh_username": "name",
        "zone": "europe-west4-a",
        "account_file": "secret-account-file.json",
        "startup_script_file": "link to file"
    }]
  }
脚本:

#!/bin/bash

echo $((1 + RANDOM % 100)) > test.log #output of this remains the same on every created instance.

我已经在我的终端复制了你的packer配置和启动脚本,每次我从packer构建一个新实例时,它都会显示一个不同的数字。您能建议如何准确地构建虚拟机吗?您使用的命令以及您正在创建多少虚拟机?因此,我使用Packer创建了一次机器映像。然后我重用这个图像来创建多个实例,从而在每个实例上产生相同的输出。我没有为我创建的每个实例运行
packer build
,因为我知道您做得对吗?感谢您的澄清,在创建VM实例时设置的
启动脚本
不包括在您创建的映像中,因为该映像是在操作系统环境之外设置的。要在新映像上有一个
启动脚本
,您需要先在操作系统内部使用或其他方法进行设置。然后,您可以从那里创建基础图像。