ozil
ozil

Reputation: 669

how to delete a file in s3 via lambda?

I am able to copy a file from one bucket to another, but not sure if i'm doing this wrong but i can't delete the file . any thoughts?

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}})

Upvotes: 0

Views: 2460

Answers (2)

Marcin
Marcin

Reputation: 238209

Since you are creating s3 = boto3.resource('s3'), you may use it to delete the object.

For this you would create Object and then used its delete method. For example:

s3 = boto3.resource('s3')

object_to_be_deleted = s3.Object(name, key)

object_to_be_deleted.delete()

Also since you are using lambda, make sure that your function's execution role has permissions to delete the object or there are no bucket policies which prohibit such an action.

Upvotes: 1

CK__
CK__

Reputation: 1311

I would suggest you to use boto3 client() rather than resource(). Anyways, here is what I tried and worked for me:

To copy file

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')

To delete file

import boto3


client = boto3.client('s3')

client.delete_object(Bucket='to-bucket-s3', Key='other-cfn.json')

boto3 client() supports vast number of APIs than resource()

Upvotes: 1

Related Questions