【问题标题】:Executing a python script in Google Compute Engine from App Engine从 App Engine 在 Google Compute Engine 中执行 python 脚本
【发布时间】:2020-12-02 22:38:24
【问题描述】:

我有一个 Python 脚本存储在 Compute Engine 实例中。我还在 Google App Engine 上部署了一个网络应用程序。

我想要实现的是让用户在 Web 应用程序界面上输入一些参数,并让它使用输入的参数在 Compute Engine 实例中执行脚本。

我的问题是:如何从 App Engine 访问 Compute Engine 实例并使用用户传入的参数执行脚本?

【问题讨论】:

  • 有几种方法。你试过什么?您的问题缺少关于您想要做什么、所需资源等的详细信息,因此很难生成答案。查看 1) 构建在 Compute Engine 上运行的 REST 接口(简单,这就是我要做的)。 Flask 以简单为例。 2) 使用 Python SSH 库并在 SSH 会话中执行脚本。

标签: google-app-engine google-compute-engine


【解决方案1】:

我认为这里有几个因素需要考虑:

  • 安全隐患:让网站后端访问不同的主机以根据请求运行带有客户端定义参数的命令很容易引入许多不值得处理的潜在漏洞。
  • 清理 Python 脚本中的一个或多个参数是必须的,您可以使用 shlex.quote() 执行此操作。
  • 通过来自 App Engine 的 SSH 在 VM 实例中运行脚本:
    • 使用Google Cloud Client Library for Python,您可以连接到给定的GCE 实例并通过setting up OS Login 运行命令,并将此实例的roles/compute.osLogin 授予运行您的App Engine 应用程序的服务帐户,如@987654325 中所述@(与this example)。
    • 否则,您可以尝试在实例中为此目的创建一个系统帐户,并允许其登录其/etc/ssh/ssh_config,并使用添加到该用户的~/ssh/.authorized_keys 文件中的新RSA 密钥以及@987654327 等通用SSH 客户端库@ 连接到它的外部 IP 地址,假设它有一个。
    • 在这两种情况下,这都会为请求引入非常高的延迟,因为创建 SSH 会话通常需要 2 秒以上的时间。
  • 作为可接受的延迟(并且可能更安全)的替代方案,您可以在 VM 中拥有一个简单的 HTTPS 服务(如果需要,您可以在 Python 代码中检查正确的蛇油证书)并设置一个webhook 具有长的类似哈希的 URL 路径(以及可选的非默认端口),例如由一个简单的 PHP 脚本处理,该脚本在将参数变量传递到其 $_POST[] 超全局变量后运行带有 exec() 的结束脚本通过excapeshellarg() 对其进行(重新)消毒。

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 2018-04-28
    • 2018-02-14
    • 2015-11-05
    • 2017-11-17
    • 2012-12-27
    • 2017-03-02
    相关资源
    最近更新 更多