Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.

Commit ee1d8e7

Browse files
angelarwmikedeck
authored andcommitted
ImageProc module: move the src of lambda functions into the src folder
1 parent 1775119 commit ee1d8e7

File tree

14 files changed

+82
-53
lines changed

14 files changed

+82
-53
lines changed

ImageProcessing/lambda/copy-s3-object/index.py

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import os
2+
import json
3+
import cfnresponse
4+
5+
import boto3
6+
from botocore.exceptions import ClientError
7+
8+
client = boto3.client('s3')
9+
10+
import logging
11+
12+
logger = logging.getLogger()
13+
logger.setLevel(logging.INFO)
14+
15+
16+
def handler(event, context):
17+
logger.info("Received event: %s" % json.dumps(event))
18+
source_bucket = event['ResourceProperties'].get('SourceBucket') or None
19+
source_prefix = event['ResourceProperties'].get('SourcePrefix') or ''
20+
bucket = event['ResourceProperties'].get('Bucket') or None
21+
prefix = event['ResourceProperties'].get('Prefix') or ''
22+
request_type = event.get('RequestType') or None
23+
24+
result = cfnresponse.SUCCESS
25+
26+
if request_type == None:
27+
cfnresponse.send(event, context, result, {})
28+
29+
try:
30+
if request_type == 'Create' or request_type == 'Update':
31+
result = copy_objects(source_bucket, source_prefix, bucket, prefix)
32+
elif request_type == 'Delete':
33+
result = delete_objects(bucket, prefix)
34+
except ClientError as e:
35+
logger.error('Error: %s', e)
36+
result = cfnresponse.FAILED
37+
38+
39+
cfnresponse.send(event, context, result, {})
40+
41+
42+
def copy_objects(source_bucket, source_prefix, bucket, prefix):
43+
if source_bucket == None or bucket == None:
44+
return cfnresponse.SUCCESS
45+
46+
paginator = client.get_paginator('list_objects_v2')
47+
page_iterator = paginator.paginate(Bucket=source_bucket, Prefix=source_prefix)
48+
try:
49+
for key in {x['Key'] for page in page_iterator for x in page['Contents']}:
50+
source_key = key
51+
dest_key = os.path.join(prefix, os.path.relpath(key, source_prefix))
52+
print 'copy {} to {}'.format(key, dest_key)
53+
client.copy_object(CopySource={'Bucket': source_bucket, 'Key': key}, Bucket=bucket, Key=dest_key)
54+
except KeyError as e:
55+
logger.error('Error: %s', e)
56+
57+
return cfnresponse.SUCCESS
58+
59+
60+
def delete_objects(bucket, prefix):
61+
if bucket == None:
62+
return cfnresponse.SUCCESS
63+
64+
versioning = client.get_bucket_versioning(Bucket=bucket)
65+
versioning_status = versioning.get('Status') or 'Disabled'
66+
if versioning_status == 'Enabled':
67+
paginator = client.get_paginator('list_object_versions')
68+
page_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix)
69+
try: objects = [{'Key': x['Key'],'VersionId': x['VersionId']} for page in page_iterator for x in page['Versions']]
70+
except KeyError: objects = None
71+
72+
else:
73+
paginator = client.get_paginator('list_objects_v2')
74+
page_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix)
75+
try: objects = [{'Key': x['Key']} for page in page_iterator for x in page['Contents']]
76+
except KeyError: objects = None
77+
78+
if objects != None:
79+
client.delete_objects(Bucket=bucket, Delete={'Objects': objects})
80+
81+
return cfnresponse.SUCCESS

0 commit comments

Comments
 (0)