AWS للمبتدئين: S3، وإلغاء التكرار (Deduplication)، والروابط الموقعة مسبقاً (Presigned URLs)
توقف عن بناء تطبيقات تجريبية. ابدأ في بناء أنظمة إنتاجية.
إذا كان خادمك قابلاً للاستبدال، فلا يمكن لملفاتك أن تعيش على قرصه الصلب. أنت بحاجة إلى AWS S3. S3 هو تخزين كائني (object storage)، وهو يعمل بشكل مستقل عن خوادمك. يضمن ذلك بقاء ملفاتك حتى لو تعطل خادمك أو اختفى.
إليك كيفية بناء تدفق احترافي لرفع الملفات:
استخدم حاويات (Buckets) ومفاتيح (Keys) S3 الـ bucket هو الحاوية الخاصة بك. والـ key هو المسار الكامل لملفك. لا يحتوي S3 على مجلدات حقيقية، بل يستخدم بادئات (prefixes) في بنية مسطحة. يمكنك تنظيم الملفات حسب النوع، مثل
images/أوdocuments/للحفاظ على الترتيب.قم بتنفيذ خاصية إلغاء تكرار المحتوى (Content Deduplication) لا تدفع ثمن الملف نفسه مرتين. استخدم خوارزمية SHA-256 لإنشاء بصمة فريدة لكل ملف. إذا قام مستخدمان برفع نفس الصورة تماماً، فسيكون الـ hash متطابقاً. تحقق من قاعدة البيانات بحثاً عن هذا الـ hash قبل الرفع إلى S3. إذا كان الـ hash موجوداً، فقم بإعادة استخدام الملف الموجود.
استخدم البث (Streaming) للملفات الكبيرة لا تقم أبداً بتحميل فيديو بحجم 200 ميجابايت في ذاكرة الوصول العشوائي (RAM) الخاصة بخادمك لمجرد حساب الـ hash له. استخدم Node.js streams لمعالجة الملفات في أجزاء صغيرة (chunks). هذا يحافظ على سرعة خادمك ويمنع الانهيارات.
فرض قيود على حجم الملف التحقق من جهة العميل (frontend) هو فقط من أجل تجربة المستخدم، وليس للأمان. يجب عليك فرض قيود الحجم على ثلاث طبقات: • من جهة العميل (Client-side) من أجل تجربة المستخدم. • التحقق من جهة الخادم (Backend) لرفض الطلبات غير الصالحة مبكراً. • شروط S3 عبر الروابط الموقعة مسبقاً (presigned URLs) لإيقاف عمليات الرفع الضخمة من المصدر.
استخدم الروابط الموقعة مسبقاً (Presigned URLs) للأمان لا تجعل الـ bucket الخاص بك عاماً. أبقِ خيار "Block all public access" مفعلاً. بدلاً من ذلك، قم بإنشاء رابط موقع مسبقاً (presigned URL). يمنح هذا المستخدم إذناً مؤقتاً لرفع ملف واحد محدد. يمكنك تحديد وقت انتهاء الصلاحية. استخدم فترات زمنية قصيرة للملفات الصغيرة وفترات أطول لرفع مقاطع الفيديو الكبيرة.
التحقق من عملية الرفع لا تثق أبداً في العميل. بعد الرفع، استخدم أمر
HeadObjectللتحقق مما إذا كان الملف موجوداً بالفعل في S3 وما إذا كان الحجم يطابق سجلاتك.
تدفق الإنتاج (The Production Flow):
- يطلب العميل رابط رفع.
- يقوم الخادم بالتحقق من الحجم والنوع والبحث عن التكرارات.
- يقوم الخادم بإنشاء رابط موقع مسبقاً (presigned URL) محدد النطاق.
- يقوم العميل برفع الملف مباشرة إلى S3.
- يؤكد الخادم وجود الملف عبر
HeadObject.
ابنِ أنظمة آمنة افتراضياً.
المصدر: https://dev.to/surajrkhonde/aws-for-newbies-episode-2-3jg5
