我正在python中使用googleapiclient
启动VM实例。作为其中的一部分,我正在使用该工具来运行启动脚本以安装docker和其他python软件包。
现在,我想做的一件事是理想地在实例创建阶段通过python代码将文件复制到该实例。
实现此目标的方式可能是什么?理想的工作方式是能够检测到实例已启动,然后能够复制这些文件。
答案 0 :(得分:1)
如果我没有听错,您希望文件存在于Compute Engine VM中由Docker执行的容器中。您的Compute Engine启动脚本正在安装docker。
我的建议不是尝试将这些文件复制到容器中,而是将其在Compute Engine可用的本地文件系统上可用。配置Docker启动程序,然后将目录从Compute Engine挂载到Docker容器中。在docker容器中,您现在可以访问所需文件。
首先要将文件带入Compute Engine环境中,我们有很多选择。然而,核心故事将是首先描述文件的起始位置。
一种常见的方法是将要复制的文件保留在Google Cloud Storage(GCS)存储桶/文件夹中。从那里,您的启动脚本可以使用GCS API或gsutil命令将文件从GCS存储桶复制到本地文件系统。
另一种想法,这又取决于文件的性质……是您可以创建一个简单地“包含”文件的GCP磁盘。现在,当您创建一个新的Compute Engine实例时,可以将该实例定义为安装在所有VM实例之间以只读方式共享的磁盘。
答案 1 :(得分:1)
首先,我建议使用Terraform或Google Deployment Manager之类的工具来创建云基础架构,而不是编写自定义python代码并自行处理所有边缘情况。
由于某种原因,您不能使用上述工具,只有Python程序可供选择,您可以执行以下操作: 1.使用python api创建一个GCS存储桶,并放置适当的存储桶策略以保护数据。 2.创建一个对上述GCS存储桶具有读取权限的服务帐户。 3.使用python API启动VM实例,并使用启动脚本来安装软件包和运行docker容器。附加上述服务帐户,该帐户有权从上述GCS存储桶中读取文件。 3.在您的Docker容器中有一个启动脚本,该脚本可以运行``gsutil`命令从GCS存储桶中获取文件,并将其放置在正确的位置。
希望这会有所帮助。
同样,如果您可以使用Terraform之类的工具,那将使事情变得简单。