def create()

in source/cfn-s3copyobjects/cfn-s3copyobjects.py [0:0]


def create(event, context):
    ReturnId = 0
    logger.info("Got Create")
    logger.info(json.dumps(event))
    # Optionally return an ID that will be used for the resource PhysicalResourceId, 
    # if None is returned an ID will be generated. If a poll_create function is defined 
    # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId']
    #

    # Check that all the required properties are specified
    if "SourceBucket" not in event["ResourceProperties"]:
        raise ValueError("Missing property 'SourceBucket'")
    if "Bucket" not in event["ResourceProperties"]:
        raise ValueError("Missing property 'Bucket'")

    ReturnId = event["ResourceProperties"]["Bucket"]
    source_bucket = event['ResourceProperties']['SourceBucket']
    source_prefix = event['ResourceProperties'].get('SourcePrefix') or ''
    bucket = event['ResourceProperties']['Bucket']
    prefix = event['ResourceProperties'].get('Prefix') or ''
    
    try:

        paginator = client.get_paginator('list_objects_v2')
        page_iterator = paginator.paginate(Bucket=source_bucket, Prefix=source_prefix)
        for key in {x['Key'] for page in page_iterator for x in page['Contents']}:
            dest_key = os.path.join(prefix, os.path.relpath(key, source_prefix))
            print("dest_key: {}".format(dest_key))
            if not key.endswith('/'):
                print ('copy {} to {}'.format(key, dest_key))
                #client.copy_object(CopySource={'Bucket': source_bucket, 'Key': key}, Bucket=bucket, Key = dest_key, ACL='public-read')
                client.copy_object(CopySource={'Bucket': source_bucket, 'Key': key}, Bucket=bucket, Key = dest_key)
                
                logger.info("Received event: %s" % json.dumps(event))
    except Exception as e:
        raise e
    
    return ReturnId