OOPS! By mistake, you have deleted the object from s3 in the production environment. How to retrieve it?
First, let’s understand how Amazon S3 works… When you delete an object from a version-enabled bucket, Amazon S3 creates a delete marker for the object. The delete marker becomes the current version of the object, and the actual object becomes the previous version. With a delete marker, Amazon S3 responds to requests for the object as though the object was deleted. For example, if you send a GET request for the object, Amazon S3 returns an error.
Let’s modify the below script according to your file path and run it!!!
#! /bin/bash
# List of file paths to be restored!
arr=(s3://restoring_archived_bucket_test/rollups/user_id=1210/user_performance=rollups_i/yr=2020/month=9/day=2020-09-09/hour=all_hours/part-00000-28107112-478b-47ae-89cf-c71dc873e9c9.c000.snappy.parquet s3://restoring_archived_bucket_test/rollups/user_id=1210/user_performance=rollups_i/yr=2020/month=9/day=2020-09-10/hour=all_hours/part-00000-28107112-482c-47ae-89cf-c71dc873e9c9.c000.snappy.parquet)
for i in "${arr[@]}"
do
echo $i
[[ $i =~ (s3://restoring_archived_bucket_test/)(.*) ]] # Modify bucket name
prefix=${BASH_REMATCH[2]}
version=`aws s3api list-object-versions --bucket restoring_archived_bucket_test --prefix $prefix --query 'Versions[0].VersionId' --output text` # Modify bucket name
[[ $i =~ (s3://restoring_archived_bucket_test/)(.*)(all_hours/)(.*) ]] # Modify bucket name and last prefix of file path
full_path=${BASH_REMATCH[1]}${BASH_REMATCH[2]}${BASH_REMATCH[3]}
file_name=${BASH_REMATCH[4]}
aws s3api get-object --bucket restoring_archived_bucket_test --key $prefix --version-id $version $file_name # Modify bucket name
aws s3 cp $file_name $full_path
done
Comments