【问题标题】:Run a gsutil command in a Google Cloud Function在 Google Cloud 函数中运行 gsutil 命令
【发布时间】:2020-08-30 20:26:33
【问题描述】:

我想每 x 分钟运行一次 gsutil 命令作为云功能。我尝试了以下方法:

# main.py
import os

def sync():
     line = "gsutil -m rsync -r gs://some_bucket/folder gs://other_bucket/other_folder"
     os.system(line)

当 Cloud Function 被触发时,该行的执行不起作用(或者即文件没有从一个存储桶复制到另一个存储桶)。但是,当我在 Pycharm 或使用 cmd 本地运行它时,它确实可以正常工作。与云功能有什么区别?

【问题讨论】:

  • 首先你应该检查gsuitl是否工作(不运行Python),然后你可以尝试使用crontab(而不是Python)每X分钟运行一次——如果你使用Linux。
  • 我绑定到使用 os.popen 和 os.system 运行它,虽然这在我的本地终端中运行良好,但它不会在云功能中触发它。我基本上看到一个空白行,然后它说该函数已完全执行。似乎更像是一个 gcf 问题,更新了答案。

标签: python google-cloud-platform google-cloud-functions google-cloud-storage gsutil


【解决方案1】:

您可以为此使用Cloud Run。您在代码中执行的更改很少。

创建一个安装了 gsutil 和 python 的容器,例如 gcr.io/google.com/cloudsdktool/cloud-sdk 作为基础镜像

注意部署 Cloud Run 时使用的服务帐号,授予访问存储桶的正确权限

如果您需要更多指导,请告诉我

【讨论】:

    【解决方案2】:

    Cloud Functions 服务器实例未安装 gsutil。它可以在您的本地计算机上运行,​​因为您确实在那里安装和配置了它。

    我建议尝试使用 Cloud Storage SDK for python 来做你想做的事。或者弄清楚如何使用您的函数部署 gsutil,并弄清楚如何从您的代码中配置和调用它,但这可能非常困难。

    【讨论】:

      【解决方案3】:

      没有直接的选择。

      我认为最适合 Cloud Functions 的是使用 google-cloud-storage python library

      【讨论】:

        猜你喜欢
        • 2020-03-24
        • 2021-03-22
        • 2017-11-10
        • 2021-08-30
        • 1970-01-01
        • 2015-05-25
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多