EduFlow
أساسيات AWS السحابية
⁦0%⁩

الوحدة 3 · الخدمات الأساسية

التخزين: Amazon S3 وEBS وEFS

17 دقراءة 5 داملأ الفراغات

الدرس في لمحة

خزّن ملصقات Lantern ونسخه الاحتياطية في Amazon S3 بفئة التخزين المناسبة مع تفعيل الـ versioning وBlock Public Access، واعرف متى يحتاج حمل عمل على EC2 إلى EBS أو EFS بدلًا من ذلك.

  1. 1Amazon S3: كائنات في buckets
  2. 2أقراص للخوادم: EBS وEFS

لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.

على خادم Lantern القديم، كان “التخزين” قرصًا واحدًا يمتلئ. أما على AWS فتحصل على ثلاثة أنواع مختلفة، صُمِّم كلٌّ منها لمهمة مختلفة: الكائنات (objects) في Amazon S3، والأقراص الكتلية (block disks) في Amazon EBS، والملفات المشتركة في Amazon EFS. ومعظم بيانات Lantern مكانها النوع الأول.

Amazon S3: كائنات في buckets

يخزّن S3 الكائنات (أي بايتات، حتى 50 TB لكلٍّ منها) في buckets. يُعنون الكائن بـ مفتاحه (key)، مثل posters/2026/street-food-festival.jpg. تبدو الشرطات المائلة كمجلّدات، ويرسمها الـ console كمجلّدات، لكن S3 لا يحتوي على مجلّدات: المفتاح نص واحد، وposters/2026/ بادئة (prefix). أسماء الـ buckets فريدة على مستوى AWS كلها؛ أما الـ bucket نفسه فيعيش في الـ Region التي تختارها.

Terminal
aws s3 mb s3://lantern-posters --region eu-west-1
aws s3 cp ./posters/ s3://lantern-posters/posters/ --recursive
aws s3 ls s3://lantern-posters/posters/2026/

آمن افتراضيًا، فأبقِه كذلك

تأتي الـ buckets الجديدة بثلاث حمايات مفعّلة: Block Public Access (بإعداداته الأربعة مفعّلة)، وObject Ownership مضبوطًا على bucket owner enforced (قوائم التحكّم في الوصول ACLs معطّلة، فلا تمنح الوصولَ إلا السياسات)، والتشفير الافتراضي بمفاتيح يديرها S3. تغيّر الوصول عبر سياسات الـ bucket، كما فعلت في القسم الثاني.

أبقِ Block Public Access مفعّلًا في كل bucket ليس عامًّا عن قصد، واضبطه على مستوى الحساب أيضًا، كي لا يتحوّل bucket واحد إلى عام بالخطأ:

Terminal
aws s3control put-public-access-block --account-id 111122223333 \
  --public-access-block-configuration \
  BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

في القسم الرابع يُقدَّم موقع Lantern للجمهور دون جعل أي bucket عامًّا: يقرأ CloudFront الـ bucket بشكل خاص نيابة عن الزوّار.

فئات التخزين: الـ API نفسه، وشكل سعر مختلف

لكل كائن فئة تخزين. وكلها مصمّمة لمستوى المتانة نفسه، أي إحدى عشرة تسعة (99.999999999%)؛ لكنها تختلف في طريقة الدفع.

الفئة الأنسب لـ العقبة
S3 Standard (الافتراضية) البيانات التي تُقرأ كثيرًا أعلى سعر تخزين
S3 Intelligent-Tiering نمط وصول مجهول أو متغيّر رسوم مراقبة صغيرة لكل كائن
S3 Standard-IA ما يُقرأ نحو مرة شهريًا ويحتاج إلى وصول بالمللي ثانية رسوم استرجاع، وحد أدنى 30 يومًا
S3 One Zone-IA النسخ التي يمكن إعادة إنشائها منطقة توافر واحدة فقط
S3 Glacier Instant Retrieval ما يُقرأ نحو مرة كل ربع سنة، بوصول بالمللي ثانية رسوم استرجاع أعلى، وحد أدنى 90 يومًا
S3 Glacier Flexible Retrieval الأرشيفات، والاستعادة من دقائق إلى ساعات الاستعادة قبل القراءة
S3 Glacier Deep Archive ما نادرًا ما يُلمس، والاستعادة بالساعات حد أدنى 180 يومًا

لنموذج السعر ثلاثة أجزاء: لكل غيغابايت مخزّن شهريًا، ولكل طلب، ولكل غيغابايت مسترجَع في فئات الوصول غير المتكرّر والأرشيف. فئة تخزين أرخص مع قراءات متكرّرة قد تكلّف أكثر من Standard. والكائنات الصغيرة فخ أيضًا: فئات IA تحتسب كل كائن بـ 128 KB على الأقل.

بالنسبة إلى Lantern: تبقى الملصقات الحالية في Standard، وتنتقل الملصقات الأقدم من سنة إلى Glacier Instant Retrieval (فهي ما زالت تظهر في صفحات الفعاليات القديمة)، وتذهب التصديرات الشهرية لقاعدة البيانات إلى Deep Archive.

الـ versioning: زر تراجع له ثمن

مع تفعيل الـ versioning (إدارة النسخ)، تُبقي الكتابة فوق كائن أو حذفه على النسخة القديمة. الحذف يضيف علامة حذف (delete marker) بدلًا من إتلاف البيانات، فيمكن التعافي من aws s3 rm عرضي. وبمجرد تفعيله، يمكن تعليق الـ versioning فقط، ولا يمكن إزالته كليًا أبدًا.

Terminal
aws s3api put-bucket-versioning --bucket lantern-posters \
  --versioning-configuration Status=Enabled

كل نسخة تُحتسب ككائن كامل، لذا اقرن الـ versioning بـ قاعدة دورة حياة (lifecycle rule) تنقل البيانات وتنهيها تلقائيًا:

lifecycle.json
{
  "Rules": [
    {
      "ID": "age-out-posters",
      "Filter": { "Prefix": "posters/" },
      "Status": "Enabled",
      "Transitions": [{ "Days": 365, "StorageClass": "GLACIER_IR" }],
      "NoncurrentVersionExpiration": { "NoncurrentDays": 30 }
    }
  ]
}
Terminal
aws s3api put-bucket-lifecycle-configuration --bucket lantern-posters \
  --lifecycle-configuration file://lifecycle.json

أقراص للخوادم: EBS وEFS

بعض البرمجيات تحتاج إلى نظام ملفات حقيقي. وهنا يأتي دور الخدمتين الأخريين.

يصل أي عميل إلى S3 عبر HTTPS. يُرفق volume في EBS بـ instance واحدة في EC2 داخل منطقة توافر واحدة. ويُركَّب نظام ملفات EFS على instances في منطقتي توافر في الوقت نفسه. Amazon S3 كائنات عبر API متصفّحات، Lambda، CLI AZ a EC2 instance EBS volume AZ b EC2 instance Amazon EFS
يُوصَل إلى S3 عبر HTTPS، ويُرفق EBS بـ instance واحدة، وEFS مشترك

Amazon EBS (Elastic Block Store) قرص شبكي لـ instance واحدة في EC2، ضمن منطقة توافر واحدة. وتقريبًا كل instance تُقلع من واحد منها. والنوع gp3 هو قرص SSD للأغراض العامة الذي تبدأ به. تدفع مقابل الحجم المحجوز، لا مقابل ما تملؤه، لذا فإن volume بحجم 500 GB يحمل 20 GB يكلّف ما يكلّفه volume ممتلئ. واللقطات (snapshots) تنسخ الـ volumes احتياطيًا بشكل تزايدي إلى تخزين يصمد أمام خسارة منطقة التوافر.

Amazon EFS (Elastic File System) نظام ملفات NFS مُدار تركّبه instances كثيرة، عبر مناطق التوافر، في الوقت نفسه. يكبر ويصغر مع ملفاتك ويُحتسب لكل غيغابايت مخزّن فعلًا، بسعر للغيغابايت أعلى من EBS. استخدمه حين يجب أن تتشارك عدة خوادم شجرة مجلّدات واحدة.

بالنسبة إلى Lantern، الجواب في الغالب “لا هذا ولا ذاك”: تعيش الملصقات في S3، حيث تستطيع Lambda وCloudFront الوصول إليها. ويحصل خادم الترحيل المؤقت على volume صغير واحد من نوع gp3، ولا EFS على الإطلاق.

حُسم أمر الملفات. في الدرس التالي: البيانات التي تتغيّر كل ثانية، في قاعدة بيانات.

أهم النقاط

  • يخزّن Amazon S3 الكائنات تحت مفاتيح (keys) داخل buckets، والـ buckets الجديدة تحجب الوصول العام وتعطّل الـ ACLs وتشفّر الكائنات افتراضيًا.
  • فئات التخزين تقايض بين سعر التخزين وتكلفة الاسترجاع وسرعته والحد الأدنى لمدة التخزين؛ وS3 Standard هي الفئة الافتراضية.
  • يحتفظ الـ versioning بكل نسخة من كل كائن، ما يحمي من الكتابة فوق الملفات وحذفها، لكنه يحتسب كل نسخة مخزّنة حتى تنهيها قاعدة دورة حياة (lifecycle rule).
  • Amazon EBS قرص كتلي (block) لـ instance واحدة في EC2 ضمن منطقة توافر واحدة، ويُحتسب لكل غيغابايت محجوز.
  • Amazon EFS نظام ملفات مشترك تستطيع instances كثيرة عبر مناطق التوافر تركيبه (mount) في الوقت نفسه، ويُحتسب لكل غيغابايت مخزّن فعلًا.

قراءات إضافية

تحقّق من فهمك

3 أسئلة

السؤال 1 من 3

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

السؤال 2 من 3

الـ versioning مفعّل في الـ bucket الخاص بالملصقات. أعاد أحد المنظّمين رفع الملصق نفسه 40 مرة أثناء تعديله. ماذا يحدث لتكاليف التخزين؟

السؤال 3 من 3

يجب أن تقرأ ثلاث instances في EC2، موزّعة على مناطق توافر مختلفة، مجموعةَ الملفات المرفوعة نفسها وتكتب فيها عبر مسار عادي في نظام الملفات. ماذا تستخدم؟

تدريب

املأ الفراغات

ارفع، واحمِ، وأرشِف

أكمل ثلاثة أوامر لتخزين Lantern. الخطوة 1 تنسخ المجلّد المحلي posters/ وكل مجلّداته الفرعية إلى الـ bucket بأمر النسخ. الخطوة 2 تفعّل الـ versioning. الخطوة 3 ترفع تصديرًا لقاعدة البيانات يجب الاحتفاظ به سبع سنوات بأقل سعر تخزين، مع قبول الانتظار ساعات للاستعادة. استخدم اسم فئة التخزين في الـ API، بأحرف كبيرة.

# 1. Upload the whole local posters folder, including subfolders aws s3 ./posters/ s3://lantern-posters/posters/ -- # 2. Keep old versions when posters are overwritten or deleted aws s3api put-bucket-versioning --bucket lantern-posters \ --versioning-configuration Status= # 3. Store this month's export in the cheapest archive class aws s3 cp ./exports/2026-09.sql.gz s3://lantern-backups/exports/ \ --storage-class