如何使用云函数调用 gsutil 或使用 GCS 对象的路径将数据从 GCS 移动到 s3 存储桶

我正在尝试使用 GC 函数(相当于 AWS Lambda)将文件从 GCS 移动到 s3 存储桶。为了实现它,我尝试了 3 种不同的方法。在方法 1 中,我得到错误,虽然我在其他 2 个选项中没有得到错误,但文件实际上并没有被复制。


有人可以帮忙吗?


另外两种方法都标有#,我分别尝试了每一种。


s3_client.upload_file 不起作用,因为它需要源文件的路径,当我提供“gs://<google_bucket_name>/30327570.pdf”时,它说


'不存在这样的文件或目录'


gustil 命令正确执行,没有错误,但没有在 s3 存储桶中创建新文件。


import os

from google.cloud import storage

import boto3

import subprocess


s3_client=boto3.client('s3',aws_access_key_id='XYZ',aws_secret_access_key='ABC')

client = storage.Client()

def hello_gcs(data, context):

    bucket = client.get_bucket(data['bucket'])

    blob = bucket.blob(data['name'])

   #subprocess.call(['gsutil -m rsync -r gs://<google_bucket_name>/30327570.pdf s3://<aws_bucket_name>'], shell=True)

    subprocess.call(['gsutil cp gs://<google_bucket_name>/30327570.pdf s3://<aws_bucket_name>'], shell=True)

   #s3_client.upload_file('gs://<google_bucket_name>/30327570.pdf','<aws_bucket_name>','30327570.pdf')


一只名叫tom的猫
浏览 254回答 3
3回答

牛魔王的故事

我尝试以同样的方式将文件从 GCS 复制到 S3,但它不起作用。@Karan:我读到您找到了使用云函数将文件从 GCS 复制到 S3 的解决方案。可以在这里发布您的最终脚本吗?错误消息是“找不到文件”,我尝试设置文件的完整路径,但它也不起作用。def hello_gcs(event, context):s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)file = eventtry:&nbsp; &nbsp; print(f"Processing file: {file['name']}.")&nbsp; &nbsp; s3.upload_file(f"gs://<GCS_BUCKET_NAME>/{file['name']}", "<S3_BUCKET_NAME", "textfile.txt")&nbsp; &nbsp; print(f"Processed file: {file['name']} successful.")&nbsp; &nbsp; return Trueexcept FileNotFoundError:&nbsp; &nbsp; print(f"The file was not found: {file['name']}")&nbsp; &nbsp; return Falseexcept NoCredentialsError:&nbsp; &nbsp; print(f"Credentials not available {file['name']}")&nbsp; &nbsp; return False

宝慕林4294392

如果gsutil rsync不起作用,您可以尝试使用rclone,或反转过程以将数据从 S3 迁移到 GCS。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python