【问题标题】:Is there a way to modify the files in a Compute Engine virtual machine using the Compute Engine API + NodeJS有没有办法使用 Compute Engine API + NodeJS 修改 Compute Engine 虚拟机中的文件
【发布时间】:2020-06-28 02:01:49
【问题描述】:

我正在使用他们的 App Engine 和 Compute Engine 在 Google Cloud 中开发一个项目。我在 Compute Engine 上设置了一个虚拟机实例,名称为“instance-1”。在这个实例上是 python 文件(file.py):

name = '<REPLACE_WITH_YOUR_NAME>'

print(name)

嗯,这不完全是 file.py,但这个概念适用于下面。此外,我有一个用 NodeJS 编写的 App Engine 项目,它通过 Google 的 Compute Engine API 连接到这个实例。以下是我对此的看法:

const Compute = require('@google-cloud/compute');

const compute = new Compute();
const zone = compute.zone('us-east1-b');
const vm_name = 'instance-1';
const vm = zone.vm(vm_name);
const my_name = "David Weiss"

// TODO: insert the variable my_name into the python code file.py where it says '<REPLACE_WITH_YOUR_NAME>'
// In my head, it would look something like this: vm.getFile('file.py', 'write').replace('<REPLACE_WITH_YOUR_NAME>', my_name);

获得实例“instance-1”后,我不知道如何使用 NodeJS 和 Compute Engine API 修改(甚至添加/替换/删除)其上的文件。这可以做到吗?如果无法替换 file.py 中的文本,我可以删除整个文件并编写一个全新的文件,其中已插入 my_name。

【问题讨论】:

  • 您无法使用 API 直接修改 Compute Engine 上的文件。您可以使用 SSH/SFTP 进行文件传输。一个更简单的策略是部署到 GitHub 或 Cloud Storage,然后将文件拉取到在启动/重启时运行的启动文件中的 Compute Engine。此外,Cloud Build 专为构建和部署应用而设计。

标签: python node.js google-app-engine google-cloud-platform google-compute-engine


【解决方案1】:

将您的 Compute Engine 实例视为“计算机”。如果您在 PC 上有文件,您将如何远程修改该 PC 上的文件? Compute Engines 的 GCP API 不允许您访问该实例的文件系统。相反,您必须使用 scp 或 ftp 等技术。如果您描述了更高层次的故事,也许我们可以使用其他概念。例如,当 Compute Engine 启动时,它可以运行可能从某个地方(例如 GCS)复制的启动脚本。另一种可能性是您的计算引擎可以运行应用程序本身,您可以针对该应用程序发出 REST 请求并传递数据,这些数据将是计算引擎应用程序写入的文件的内容。

如果您仍然想沿着文件复制路线走,并且希望请求的应用程序用 python 编写,那么可能是审查:

How to scp in Python?

2020-03-17 - 基于更多 cmets

为了配置新的 Compute Engine 实例...我感觉到您正在使用 GCP API 通过您的 App Engine 应用创建新的 Compute Engine 实例。如果你提出的难题摆在我面前,我会考虑以下几行。

当 App Engine 应用确定要创建一个新的 Compute Engine 实例时,我们显然必须为该新实例指定一个唯一的名称。没有两个计算实例可以具有相同的身份。因此,我们有一个用于该实例的“密钥”。接下来,我会让 App Engine 应用在 Google Cloud Storage (GCS) 中创建一个文件,其中包含您在 Compute Engine 中所需的确切文件。您的应用程序可以动态构建文件的内容。每个计算引擎实例将有一个文件,并且文件名将与计算引擎实例的名称匹配。此时,我们在 GCS 中有您想要的文件。接下来,我将创建一个 shell 脚本,将文件从 GCS(基于运行脚本的计算引擎的名称)复制到本地计算引擎实例文件系统。最后,我将此脚本指定为“启动脚本”,在 Compute Engine 启动时执行。

当计算引擎启动时,它将在启动周期的早期但在用户能够登录之前运行启动脚本。该脚本会将文件从 GCS 复制到本地文件系统存储,当脚本完成后,用户可以登录并找到该文件。

另见:

【讨论】:

  • 非常有趣,谢谢!让我描述更多的项目和我的想法。我从 App Engine 开始创建一个 NodeJS 应用程序,为我的用户提供前端。我希望我的用户输入一些数据,比如他们的电子邮件地址,然后单击一个按钮以编程方式在 Compute Engine 上创建他们自己的个性化实例。在他们的实例上将是一个 python file.py,它将通过 cron 安排在每天上午 8 点到下午 6 点运行,它将利用通过前端应用程序提供的电子邮件。一切都很好,但是如果 usr 需要更改该电子邮件怎么办?
  • 你好,大卫......我会用更多的想法更新答案......首先给你一些问题。您的目标是让最终用户拥有自己的 OWN Compute Engine 实例吗?我想我听到你说的是你想通过 App Engine 为用户按需配置一个 Compute Engine 实例,但为用户定制了该实例?是每个用户都有自己的 Compute Engine,还是您想在多个用户之间共享一个 Compute Engine?
  • 是的,你的理解是正确的。我希望用户按需配置自己的 Compute Engine 实例,并使用在该实例上存储的文件上运行的自己的数据进行个性化设置。因此,每个用户都将匹配到他们自己的实例(以 1:1 的比例)。这在我的脑海中是有道理的,但如果有更好的方法,我愿意听到它!此外,每个用户实例中的文件结构都是相同的,唯一的区别是用于运行每个实例的 file.py 中定义的函数的数据参数。例如,用户 1 将使用 email_1 运行他们的 file.py,用户 2,email_2。
猜你喜欢
  • 1970-01-01
  • 2021-04-05
  • 2018-12-27
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2018-07-25
  • 2016-03-13
  • 2019-07-14
相关资源
最近更新 更多