如何解决如何通过lambda删除s3中的文件?
我能够将文件从一个存储桶复制到另一个存储桶,但是不确定我是否做错了,但是我无法删除该文件。有什么想法吗?
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,请确保函数的执行角色具有删除对象的权限,或者没有禁止该操作的存储桶策略。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。