首页 > 解决方案 > 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'"  

有人可以在这种情况下提供帮助吗?

标签: google-cloud-platformgoogle-cloud-functionsgsutil

解决方案


由于您使用的是在 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。我已经测试了代码,它对我有用。


推荐阅读