为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只名叫tom的猫 2021-10-10 13:55:18
我正在尝试使用 GC 函数(相当于 AWS Lambda)将文件从 GCS 移动到 s3 存储桶。为了实现它,我尝试了 3 种不同的方法。在方法 1 中,我得到错误,虽然我在其他 2 个选项中没有得到错误,但文件实际上并没有被复制。有人可以帮忙吗?另外两种方法都标有#,我分别尝试了每一种。s3_client.upload_file 不起作用,因为它需要源文件的路径,当我提供“gs://<google_bucket_name>/30327570.pdf”时,它说'不存在这样的文件或目录'gustil 命令正确执行,没有错误,但没有在 s3 存储桶中创建新文件。import osfrom google.cloud import storageimport boto3import subprocesss3_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')
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超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 = event


try:

    print(f"Processing file: {file['name']}.")

    s3.upload_file(f"gs://<GCS_BUCKET_NAME>/{file['name']}", "<S3_BUCKET_NAME", "textfile.txt")

    print(f"Processed file: {file['name']} successful.")

    return True

except FileNotFoundError:

    print(f"The file was not found: {file['name']}")

    return False

except NoCredentialsError:

    print(f"Credentials not available {file['name']}")

    return False


查看完整回答
反对 回复 2021-10-10
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果gsutil rsync不起作用,您可以尝试使用rclone,或反转过程以将数据从 S3 迁移到 GCS。


查看完整回答
反对 回复 2021-10-10
  • 3 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信