in functions/source/DeleteBucketContents/lambda_function.py [0:0]
def delete_objects(event, _c):
bucket_name = event["ResourceProperties"]["Bucket"]
s3 = boto3.client('s3')
logger.info('Getting objects...')
objects = []
kwargs = {"Bucket": bucket_name}
while True:
versions = s3.list_object_versions(**kwargs)
if 'Versions' in versions.keys():
for v in versions['Versions']:
objects.append({'Key': v['Key'], 'VersionId': v['VersionId']})
if 'DeleteMarkers' in versions.keys():
for v in versions['DeleteMarkers']:
objects.append({'Key': v['Key'], 'VersionId': v['VersionId']})
if versions['IsTruncated']:
if versions.get('NextKeyMarker', 'null') != 'null':
kwargs["KeyMarker"] = versions['NextKeyMarker']
else:
if kwargs.get("KeyMarker"):
del kwargs["KeyMarker"]
if versions.get('NextVersionIdMarker', 'null') != 'null':
kwargs["VersionIdMarker"] = versions['NextVersionIdMarker']
else:
if kwargs.get("VersionIdMarker"):
del kwargs["VersionIdMarker"]
else:
break
if objects:
# delete objects in batches of 1000
for i in range(0, len(objects), 1000):
s3.delete_objects(
Bucket=bucket_name,
Delete={'Objects': objects[i:i + 1000]}
)