如何通过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,请确保函数的执行角色具有删除对象的权限,或者没有禁止该操作的存储桶策略。