在 GCP 实例创建期间从 python 复制文件

copy files during GCP instance creation from python

我正在使用 python 中的 googleapiclient 启动 VM 实例。作为其中的一部分,我正在使用该工具 运行 启动脚本来安装 docker 和其他 python 软件包。

现在,我想做的一件事是最好在实例创建阶段通过 python 代码将文件复制到此实例。

实现这一目标的方法可能是什么?理想情况下,能够检测到实例已启动,然后能够复制这些文件。

如果我没听错,您希望文件存在于计算引擎 VM 中由 Docker 执行的容器内。您的 Compute Engine 启动脚本正在安装 docker.

我的建议是不要尝试将这些文件复制到容器中,而是让它们在计算引擎可用的本地文件系统上可用。配置您的 docker 启动,然后将目录从 Compute Engine 装载到 docker 容器中。在 docker 容器内,您现在可以访问所需的文件。

至于首先将文件导入 Compute Engine 环境,我们有多种选择。然而,核心故事将首先描述文件从哪里开始。

一种常见的方法是将要复制到 VM 中的文件保存在 Google 云存储 (GCS) bucket/folder 中。从那里,您的启动脚本可以使用 GCS API 或 gsutil 命令将文件从 GCS 存储桶复制到本地文件系统。

另一个想法,这又取决于文件的性质……您可以创建一个 GCP 磁盘,它只包含 "contains" 个文件。当您现在创建一个新的 Compute Engine 实例时,可以定义该实例以装载在所有 VM 实例之间以只读方式共享的磁盘。

首先,我建议使用像 Terraform 或 Google Deployment Manager 这样的工具来创建云基础架构,而不是编写自定义 python 代码并自行处理所有边缘情况。

出于某种原因,您不能使用上述工具,只有 Python 程序可供您选择,您可以执行以下操作: 1. 使用 python api 创建一个 GCS bucket 并设置适当的 bucket 策略来保护数据。 2.创建一个对上述GCS bucket有读权限的服务账号。 3. 使用 python API 启动 VM 实例,并让您的启动脚本安装包和 运行 docker 容器。附加上面的服务帐户,该帐户有权从上面的 GCS 存储桶中读取文件。 3. 在您的 docker 容器中有一个启动脚本,它可以 运行 ``gsutil` 命令从 GCS 存储桶中获取文件并放在正确的位置。

希望这对您有所帮助。

同样,如果您可以使用像 Terraform 这样的工具,事情就会变得简单。