问题描述
我能够将文件从一个存储桶复制到另一个存储桶,但是不确定我是否做错了,但是我无法删除该文件。有什么想法吗?
import boto3
import os
from requests_aws4auth import AWS4Auth
session = boto3.Session()
credentials = session.get_credentials()
aws4auth = AWS4Auth(credentials.access_key,credentials.secret_key,region,service,session_token=credentials.token)
s3 = boto3.resource('s3')
name = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
s3.Meta.client.copy({'Bucket': name,'key': key},targetBucket,key)
s3.Meta.client.delete({{'Bucket': name,'key': key}})
解决方法
我建议您使用boto3 client()
而不是resource()
。无论如何,这是我为我努力的工作:
要复制文件
import boto3
client = boto3.client('s3')
copy_source = {'Bucket': 'from-bucket-s3','Key': 'cfn.json'}
client.copy(copy_source,'to-bucket-s3','other-cfn.json')
要删除文件
import boto3
client = boto3.client('s3')
client.delete_object(Bucket='to-bucket-s3',Key='other-cfn.json')
boto3 client()支持的API比resource()更为广泛
,自创建s3 = boto3.resource('s3')
以来,您可以使用它删除对象。
为此,您将创建Object,然后使用其delete方法。例如:
s3 = boto3.resource('s3')
object_to_be_deleted = s3.Object(name,key)
object_to_be_deleted.delete()
另外,由于您使用的是lambda,请确保函数的执行角色具有删除对象的权限,或者没有禁止该操作的存储桶策略。