【问题标题】:How can I inject an environment variable into the startup script for gcloud compute instances create?如何将环境变量注入 gcloud 计算实例创建的启动脚本?
【发布时间】:2020-01-08 14:57:08
【问题描述】:

我正在使用 gcloud compute instances create 命令创建 GCE VM,并且我正在使用 --metadata-from-files 参数传入启动 shell 脚本以进行某些配置。

但是,我需要使用指定的值预先填充各种环境变量,以便启动脚本正常工作。它们不能硬编码到启动脚本中,因为它们对于我正在编写的整个脚本的不同用户会有所不同(例如,传递到新实例的环境变量可能基于调用脚本的 $USER)。

我也尝试使用 --metadata 参数添加键值对,但这不起作用,并且引用的 shell 变量在启动脚本的执行中仍然未绑定。

我如何发出 gcloud compute instances create 命令来转发一组环境变量,这些环境变量将被填充到环境中以供启动脚本使用它们?

--metadata 参数似乎应该是正确的,因为 docs 说,

元数据可供在实例上运行的客户操作系统使用。

【问题讨论】:

    标签: environment-variables google-compute-engine gcloud


    【解决方案1】:

    您应该能够使用此文档生成适当的curl 命令来提取您的元数据: https://cloud.google.com/compute/docs/storing-retrieving-metadata

    然后您可以使用提取的值来设置您的环境变量。

    (已编辑以修复 URL。)

    【讨论】:

    • 这很有帮助,我想我已经成功了。您可能要添加到您的答案中的一个注释是,您需要对元数据的attributes 端点进行显式查询。我也认为你的链接坏了
    • 我实际上意识到这种类型的答案存在问题。这要求您确保在实例上配置了curl,以便您可以检索元数据。但是例如,一些配置步骤可能是检查该用户是否已经配置了机器(因为 GCE 强制这些脚本在每次实例恢复时运行)并在它已经运行时跳过一些配置(即通过检查某个文件或其他东西)。它产生了一个先有鸡还是先有蛋的问题,无论如何,您基本上都必须至少重新配置 curl。
    • 如果 instances create 命令实际上可以将环境变量转发到实例,它可以解决这个问题,而无需依赖网络访问变量的元数据。
    猜你喜欢
    • 2016-11-27
    • 2013-05-26
    • 2023-02-08
    • 1970-01-01
    • 2011-10-17
    • 2014-02-06
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多