AWS Lambda,使用python在s3存储桶之间复制

时间:2018-07-13 18:18:10

标签: amazon-web-services amazon-s3 aws-lambda boto3

因此,我正在编写lambda函数,女巫是由S3 PUT触发的,

import datetime
import boto3
import botocore

#boto3.set_stream_logger('botocore', level='DEBUG')

def lambda_handler(event, context):

    src_bucket_name=event['Records'][0]['s3']['bucket']['name']
    print src_bucket_name
    file = event['Records'][0]['s3']['object']['key']
    split_string = file.split('/')
    file_string = split_string[-1].split('_')
    fecha_str = event['Records'][0]['eventTime']
    fecha_real=datetime.datetime.strptime(fecha_str, '%Y-%m-%dT%H:%M:%S.%fZ')+ datetime.timedelta(hours=-6)

    new_path='PATH/'+file_string[0].lower()+'/'+str(fecha_real.year)+'/'+str(fecha_real.month)+'/'+split_string[-1]


    s3 = boto3.resource('s3')
    s3_client = boto3.client('s3')


    copy_source = {
        'Bucket': src_bucket_name,
        'Key': file
    }

    s3.meta.client.copy(copy_source, DST_BUCKET_NAME, new_path)

当我运行代码时 ClientError:调用HeadObject操作时发生错误(404):未找到

文件确实存在 file in source_bucket

能告诉我我在做什么错吗?

编辑:

我向管理员授予了我正在使用的角色的权限,但仍然出现相同的错误。

UPDATE-CLOSED:

我删除了角色,做了一个新角色,将复制部分的代码更改为此:

copy_source = {
    'Bucket': src_bucket_name,
    'Key': file
}

r = s3_client.copy_object(
    Bucket=[DST_BUCKET_NAME],
    CopySource=copy_source,
    Key=new_path
)

成功了!

0 个答案:

没有答案