我正在尝试使用GC函数(相当于AWS Lambda)将文件从GCS移到s3存储桶。为此,我尝试了3种不同的方法。在方法1中,我得到了错误,而在其他2个选项中我没有得到错误,但文件实际上并没有被复制。
有人可以帮忙吗?
另外两个方法都用#标记,我分别尝试了每个方法。
s3_client.upload_file无法正常工作,因为它需要源文件的路径,并且当我提供“ gs://
“不存在此类文件或目录”
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')
答案 0 :(得分:0)
如果gsutil rsync不起作用,则可以尝试使用rclone,或将过程倒换为migrate data from S3 to GCS。
答案 1 :(得分:0)
尽管这是用JavaScript编写的,但是这里有一个Google Cloud Function,可以将文件从GCS存储桶同步到S3存储桶:
答案 2 :(得分:0)
我曾尝试以相同的方式将文件从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