使用AWS Lambda执行Boto3 S3复制功能时遇到困难

 收藏

这是场景。我有一个S3存储桶(例如,daily-data-input),其中每日文件将写入特定的文件夹(例如,S3:// daily-data-input / data / test /)。每当将文件写入“ test”文件夹下时,也应将副本写入同一存储桶中的“ test_copy”文件夹中。如果“ test_copy”不存在,则应创建它。

我已经使用了S3事件通知,并将其附加到lambda函数(使用python 3.7),该函数将检查“ test_copy”键是否存在,如果不存在的话。我能够成功创建“ test_copy”文件夹,并且无法通过boto3进行S3复制。

这是供您参考的代码:

import boto3
import os
import botocore
s3 = boto3.resource('s3')
s3_cli=boto3.client('s3')

def lambda_handler(event, context):

    bucket_name = event ['Records'][0]['s3']['bucket']['name']
    bucket_key = event['Records'][0]['s3']['object']['key']
    file = (os.path.basename(bucket_key))
    source_key_path = (os.path.dirname(bucket_key))
    target_keypath = source_key_path+'_'+'copy'+'/'
    target_bucket_key = target_keypath+file
    copy_source = {'Bucket': bucket_name, 'Key': bucket_key}
    try:
        s3.Object(bucket_name, target_keypath).load()
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "404":
            # Create the key
            print ("Creating target _copy folder")
            s3_cli.put_object(Bucket=bucket_name,Key=target_keypath)
            #copy the file
            #s3.copy_object(Bucket=bucket_name, Key=target_bucket_key, CopySource=copy_source)
        else:
            print ("Something went wrong!!")
    else:
        print ("Key exists!!")
        # s3.copy_object(Bucket=bucket_name, Key=target_bucket_key, CopySource=copy_source) 

我尝试了s3.copy_object,s3_cli.meta.client.copy,bucket.copy(),但它们都不起作用。如果我做错了事,请告诉我。

回复