إعداد تنبيه الفواتير للطبقة المجانية في AWS باستخدام CloudWatch
أحد أكثر الأخطاء شيوعاً عند البدء مع AWS هو اكتشاف فاتورة غير متوقعة في نهاية الشهر — خدمة تركتها تعمل، أو مورد نسيت إيقافه، والطبقة المجانية لا تغطي ما تظنه. إعداد تنبيه الفواتير في AWS CloudWatch هو أول شيء يجب فعله قبل أي شيء آخر في حسابك الجديد.
ملخص سريع (TL;DR) — إعداد تنبيه الفواتير للطبقة المجانية
| الخطوة | الإجراء | الأداة |
|---|---|---|
| 1 | تفعيل مقاييس الفواتير في إعدادات الحساب | AWS Billing Console |
| 2 | إنشاء موضوع SNS لاستقبال الإشعارات بالبريد الإلكتروني | Amazon SNS |
| 3 | تأكيد الاشتراك في البريد الإلكتروني | البريد الإلكتروني |
| 4 | إنشاء منبّه CloudWatch على مقياس EstimatedCharges بحد 5 دولارات | Amazon CloudWatch |
كيف يعمل نظام تنبيه الفواتير في AWS
قبل أن تبدأ في إنشاء أي منبّه، يجب أن تفهم لماذا لا يعمل هذا من البداية تلقائياً. مقاييس الفواتير في CloudWatch معطّلة بشكل افتراضي، وهي متاحة فقط في منطقة us-east-1 بغض النظر عن المنطقة التي تعمل فيها. هذا ليس خياراً — إنه قيد موثّق في AWS.
المقياس الذي يهمنا هو EstimatedCharges ضمن مساحة الأسماء AWS/Billing. يُحدَّث هذا المقياس عدة مرات يومياً، وليس في الوقت الفعلي — أي أن التنبيه قد يصل بعد ساعات من تجاوز الحد الفعلي. هذا سلوك موثّق وليس خللاً.
تدفق البيانات يسير هكذا: AWS تجمع بيانات الاستخدام وتحسب التكاليف التقديرية، ثم تنشرها كمقياس في CloudWatch. عندما يتجاوز المقياس العتبة التي حددتها، يُطلق CloudWatch إجراءً على موضوع SNS، الذي يرسل بدوره بريداً إلكترونياً إلى المشتركين.
- AWS Billing: تجمع بيانات الاستخدام وتحسب التكاليف التقديرية دورياً.
- CloudWatch Metric: يُنشر مقياس
EstimatedChargesفي مساحة الأسماءAWS/Billingفي منطقةus-east-1فقط. - CloudWatch Alarm: يراقب المقياس ويُطلق إجراءً عند تجاوز العتبة المحددة (5 دولارات في مثالنا).
- SNS Topic: يستقبل الإشعار من CloudWatch ويوزّعه على المشتركين.
- البريد الإلكتروني: تصل رسالة التنبيه إلى صندوق الوارد.
المتطلبات الأساسية قبل الإعداد
تحتاج إلى حساب AWS مع صلاحيات كافية لتعديل إعدادات الفواتير وإنشاء موارد CloudWatch وSNS. إذا كنت تستخدم مستخدم IAM وليس حساب الجذر، فتأكد من أن السياسة المرفقة تتضمن الصلاحيات اللازمة.
🔽 سياسة IAM المطلوبة للإعداد
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBillingAlarmSetup",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricAlarm",
"cloudwatch:DescribeAlarms",
"cloudwatch:DeleteAlarms",
"sns:CreateTopic",
"sns:Subscribe",
"sns:ListSubscriptionsByTopic",
"sns:GetTopicAttributes"
],
"Resource": "*"
},
{
"Sid": "AllowBillingPreferences",
"Effect": "Allow",
"Action": [
"aws-portal:ViewBilling",
"billing:GetBillingPreferences",
"billing:UpdateBillingPreferences"
],
"Resource": "*"
}
]
}
لاحظ أن إجراءات aws-portal وbilling تتطلب "Resource": "*" لأن AWS لا تدعم تقييد الموارد على مستوى ARN لهذه الإجراءات. تحقق دائماً من مرجع تفويض الخدمة للتأكد من أحدث الصلاحيات المدعومة.
الخطوة 1: تفعيل مقاييس الفواتير في CloudWatch
مقاييس الفواتير معطّلة افتراضياً — هذه هي النقطة التي يتعثر فيها معظم المبتدئين. يحاولون إنشاء المنبّه مباشرة ثم يتساءلون لماذا لا يجدون مقياس EstimatedCharges. السبب بسيط: لم يُفعَّل المقياس بعد.
يجب تفعيل هذا الإعداد من واجهة AWS Billing Console، وليس من CloudWatch مباشرة. لا توجد طريقة CLI مباشرة لتفعيل هذا الإعداد من خلال واجهة برمجة التطبيقات العامة — يتم ذلك عبر واجهة المستخدم في Billing Console.
الخطوات في واجهة المستخدم:
- افتح Billing Preferences في AWS Console.
- في قسم Alert preferences، فعّل خيار Receive CloudWatch Billing Alerts.
- احفظ التفضيلات.
بعد التفعيل، قد يستغرق ظهور المقياس في CloudWatch بضع ساعات. لا تنتقل للخطوة التالية وتتوقع رؤية البيانات فوراً.
الخطوة 2: إنشاء موضوع SNS لاستقبال التنبيهات
CloudWatch لا يرسل البريد الإلكتروني مباشرة — يحتاج إلى وسيط، وهو SNS. أنشئ الموضوع أولاً، ثم اربطه بالمنبّه لاحقاً.
تذكر: كل هذه الأوامر يجب تنفيذها في منطقة us-east-1 لأن مقاييس الفواتير متاحة فقط في هذه المنطقة.
aws sns create-topic \
--name billing-alarm-topic \
--region us-east-1
ستحصل على ARN للموضوع في الاستجابة، احتفظ به لأنك ستحتاجه في الخطوات التالية. سيبدو بهذا الشكل:
arn:aws:sns:us-east-1:123456789012:billing-alarm-topic
الآن اشترك في الموضوع باستخدام بريدك الإلكتروني. استبدل your-email@example.com بعنوان بريدك الفعلي، و123456789012 برقم حسابك:
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789012:billing-alarm-topic \
--protocol email \
--notification-endpoint your-email@example.com \
--region us-east-1
الخطوة 3: تأكيد الاشتراك في البريد الإلكتروني
بعد تنفيذ الأمر السابق، ستصلك رسالة بريد إلكتروني من AWS SNS تطلب منك تأكيد الاشتراك. يجب النقر على رابط التأكيد وإلا لن يصلك أي تنبيه. هذه خطوة يتجاهلها كثيرون ثم يتساءلون لماذا لا تصلهم التنبيهات.
تحقق من حالة الاشتراك بعد التأكيد:
aws sns list-subscriptions-by-topic \
--topic-arn arn:aws:sns:us-east-1:123456789012:billing-alarm-topic \
--region us-east-1
ابحث عن "SubscriptionStatus": "Confirmed" في الاستجابة. إذا رأيت PendingConfirmation، فالرسالة لم تُؤكَّد بعد.
الخطوة 4: إنشاء منبّه CloudWatch لتنبيه الفواتير
هذه هي الخطوة الجوهرية. ننشئ المنبّه على مقياس EstimatedCharges بعتبة 5 دولارات. لاحظ أن المقياس يستخدم USD كوحدة، والبُعد Currency مطلوب لتحديد العملة.
aws cloudwatch put-metric-alarm \
--alarm-name "FreeTierBillingAlarm" \
--alarm-description "تنبيه عند تجاوز التكاليف التقديرية لـ 5 دولارات" \
--metric-name EstimatedCharges \
--namespace AWS/Billing \
--statistic Maximum \
--period 86400 \
--evaluation-periods 1 \
--threshold 5 \
--comparison-operator GreaterThanOrEqualToThreshold \
--dimensions Name=Currency,Value=USD \
--alarm-actions arn:aws:sns:us-east-1:123456789012:billing-alarm-topic \
--treat-missing-data notBreaching \
--region us-east-1
شرح المعاملات الأساسية:
--period 86400: فترة التقييم 86400 ثانية (24 ساعة) — مناسبة لمقياس الفواتير الذي لا يُحدَّث بتكرار عالٍ.--statistic Maximum: نستخدم الحد الأقصى لأن مقياس الفواتير تراكمي ويرتفع مع الوقت.--treat-missing-data notBreaching: إذا لم تتوفر بيانات (مثلاً في بداية الشهر)، لا يُعتبر المنبّه في حالة إنذار.--comparison-operator GreaterThanOrEqualToThreshold: ينبّهنا عند الوصول إلى 5 دولارات أو تجاوزها.
التحقق من إعداد تنبيه الفواتير
بعد إنشاء المنبّه، تحقق من حالته. في البداية ستكون الحالة INSUFFICIENT_DATA وهذا طبيعي — المقياس يحتاج إلى دورة تحديث كاملة قبل أن ينتقل إلى OK.
aws cloudwatch describe-alarms \
--alarm-names "FreeTierBillingAlarm" \
--region us-east-1
ابحث في الاستجابة عن حقل StateValue. القيم الممكنة هي OK وALARM وINSUFFICIENT_DATA.
- INSUFFICIENT_DATA: الحالة الأولية — لا توجد بيانات كافية لتقييم المنبّه بعد.
- OK: التكاليف التقديرية أقل من العتبة المحددة (5 دولارات).
- ALARM: تجاوزت التكاليف العتبة — تم إرسال إشعار SNS وبالتالي بريد إلكتروني.
- عند انخفاض التكاليف (نادر في منتصف الشهر)، يعود المنبّه إلى حالة
OK.
خطأ شائع: المنبّه موجود لكن لا تصل رسائل
هذا السيناريو يحدث أكثر مما تتوقع. المنبّه في حالة ALARM، لكن لا يصل أي بريد إلكتروني. الافتراض الأول دائماً يكون 'مشكلة في CloudWatch'، لكن الواقع مختلف.
الأسباب الفعلية بالترتيب:
- الاشتراك في SNS لم يُؤكَّد: الأكثر شيوعاً. تحقق من حالة الاشتراك بالأمر أعلاه.
- البريد الإلكتروني في مجلد الرسائل غير المرغوب فيها (Spam): رسائل AWS SNS تُصنَّف أحياناً كـ spam.
- المنبّه مرتبط بـ ARN خاطئ لموضوع SNS: تحقق من
AlarmActionsفي وصف المنبّه. - مقاييس الفواتير لم تُفعَّل في Billing Preferences: ارجع للخطوة الأولى.
للتحقق من الإجراءات المرتبطة بالمنبّه:
aws cloudwatch describe-alarms \
--alarm-names "FreeTierBillingAlarm" \
--query 'MetricAlarms[0].AlarmActions' \
--region us-east-1
تأكد أن ARN المعروض يطابق ARN موضوع SNS الذي أنشأته.
الخلاصة والخطوات التالية لتنبيه الفواتير
إعداد تنبيه الفواتير في CloudWatch يتطلب أربع خطوات متسلسلة: تفعيل مقاييس الفواتير، إنشاء موضوع SNS، تأكيد الاشتراك، ثم إنشاء المنبّه. أي خطوة مفقودة تجعل النظام بأكمله غير فعّال بصمت.
للحماية الأفضل، فكر في إضافة تنبيهات متعددة بعتبات متدرجة (مثلاً 1 دولار، 5 دولارات، 10 دولارات) حتى تحصل على إنذار مبكر قبل الوصول إلى الحد الأقصى.
الخطوات التالية الموصى بها:
- راجع AWS Budgets للحصول على تحكم أكثر تفصيلاً في التكاليف مع إمكانية التنبيه على الخدمات الفردية.
- فعّل Free Tier Usage Alerts في Billing Preferences للحصول على تنبيهات تلقائية عند اقتراب حدود الطبقة المجانية.
- راجع تقرير Cost Explorer شهرياً لفهم مصادر التكاليف بالتفصيل.
مسرد المصطلحات
| المصطلح | التعريف |
|---|---|
EstimatedCharges |
مقياس CloudWatch يعكس التكاليف التقديرية المتراكمة للحساب خلال الشهر الحالي، يُنشر في مساحة الأسماء AWS/Billing. |
| SNS Topic | قناة اتصال في Amazon Simple Notification Service تستقبل الرسائل وتوزّعها على المشتركين عبر بروتوكولات متعددة كالبريد الإلكتروني. |
| CloudWatch Alarm | آلية مراقبة تقيّم مقياساً بشكل دوري وتُطلق إجراءً عند تجاوز عتبة محددة. |
| Free Tier | مستوى الاستخدام المجاني الذي توفره AWS لعدد من الخدمات ضمن حدود محددة للحسابات الجديدة. |
| Evaluation Period | عدد الفترات الزمنية المتتالية التي يجب أن يتجاوز فيها المقياس العتبة قبل أن يُطلق المنبّه إجراءً. |
تعليقات
إرسال تعليق