【问题标题】:copy files during GCP instance creation from python在从 python 创建 GCP 实例期间复制文件
【发布时间】:2020-03-07 01:20:25
【问题描述】:

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

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

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

【问题讨论】:

  • Python 代码在哪里运行(在 VM 上或在创建 VM 实例的管理程序上)?作为提示,您可以将文件存储在 Cloud Storage 上并使用 CLI gcloud 将文件从 Cloud Storage 复制到实例。 CLI 作为启动脚本的一部分执行。但是,我不会这样做。我会启动一个虚拟机,安装我需要的东西,然后创建一个 GCE 映像,然后我用它来启动已安装所有必需程序和文件的新实例。
  • python 代码正在创建 VM 实例的管理程序上运行。问题是被转移到 VM 实例的东西有点敏感,我不想将它存储在一些持久性图像中。它们本质上是 SSH 密钥,无论如何都具有非常有限的时间有效性,因此我必须在每次创建 VM 时生成它们,并且我只能(出于各种原因)从管理程序中生成它们。
  • 1) 编辑您的问题并提供更多详细信息。正如所写,您的问题对于 Stackoverflow 来说太宽泛了。 2)关于 SSH 密钥,它们不会过期,因此请提供有关您的意思的更多详细信息。 3) GCE 映像中的数据与云存储或您自己的计算机一样安全(或不安全)。
  • 4) 如果您的代码在实例之外运行,那么您将需要使用 SSH 远程控制 VM,使用 SCP/SSH 传输可以在 Python 中完成的文件,编写您自己的在实例上运行的代理或编写使用 CLI 下载文件的脚本。每种方法都有其自身的局限性和需要管理的可靠性问题。

标签: google-cloud-platform google-compute-engine google-api-python-client


【解决方案1】:

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

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

希望这会有所帮助。

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

【讨论】:

    【解决方案2】:

    如果我没听错的话,您希望文件存在于由 Docker 在您的 Compute Engine 虚拟机中执行的容器中。您的 Compute Engine 启动脚本正在安装 docker。

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

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

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

    另一个想法,同样,这取决于文件的性质......您可以创建一个简单地“包含”文件的 GCP 磁盘。当您现在创建一个新的 Compute Engine 实例时,可以定义该实例来挂载磁盘,该磁盘在所有 VM 实例之间以只读方式共享。

    【讨论】:

    • 感谢您的回答。是的,那绝对没问题。但是,我不确定如何首先将其放入 VM 实例中。我没有看到任何关于如何在实例创建期间传递文件的选项?如果可能的话,我想在 python 中做所有事情。
    • 我已经更新了答案,并提出了一些关于将数据导入 VM 的想法。我们可能希望了解数据的来源以及数据的静态程度。
    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 2023-02-02
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多