الجزء 16 من سلسلة تعلّم AWS من الصفر

S3: فئات التخزين ودورة الحياة

مو كل ملف يستاهل نفس السعر. تعرف على فئات تخزين S3 من Standard إلى Deep Archive، ومتى تختار كل وحدة، وكيف تنقل قواعد دورة الحياة ملفاتك تلقائياً، وتوفر كثير على فاتورتك.

في هذا المقال
  1. المتانة والتوفر
  2. الفئات
  3. دورة الحياة (Lifecycle)
  4. كيف تعرف وش تختار؟
  5. عملي: فئات وقاعدة دورة حياة
  6. الخلاصة
  7. اختبر نفسك

في الجزء الخامس عشر خزّنا كل شي بالطريقة الافتراضية. بس فكر في تطبيقك: صورة منتج تنطلب كل ثانية، وفاتورة عمرها خمس سنين ما يفتحها أحد إلا وقت التدقيق. ليش تدفع عليهم نفس السعر؟

فئات التخزين تعطيك هذا الخيار: كل ما قل الوصول للملف، قل سعر تخزينه، وزادت تكلفة أو مدة استرجاعه.

المتانة والتوفر

مصطلحين لازم تفرق بينهم:

  • المتانة (Durability): هل بيضيع الملف؟ 99.999999999% لكل الفئات، مع ملاحظة إن الفئات بمنطقة توفر واحدة تضيع بياناتها لو تدمرت المنطقة.
  • التوفر (Availability): هل تقدر توصل له الحين؟ يختلف من فئة لفئة، مثلاً 99.99% لـ Standard.

الفئات

الفئة تناسب الاسترجاع أقل مدة السعر التقريبي
Standard بيانات تنطلب كثير فوري ما فيه 0.023
Intelligent-Tiering نمط وصول غير معروف فوري في الطبقات التلقائية ما فيه حسب الطبقة
Standard-IA مرة في الشهر تقريباً فوري، مع رسم استرجاع 30 يوم 0.0125
One Zone-IA بيانات تقدر تعيد إنشاءها فوري، مع رسم 30 يوم 0.01
Glacier Instant Retrieval مرة في ثلاثة أشهر فوري، مع رسم أعلى 90 يوم 0.004
Glacier Flexible Retrieval مرة أو مرتين في السنة من دقايق إلى ساعات 90 يوم 0.0036
Glacier Deep Archive أقل من مرة في السنة من 12 إلى 48 ساعة 180 يوم 0.00099

الأسعار بالدولار لكل جيجابايت في الشهر، تقريبية لمناطق أمريكا، فراجع صفحة الأسعار لمنطقتك.

وكل هذي الفئات تحفظ البيانات في ثلاث مناطق توفر أو أكثر، إلا One Zone-IA. وعندك كمان S3 Express One Zone: أداء عالي جداً بزمن استجابة أقل من 10 ملي ثانية، في منطقة توفر واحدة، بحاوية من نوع خاص، وسعره أعلى. يناسب التحليل وتدريب النماذج اللي تحتاج سرعة كبيرة.

Intelligent-Tiering: لو ما تعرف

لو ما تدري كم بينطلب الملف، هذي الفئة تنقله لحالها حسب الاستخدام:

الطبقة متى الاسترجاع
Frequent Access البداية فوري
Infrequent Access بعد 30 يوم بدون وصول فوري
Archive Instant Access بعد 90 يوم بدون وصول فوري
Archive Access اختيارية، من 90 يوم ساعات
Deep Archive Access اختيارية، من 180 يوم حتى 12 ساعة

تدفع رسم مراقبة بسيط لكل كائن، وما فيه رسوم استرجاع، ولو انطلب الملف يرجع للطبقة الأولى.

Glacier Flexible و Deep Archive: طلب قبل القراءة

في هذي الفئات ما تقدر تقرأ الملف مباشرة، لازم تطلب استرجاعه أول، وتختار السرعة:

الفئة Expedited Standard Bulk
Flexible Retrieval 1 إلى 5 دقايق 3 إلى 5 ساعات 5 إلى 12 ساعة
Deep Archive ما فيه 12 ساعة 48 ساعة

دورة الحياة (Lifecycle)

ما تحتاج تنقل الملفات بيدك. قواعد Lifecycle تسوي هذا تلقائياً حسب عمر الملف. مثلاً سجلات تطبيق:

يوم 0 Standard يوم 30 Standard-IA يوم 90 Glacier Flexible يوم 365 Deep Archive يوم 2555 حذف تخزين أرخص، واسترجاع أبطأ وأغلى
قاعدة واحدة تنقل الملف عبر الفئات مع تقدم عمره، ثم تحذفه بعد سبع سنين.

والقاعدة فيها نوعين من الإجراءات، وتطبقها على بادئة أو وسم محدد:

الإجراء أمثلة
Transition انقل الملف لفئة أرخص بعد عدد أيام
Expiration احذف الملف بعد مدة، أو الإصدارات القديمة، أو الرفعات اللي ما اكتملت

وأشياء تنتبه لها:

  • النقل نازل فقط على السلم، وأقل مدة قبل Standard-IA هي 30 يوم.
  • الملفات الأصغر من 128 KB ما تنتقل افتراضياً، لأن تكلفة نقلها أكبر من توفيرها.
  • النقل نفسه له رسم لكل ألف كائن، فانتبه للملايين من الملفات الصغيرة.

كيف تعرف وش تختار؟

ما تحتاج تخمن. عندك أدوات تقرأ استخدامك الفعلي:

  • Storage Class Analysis: تراقب الوصول لبادئة أو حاوية، وتقترح متى تنقل من Standard إلى Standard-IA.
  • Storage Lens: لوحة على مستوى الحسابات كلها: الأحجام والنمو والحاويات اللي فيها رفعات ناقصة أو بدون تشفير. ولها مقاييس مجانية وأخرى متقدمة مدفوعة.

ولو عندك ملايين الملفات وتبي تسوي شي عليها مرة وحدة، زي تغيير الفئة أو النسخ، S3 Batch Operations تنفذه على قائمة من S3 Inventory، مع تقرير بالنتائج.

وفي المقابل، لو تشارك بيانات ضخمة مع جهة ثانية، Requester Pays تخليهم يدفعون تكلفة الطلبات والتحميل بدالك.

ولو بترفع ملايين الملفات الصغيرة اللي ما تقرأها وحدة وحدة، مثل السجلات، اجمعها في أرشيف واحد أول. كل PUT طلب مدفوع، فرفعة وحدة كبيرة ممكن تكلف أقل بكثير من مليون رفعة صغيرة.

عملي: فئات وقاعدة دورة حياة

بنكمل بالحاوية من الجزء السابق. لو انتهت جلسة CloudShell، حط اسمها في BUCKET من جديد. ارفع ملف في فئة محددة، وشوف الفئة:

Bash
echo "monthly report" > report.txt

aws s3 cp report.txt s3://$BUCKET/reports/report.txt --storage-class STANDARD_IA

aws s3api head-object --bucket $BUCKET --key reports/report.txt \
  --query StorageClass

الحين أضف قاعدة دورة الحياة اللي في الرسم على بادئة logs/:

Bash
aws s3api put-bucket-lifecycle-configuration --bucket $BUCKET \
  --lifecycle-configuration '{
  "Rules": [{
    "ID": "logs-rule",
    "Status": "Enabled",
    "Filter": {"Prefix": "logs/"},
    "Transitions": [
      {"Days": 30, "StorageClass": "STANDARD_IA"},
      {"Days": 90, "StorageClass": "GLACIER"},
      {"Days": 365, "StorageClass": "DEEP_ARCHIVE"}
    ],
    "Expiration": {"Days": 2555},
    "AbortIncompleteMultipartUpload": {"DaysAfterInitiation": 7}
  }]
}'

aws s3api get-bucket-lifecycle-configuration --bucket $BUCKET \
  --query "Rules[0].Transitions" --output table

وهذا الجزء الممتع: ارفع ملف لـ Glacier، وحاول تقراه:

Bash
echo "old invoice" > old.txt
aws s3 cp old.txt s3://$BUCKET/archive/old.txt --storage-class GLACIER

aws s3 cp s3://$BUCKET/archive/old.txt -

بيرجع خطأ InvalidObjectState، لأن الملف محفوظ لكنه ما ينقرأ مباشرة. اطلب استرجاعه:

Bash
aws s3api restore-object --bucket $BUCKET --key archive/old.txt \
  --restore-request '{"Days": 1, "GlacierJobParameters": {"Tier": "Standard"}}'

aws s3api head-object --bucket $BUCKET --key archive/old.txt \
  --query "[StorageClass,Restore]"

بتشوف ongoing-request="true". وبعد 3 إلى 5 ساعات يصير false، ويتوفر نسخة مؤقتة تقراها ليوم واحد.

الخلاصة

  • كل ما قل الوصول، قل سعر التخزين، وزادت تكلفة الاسترجاع أو مدته.
  • لو ما تعرف نمط الوصول، Intelligent-Tiering ينقل الملفات لحاله.
  • انتبه لـ أقل مدة تخزين وأقل حجم محسوب ورسوم الاسترجاع.
  • Lifecycle تنقل الملفات وتحذفها تلقائياً، وأضف قاعدة للرفعات الناقصة دايماً.
  • Storage Lens وStorage Class Analysis تقرر بأرقام، مو بالتخمين.

اختبر نفسك

قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.

السؤال 1 من 5

شركة ناشئة تطلق منصة بيانات جديدة. بعض الملفات ممكن تبقى أشهر ما أحد يلمسها وبعدين تنقرأ كثير، وما أحد يقدر يتوقع أيها. وتبي تخفض تكلفة التخزين، بدون رسوم استرجاع وبدون قواعد تديرها. أي فئة تناسب؟

اعرض الجواب

الجواب الصحيح: D

تراقب استخدام كل ملف وتنقله بين الطبقات لحالها، مقابل رسم مراقبة بسيط وبدون رسوم استرجاع.

  • A: هذي فيها رسم على كل استرجاع، فالملف اللي ينقرأ كثير ممكن تصير تكلفته أعلى.
  • B: هذي فيها رسم استرجاع كمان، وتحفظ البيانات في منطقة توفر وحدة.
  • C: الملفات هنا تحتاج استرجاع قبل القراءة، وممكن ياخذ ساعات.

للمراجعة: Intelligent-Tiering: لو ما تعرف في هذا الجزء، وManaging storage costs with Amazon S3 Intelligent-Tiering في وثائق AWS.

السؤال 2 من 5

خدمة فيديو تحتفظ بنسخ منخفضة الدقة من أفلامها، وتقدر تعيد إنتاجها من الأصول في أي وقت. وكل نسخة تنقرأ مرة في الشهر تقريباً، ولازم تفتح فوراً. أي فئة أقل تكلفة وتحقق هذا؟

اعرض الجواب

الجواب الصحيح: B

النسخ ممكن تنعاد، فخسارتها مع منطقة توفر مو كارثة، وما تحتاج تدفع على ثلاث مناطق. والاسترجاع يبقى فوري.

  • A: هذي تنفع، بس بسعر أعلى على حماية هذي البيانات ما تحتاجها.
  • C: الاسترجاع هنا ياخذ من 12 إلى 48 ساعة.
  • D: الملفات هنا تحتاج استرجاع قبل القراءة، ياخذ من دقايق لساعات.

للمراجعة: الفئات في هذا الجزء، وUnderstanding and managing Amazon S3 storage classes في وثائق AWS.

السؤال 3 من 5

سجلات تطبيق شركة لازم تبقى مقروءة فوراً 30 يوم، ثم تتأرشف بسعر رخيص سنة، ثم تنحذف. والفريق ما يبي أي سكربتات يشغلها. وش يناسب؟

اعرض الجواب

الجواب الصحيح: A

قاعدة Lifecycle تنقل الملفات لفئة أرخص عند العمر اللي تحدده، وتحذفها بعدين، بدون أي شي تشغله أنت.

  • B: هذا ينفع، بس هو كود لازم تكتبه وتصونه.
  • C: هذا يعرض لك أرقام، وما ينقل ولا يحذف شي.
  • D: هذا يزيد النسخ، وما يأرشف الأصول ولا يحذفها.

للمراجعة: دورة الحياة (Lifecycle) في هذا الجزء، وManaging the lifecycle of objects في وثائق AWS.

السؤال 4 من 5

سكربت مدقق يحاول يقرأ ملف حجمه 20 ميجابايت محفوظ في Glacier Flexible Retrieval، ويطلع له خطأ InvalidObjectState. والمدقق يحتاج الملف خلال 10 دقايق. وش يسوي الفريق؟

اعرض الجواب

الجواب الصحيح: C

في هذي الفئة لازم ينسترجع الملف قبل ما ينقرأ، وExpedited عادةً يجهز ملف بهذا الحجم خلال 1 إلى 5 دقايق.

  • A: الصلاحية الناقصة ترجّع AccessDenied، مو هذا الخطأ.
  • B: هذا أرخص خيار، بس ياخذ من 5 إلى 12 ساعة.
  • D: نقل Lifecycle ينزل مع الدرج بس، وما يرجع أبداً إلى Standard.

للمراجعة: Glacier Flexible و Deep Archive: طلب قبل القراءة في هذا الجزء، وUnderstanding archive retrieval options في وثائق AWS.

السؤال 5 من 5

عشان يوفر، رفع فريق ملايين الصور بحجم 10 كيلوبايت إلى Standard-IA. والتطبيق يقرأها طول اليوم، والفاتورة زادت. أي سببين يفسرون هذا؟ (اختر اثنين.)

اعرض الجواب

الجواب الصحيح: B + C

الصورة بحجم 10 كيلوبايت تنحسب 128 كيلوبايت في هذي الفئة، وسعر التخزين المنخفض ما يفيد إلا مع البيانات اللي نادراً تنقرأ. وبيانات بهذا الصغر وهذا الاستخدام مكانها Standard.

  • A: رسم المراقبة حق Intelligent-Tiering.
  • D: سعر الجيجابايت فيها أقل، وعشان كذا تبدو مغرية.
  • E: تستخدم ثلاث مناطق أو أكثر زي Standard، فالتكلفة الزيادة مو من هنا.

للمراجعة: الفئات في هذا الجزء، وUnderstanding and managing Amazon S3 storage classes في وثائق AWS.

بياناتك الحين في المكان المناسب بالسعر المناسب، بس مين يقدر يوصل لها؟ في الجزء السابع عشر نغطي التشفير والروابط الموقّعة والقفل ضد الحذف.