首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Python启动带有启动脚本的GCP计算引擎VM?

如何通过Python启动带有启动脚本的GCP计算引擎VM?
EN

Stack Overflow用户
提问于 2022-06-03 00:11:34
回答 1查看 759关注 0票数 0

GCP有一个已发布的create_instance()代码片段可用的这里,我在几个地方见过例如这里。然而,正如您在第一个链接中所看到的,它是从2015年开始的(“版权2015年谷歌公司”),而且Google已经发布了另一个代码示例,用于发布一个日期为2022年的GCE实例。它可以在github 这里上使用,这个更新的create_instance函数是GCP的python文档这里中的特色。

但是,我不知道如何通过元数据传递启动脚本,以便使用现代python函数在VM启动上运行。我试着添加

代码语言:javascript
复制
    instance_client.metadata.items = {'key': 'startup-script',
                                      'value': job_script}

对于create.py函数(同样,可用的这里以及它调用的支持实用程序函数),但是它抛出了一个错误,即instance_client没有该属性。

GCP用于用启动脚本启动GCE的文档页是这里,与大多数其他类似的页面不同,它只包含用于consolegcloud和(REST)API的代码片段;而不是用于Python和Ruby的SDK代码片段,这些代码片段可能演示如何修改上面提到的python create_instance函数。

是使用python进程的启动脚本启动GCE的最佳实践,实际上是发送post请求或包装gcloud命令。

代码语言:javascript
复制
gcloud compute instances create VM_NAME \
  --image-project=debian-cloud \
  --image-family=debian-10 \
  --metadata-from-file=startup-script=FILE_PATH

...in a subprocess.run()?老实说,我不介意这样做,因为代码是如此紧凑(至少是gcloud命令,而不是POST请求方式),但是由于GCP提供了一个create_instance python函数,所以我假设使用/修改--这是python内部的最佳实践。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-03 01:45:05

所以,最简单的(!)使用Python库创建相当于--metadata-from-file=startup-scripts=${FILE_PATH}的方法可能是:

代码语言:javascript
复制
from google.cloud import compute_v1

instance = compute_v1.Instance()

metadata = compute_v1.Metadata()
metadata.items = [
    {
        "key":"startup-script",
        "value":'#!/usr/bin/env bash\necho "Hello Freddie"'
    }
]

instance.metadata = metadata

另一种方法是:

代码语言:javascript
复制
metadata = compute_v1.Metadata()

items = compute_v1.types.Items()
items.key = "startup-script"
items.value = """
#!/usr/bin/env bash

echo "Hello Freddie"
"""

metadata.items = [items]

注意到在示例中,为了方便起见,我在脚本中嵌入了FILE_PATH的内容,但是您当然可以使用FILE_PATHopen来获得更类似的结果。

通常情况下,如果您需要调用功能,而不是使用来调用二进制文件,那么使用库的总是更好的。正如注释中提到的,主要原因是特定于语言的调用给您输入(更多的是类型化语言)、受控执行(例如try)和错误处理。当您调用一个subprocess时,它的基于字符串的流一直向下。

我同意使用类的计算引擎Python库感觉很麻烦,但是,在编写脚本时,重点可能是更明确定义的长期好处和表达能力的短期痛苦。如果您只想插入一个VM,无论如何都要使用gcloud compute instances create ( all in Bash中的 time ),但是,如果您想使用更优雅的语言,比如Python,那么我鼓励您完全使用Python。

gcloud是用Python编写的。如果使用Python调用subprocess命令,则使用gcloud调用运行Python的shell进行REST调用;-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72483491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档