google-cloud-platform - Cloud Function 中的 GCP rsync 失败
问题描述
有一个共享目录(安装路径)用作源。目的地是一个存储桶。我编写了以下在执行过程中失败的云函数。从命令行,我可以运行 rsynch 功能。
def synch_data(request):
try:
proc = subprocess.Popen(["gsutil", "-m", "rsync", "/home/raw/abc_ftp_data", "gs://abc-raw"])
print("PROC is instantiated ____")
outs, errs = proc.communicate(timeout=15)
except Exception as e:
print("Exception Occure ...........",e)
outs, errs = proc.communicate()
return 'Success!'
我收到的错误如下。
[Errno 2] No such file or directory: 'gsutil': 'gsutil'"
有人可以在这种情况下提供帮助吗?
解决方案
由于您使用的是在 Python 中运行的 Google Cloud Function,因此建议您使用 Google Cloud Storage Python API 将文件上传到 Cloud Storage Bucket。
该示例可以在Cloud Storage > Uploading objects文档中找到。
这是一个示例,您可以根据需要对其进行修改:
首先在文件中添加谷歌云存储库requirements.txt
:
# Function dependencies, for example:
# package>=version
google-cloud-storage
然后添加这个附加函数并从你的主函数中调用它:
def copyToBucket(bucket_name, source_file_name, destination_blob_name):
# Import the library
from google.cloud import storage
""" Uploads a file to the bucket. """
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
print('File {} uploaded to {}.'.format(
source_file_name,
destination_blob_name))
然后你可以像这样从你的主函数调用函数:
copyToBucket("[BUCKET_NAME]", "/PATH/TO/FILE/IN/SHARED/DIRECTORY/FILE_NAME.py", "NEW_FILE_NAME.py")
只需在调用函数时修改传递给函数的参数,您的文件就会上传到所需的 Cloud Storage Bucket。我已经测试了代码,它对我有用。
推荐阅读
- swift - 我们如何在 SwiftUI 中读取和写入相同的 ObservableObject?
- java - Java中动态类添加的最佳方法
- bash - 如何将谷歌表格下载为没有 HTML 的 CSV 文件?
- python - 防止第三方模块写入相同的日志
- angular - Firebase 返回单个结果的单个字段
- python - 有没有更惯用的方法来根据列的内容从 PyArrow 表中选择行?
- vue.js - Vue CLI - 从 .scss 文件目录单独编译 CSS 文件
- angular - 无法从带有 angular-oauth2-oidc 的 Angular 7 应用程序的 keycloak openid-configuration URL(https) 获得响应
- python - pd.read_excel() 中的小数选项已弃用?
- javascript - 无法分离 JSON 的元素