在 Google Cloud 函数中运行 gsutil 命令

Posted

技术标签:

【中文标题】在 Google Cloud 函数中运行 gsutil 命令【英文标题】:Run a gsutil command in a Google Cloud Function 【发布时间】: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 问题,更新了答案。 【参考方案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

【讨论】:

以上是关于在 Google Cloud 函数中运行 gsutil 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?

gsutil cp 创建嵌套目录

如何从 Python 运行时云函数访问 Google Cloud Platform Firestore 触发器

将变量传递给 Google Cloud 函数

在本地测试 Python Google Cloud Functions

Python Google Cloud Firestore 错误 504 Deadline Exceeded