[{"data":1,"prerenderedAt":34},["ShallowReactive",2],{"snippet-lambda-function-retrieve-deleted-s3-versioned-objects":3},{"id":4,"title":5,"contributors":6,"description":8,"extension":9,"gitHub":10,"introBox":13,"languages":18,"meta":20,"resources":21,"services":22,"snippets":24,"stem":29,"tags":30,"type":32,"__hash__":33},"snippets\u002Fsnippets\u002Flambda-function-retrieve-deleted-s3-versioned-objects.json","Lambda function to retrieve deleted S3 versioned objects",[7],"content\u002Fcontributors\u002Farun-thangavel.json","This function will help to retrieve the S3 objects that's deleted in a versioning-enabled bucket.","json",{"template":11},{"repoURL":12},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-snippets\u002Ftree\u002Fmain\u002Flambda-function-retrieve-deleted-s3-versioned-objects",{"headline":14,"text":15},"How it works",[16,17],"This snipped creates a Lambda function in Python helps to retrieve an S3 object that was deleted in a versioning-enabled bucket.","This function will only retrieve S3 Objects which has Delete Marker as Latest Version.",[19],"Python",{},null,[23],"lambda-event-functions",[25],{"title":26,"language":27,"code":28},"Copy the code into Lambda","py","import json\nimport boto3\n\ns3 = boto3.client('s3')\n\n# Below Lambda function will help to retrieve S3 objects that was deleted in a versioning-enabled bucket.\n# Note: This function will only retrieve S3 Objects which has Delete Marker as Latest Version\n\n# Specify the S3 Bucket Name\nbucket = 'bucket-name'\n\n# Specify the prefix to limit the search to the key name prefix\n# Example with Prefix Value: prefixValue = 'folder1\u002Ffolder2\u002Ffilename.jpg'\n# Or leave it empty with quotes to restore the whole S3 Bucket\n# Example with Empty Value: prefixValue = ''\nprefixValue = 'folder1\u002Ffolder2\u002Ffilename.jpg'\nprefixStr = f'with prefix value \"{prefixValue}\"' if len(prefixValue) > 0 else f''\n\n\ndef lambda_handler(event, context):\n    # Get the bucket name and prefix from the S3 event\n    # bucket = event['Records'][0]['s3']['bucket']['name']\n    # prefixValue = event['Records'][0]['s3']['object']['key']\n\n    try:\n        versions = s3.list_object_versions(Bucket=bucket, Prefix=prefixValue)\n        objectWithLatestDeleteMarker = []\n        if 'DeleteMarkers' in versions:\n            for version in versions['DeleteMarkers']:\n                if version['IsLatest']:\n                    objectWithLatestDeleteMarker.append({\n                        'Key': version['Key'],\n                        'VersionId': version['VersionId']\n                    })\n\n            if len(objectWithLatestDeleteMarker) > 0:\n                # Performs Single Delete Request with all the identified S3 Objects with latest DeleteMarker; Max 1000 Objects per request.\n                s3.delete_objects(\n                    Bucket=bucket,\n                    Delete={\n                        'Objects': objectWithLatestDeleteMarker,\n                        'Quiet': True\n                    }\n                )\n                return {\n                    'statusCode': 200,\n                    'body': json.dumps(\n                        f'Success: retrieved \"{len(objectWithLatestDeleteMarker)}\" S3 object(s) from bucket \"{bucket}\" {prefixStr}')\n                }\n            else:\n                return {\n                    'statusCode': 200,\n                    'body': json.dumps(\n                        f'There is no S3 object(s) with Delete Marker as Latest Version in your bucket \"{bucket}\" {prefixStr}')\n                }\n        else:\n            return {\n                'statusCode': 200,\n                'body': json.dumps(\n                    f'There is no S3 object(s) with Delete Marker as Latest Version in your bucket \"{bucket}\" {prefixStr}')\n            }\n    except Exception as e:\n        print(e)\n        print(\n            f'Error: while retrieving the S3 object(s) from bucket \"{bucket}\" {prefixStr}')\n        raise e\n","snippets\u002Flambda-function-retrieve-deleted-s3-versioned-objects",[31],"Amazon S3","Integration","uElj7k-iSFCN5nzyGYgSz0gKMQzV1HiVB6wozAXe9Oc",1792578864441]