لماذا لا نستخدم Google Cloud CDN؟
أولًا، يتطلب Google Cloud CDN إعداد Google Cloud Load Balancer أمام حاوية التخزين (bucket) أو الخدمة الخلفية. ورغم قوته، فإنه يضيف طبقة خدمة إضافية بتكاليف إضافية تبدأ عادةً من 20 إلى 30 دولارًا شهريًا بحسب حجم الزيارات والإعدادات.
في المقابل، يوفر AWS CloudFront باقة مجانية تشمل 1 تيرابايت من نقل البيانات الصادرة و10 ملايين طلب HTTP/HTTPS شهريًا بلا حد زمني، ما قد يخفض التكاليف بشكل كبير للمواقع ذات الزيارات المنخفضة إلى المتوسطة.
ونظرًا لتعقيد Google Cloud CDN وهيكل تكاليفه، بما في ذلك الـ Load Balancer الإلزامي، يختار كثير من المستخدمين AWS CloudFront أو شبكات CDN بديلة للحصول على حل أبسط وأوفر، خاصةً عند استخدامه مع Google Cloud Storage.
الباقة المجانية في AWS CloudFront
اعتبارًا من عام 2025، يقدم AWS CloudFront الحدود الشهرية التالية ضمن الباقة المجانية:
- 1 تيرابايت من نقل البيانات الصادرة إلى الإنترنت.
- 10 ملايين طلب HTTP أو HTTPS.
- 2 مليون استدعاء لـ CloudFront Functions.
هذه الباقة المجانية متاحة بلا حد زمني لجميع مستخدمي AWS، ما يتيح توصيل كمية كبيرة من المحتوى عالميًا دون أي رسوم طالما بقيت ضمن الحدود.
ميزة إضافية: إخفاء اسم حاوية Google Cloud Storage
روابط الوصول المباشر إلى حاويات Google Cloud Storage تكشف أسماء الحاويات (مثل https://storage.googleapis.com/my-bucket-name/...)، وقد تكشف معلومات تفضّل إبقاءها خاصة. ومع الإعداد التالي سنخفي اسم الحاوية من الرابط كميزة إضافية.
خطوة بخطوة: كيفية إعداد AWS CloudFront مع Google Cloud Storage
الخطوة 1: تسجيل الدخول إلى AWS Console
- انتقل إلى AWS Console وسجّل الدخول.
- افتح CloudFront من قائمة الخدمات (Services).
الخطوة 2: تجهيز حاوية Google Cloud Storage
- اجعل حاوية Google Cloud Storage متاحة للوصول العام.
- انسخ رابط الحاوية، على سبيل المثال:
storage.googleapis.com/BUCKET_NAME
الخطوة 3: إنشاء توزيع (Distribution) في CloudFront
- في CloudFront، انقر على Create Distribution.
- اختر Web كطريقة للتوصيل.
- في حقل Origin Domain Name، أدخل الرابط العام للحاوية.
- عدّل الإعدادات حسب الحاجة:
- سياسة بروتوكول العارض (Viewer Protocol Policy): إعادة توجيه HTTP إلى HTTPS.
- سياسات التخزين المؤقت (Cache Policies): استخدم الإعداد الافتراضي أو خصّصها.
الخطوة 4: انتظار نشر التوزيع
- انقر على Create distribution.
- انتظر حتى تتغير الحالة من In Progress إلى Deployed (قد يستغرق ذلك 10–20 دقيقة).
الخطوة 5: إصلاح خطأ “NoSuchBucket” باستخدام Lambda@Edge
سيُرجع توزيع CloudFront في البداية الخطأ “NoSuchBucket” لأن ترويسة Host لا تطابق ما تتوقعه Google. ولإصلاح ذلك، أنشئ دالة Lambda@Edge لتعديل ترويسة Host إلى storage.googleapis.com.
- انتقل إلى AWS Lambda وأنشئ دالة جديدة باسم ModifyGoogleStorageHost باستخدام هذا الكود:
export const handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
// Change the Host header to your desired origin domain
request.headers['host'] = [{ key: 'Host', value: 'storage.googleapis.com' }];
callback(null, request);
};
-
انشر إصدارًا جديدًا من الدالة:
- انقر على Actions > Publish new version.
- انسخ الـ ARN الخاص بالإصدار (ARN الدالة الذي يتضمن رقم الإصدار).
-
اربط دالة Lambda@Edge بتوزيع CloudFront:
- في CloudFront، انتقل إلى تبويب Behaviors.
- عدّل السلوك الافتراضي (default behavior).
- مرّر إلى قسم Function Associations.
- اختر Origin Request والصق ARN دالة Lambda.
- احفظ التغييرات.
الخطوة 6: تحديث سياسة الثقة لدور IAM
- في AWS IAM، حدّد الدور المرتبط بدالة Lambda.
- عدّل Trust relationships وحدّث المفتاح Service ليصبح كالتالي:
[
"lambda.amazonaws.com",
"edgelambda.amazonaws.com"
]
مثال:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"edgelambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
- احفظ سياسة الثقة المحدّثة.
الخطوة الأخيرة: انتظار نشر CloudFront
امنح CloudFront وقتًا كافيًا لنشر هذه التغييرات عالميًا. وبعد النشر، ستُعدَّل الترويسات بشكل صحيح في الطلبات التي تمر عبر توزيع CloudFront، وسيُقدَّم محتوى Google Cloud Storage بسلاسة عبر شبكة AWS CloudFront CDN.