نحوه بازیابی کل پوشه در S3 پس از حذف تصادفی

حذف تصادفی کل پوشه (پیشوند) در آمازون S3 می تواند لحظه ای شگفت انگیز باشد. خوشبختانه، اگر نسخه سازی در سطل S3 شما فعال باشد، یک راه ساده برای بازیابی اطلاعات شما وجود دارد. این پست وبلاگ شما را در بازیابی پوشه حذف شده با استفاده از یک اسکریپت پوسته ساده راهنمایی می کند.
پيش نياز
برای بازیابی موفقیت آمیز پوشه حذف شده خود، باید نسخه سازی را در سطل هدف فعال کنید. این یک پیش نیاز حیاتی است. اگر نسخهسازی در زمان حذف فعال نبود، این بار بازیابی امکانپذیر نیست. با این حال، فعال کردن نسخه برای محافظت در آینده را در نظر بگیرید.
برای اطلاعات بیشتر در مورد فعال کردن نسخه، به مستندات AWS در نسخه S3 مراجعه کنید.
روش بازیابی
در اینجا یک راهنمای گام به گام در مورد نحوه بازیابی پوشه حذف شده آورده شده است:
-
اطمینان حاصل کنید که AWS CLI نصب شده است: برای اجرای اسکریپت بازیابی به رابط خط فرمان AWS (CLI) نیاز دارید. می توانید آن را در اینجا نصب کنید.
-
اسکریپت بازیابی را ایجاد کنید: اسکریپت زیر را به عنوان ذخیره کنید
delete_deletemarker_of_s3.sh
.#!/bin/bash # Get the time one hour ago in ISO 8601 format one_hour_ago=$(date -u -d '1 hour ago' +'%Y-%m-%dT%H:%M:%SZ') # List all the latest delete markers delete_markers=$(aws s3api list-object-versions --bucket my-bucket --prefix my-folder/ --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId, LastModified]' --output text) # Delete only the delete markers set within the last hour while IFS=$'\t' read -r key version_id last_modified; do if [[ "$last_modified" > "$one_hour_ago" ]]; then echo "Deleting delete marker for $key with version ID $version_id, set at $last_modified" aws s3api delete-object --bucket my-bucket --key "$key" --version-id "$version_id" fi done <<< "$delete_markers"
-
اسکریپت بازیابی را اجرا کنید: دستور زیر را برای اجرای اسکریپت اجرا کنید.
bash delete_deletemarker_of_s3.sh
توضیح اسکریپت
-
یک ساعت قبل وقت بگیرید: اسکریپت زمان را یک ساعت قبل از زمان فعلی در قالب ISO 8601 محاسبه می کند.
one_hour_ago=$(date -u -d '1 hour ago' +'%Y-%m-%dT%H:%M:%SZ')
-
آخرین نشانگرهای حذف را فهرست کنید: تمام آخرین نشانگرهای حذف را برای سطل و پیشوند مشخص شده فهرست می کند.
delete_markers=$(aws s3api list-object-versions --bucket my-bucket --prefix my-folder/ --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId, LastModified]' --output text)
-
نشانگرهای حذف اخیر را حذف کنید: اسکریپت از طریق نشانگرهای حذف تکرار می شود و مواردی را که در یک ساعت گذشته تنظیم شده بودند حذف می کند.
while IFS=$'\t' read -r key version_id last_modified; do if [[ "$last_modified" > "$one_hour_ago" ]]; then echo "Deleting delete marker for $key with version ID $version_id, set at $last_modified" aws s3api delete-object --bucket my-bucket --key "$key" --version-id "$version_id" fi done <<< "$delete_markers"
با حذف نشانگرهای حذف، اسکریپت حذف را لغو می کند و در واقع اشیاء حذف شده را بازیابی می کند. شرط بررسی اینکه آیا نشانگر حذف در یک ساعت گذشته تنظیم شده است، تضمین میکند که فقط حذفهای تصادفی اخیر بازیابی میشوند و از بازیابی اشیایی که عمداً در گذشته حذف شدهاند جلوگیری میکند.
اجرای اسکریپت در آمازون CloudShell
برای سهولت استفاده، می توانید این اسکریپت را در Amazon CloudShell اجرا کنید:
- Amazon CloudShell را از کنسول AWS راه اندازی کنید.
- آپلود کنید
delete_deletemarker_of_s3.sh
فایل به CloudShell. - اسکریپت را با استفاده از دستور ارائه شده در بالا اجرا کنید.
یادداشت های پایانی
حتما تعویض کنید my-bucket
با نام سطل واقعی شما و my-folder/
با نام پوشه واقعی شما (پیشوند) در اسکریپت.
با دنبال کردن این راهنما، میتوانید بهسرعت از حذفهای تصادفی در S3 بازیابی کنید، مشروط بر اینکه نسخهسازی را فعال کرده باشید. اگر نه، از این فرصت استفاده کنید و نسخهسازی را در سطلهای مهم خود فعال کنید تا از حذفهای تصادفی آینده محافظت کنید.