مفاهيم FinOps
ما هو FinOps؟
FinOps (العمليات المالية) ممارسة ثقافية وانضباط يعظّمان القيمة التجارية للسحابة من خلال مساعدة فرق الهندسة والمالية والأعمال على التعاون في قرارات الإنفاق السحابي.
┌─────────────────────────────────────────────────────────────┐
│ FINOPS - المراحل الثلاث │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1. الإعلام 2. التحسين │ │
│ │ ─────────── ─────────── │ │
│ │ • رؤية التكاليف • ضبط الحجم │ │
│ │ • التخصيص • الحجز/التوفير │ │
│ │ • الميزانيات • Spot Instances │ │
│ │ • التنبؤات • التنظيف │ │
│ │ │ │
│ │ ↓ │ │
│ │ │ │
│ │ 3. التشغيل │ │
│ │ ───────── │ │
│ │ • الحوكمة │ │
│ │ • الأتمتة │ │
│ │ • التحسين المستمر │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
AWS Cost Explorer
التنقل والتحليل
┌─────────────────────────────────────────────────────────────┐
│ AWS COST EXPLORER │
├─────────────────────────────────────────────────────────────┤
│ │
│ العروض الرئيسية : │
│ │
│ 1. حسب الخدمة │
│ ┌─────────────────────────────────────────────────┐ │
│ │ EC2 ████████████████████ $1,200 (40%)│ │
│ │ RDS ██████████ $600 (20%) │ │
│ │ S3 ████████ $450 (15%) │ │
│ │ Lambda ██████ $300 (10%) │ │
│ │ Other █████ $450 (15%) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 2. حسب العلامة │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Env:Production ██████████████████ $2,100 │ │
│ │ Env:Staging ████████ $600 │ │
│ │ Env:Dev ████ $300 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 3. حسب الحساب │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Prod Account ██████████████████ $2,100 │ │
│ │ Dev Account ████████ $600 │ │
│ │ Shared Services ████ $300 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
استراتيجية وضع العلامات
العلامات الأساسية
┌─────────────────────────────────────────────────────────────┐
│ استراتيجية وضع العلامات │
├─────────────────────────────────────────────────────────────┤
│ │
│ العلامات الإلزامية : │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ العلامة قيم المثال الهدف │ │
│ │ ─── ─────────────── ─── │ │
│ │ Environment prod/staging/dev البيئة │ │
│ │ Project webapp/api/batch المشروع │ │
│ │ Owner team-infra المسؤول │ │
│ │ CostCenter CC-1234 الفوترة │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ العلامات الموصى بها : │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Application nom-application التعريف │ │
│ │ CreatedBy terraform/console التتبع │ │
│ │ ExpiryDate 2024-12-31 التنظيف │ │
│ │ Compliance pci/hipaa الامتثال │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ المثال الكامل : │
│ { │
│ "Environment": "production", │
│ "Project": "ecommerce-api", │
│ "Owner": "team-backend", │
│ "CostCenter": "CC-5678", │
│ "Application": "checkout-service", │
│ "CreatedBy": "terraform" │
│ } │
│ │
└─────────────────────────────────────────────────────────────┘
فرض العلامات
# قاعدة AWS Config للتحقق من العلامات الإلزامية
aws configservice put-config-rule \
--config-rule '{
"ConfigRuleName": "required-tags-ec2",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "REQUIRED_TAGS"
},
"InputParameters": "{\"tag1Key\":\"Environment\",\"tag2Key\":\"Project\",\"tag3Key\":\"Owner\"}",
"Scope": {
"ComplianceResourceTypes": ["AWS::EC2::Instance"]
}
}'
ضبط الحجم
تحديد الموارد المفرطة الحجم
┌─────────────────────────────────────────────────────────────┐
│ ضبط الحجم │
├─────────────────────────────────────────────────────────────┤
│ │
│ المقاييس للتحليل : │
│ │
│ متوسط استخدام CPU < 20% │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Instance CPU Avg RAM Avg التوصية │ │
│ │ ──────── ─────── ─────── ────────────── │ │
│ │ i-web1 15% 30% تقليل │ │
│ │ i-web2 45% 60% موافق │ │
│ │ i-db1 80% 85% زيادة ؟ │ │
│ │ i-batch 5% 10% Spot أو أصغر │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ قواعد الإبهام : │
│ │
│ CPU < 20% لمدة 14+ يومًا → مرشح للتقليل │
│ CPU > 80% بشكل متكرر → مرشح للزيادة │
│ Memory < 30% → احتمال الإفراط في الحجم │
│ │
│ AWS COMPUTE OPTIMIZER : │
│ خدمة مجانية تحلل تلقائيًا وتوصي بأنواع المثيلات المناسبة │
│ │
└─────────────────────────────────────────────────────────────┘
خيارات التسعير
المقارنة
┌─────────────────────────────────────────────────────────────┐
│ خيارات التسعير EC2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ النوع التوفير الالتزام حالة الاستخدام │
│ ──── ──────── ────────── ─────────── │
│ │
│ On-Demand 0% لا يوجد Dev, tests │
│ (حسب الطلب) الارتفاعات غير المتوقعة │
│ │
│ Reserved (RI) 30-60% 1-3 سنوات الإنتاج │
│ Standard نوع ثابت مستقر │
│ │
│ Reserved (RI) 20-40% 1-3 سنوات الإنتاج │
│ Convertible مرن متطور │
│ │
│ Savings Plans 30-50% 1-3 سنوات Compute │
│ Compute مرن متعدد الخدمات │
│ │
│ Spot 60-90% لا يوجد Batch, CI/CD │
│ Instances قابل للمقاطعة متسامح │
│ │
│ مثال على التوفير السنوي (m5.large في us-east-1) : │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ On-Demand : $0.096/h × 8760h = $840/سنة │ │
│ │ 1yr RI : $0.060/h × 8760h = $525/سنة (-37%) │ │
│ │ 3yr RI : $0.040/h × 8760h = $350/سنة (-58%) │ │
│ │ Spot : ~$0.030/h × 8760h = $263/سنة (-69%) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
تنظيف الموارد
الموارد المنسية بشكل شائع
┌─────────────────────────────────────────────────────────────┐
│ الموارد اليتيمة │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. وحدات EBS غير المرفقة │
│ aws ec2 describe-volumes \ │
│ --filters Name=status,Values=available │
│ → حذف أو لقطة وحذف │
│ │
│ 2. Elastic IPs غير المستخدمة │
│ aws ec2 describe-addresses \ │
│ --filters Name=association-id,Values="" │
│ → التكلفة : $3.65/شهر إذا لم تكن مرفقة ! │
│ │
│ 3. اللقطات القديمة │
│ aws ec2 describe-snapshots --owner-ids self \ │
│ --query 'Snapshots[?StartTime<`2023-01-01`]' │
│ → تقييم وحذف القديمة │
│ │
│ 4. AMIs القديمة │
│ الاحتفاظ فقط بآخر N من الإصدارات │
│ │
│ 5. موازنات التحميل غير المستخدمة │
│ ALB/NLB بدون أهداف │
│ → تكلفة ثابتة حتى بدون حركة مرور │
│ │
│ 6. بوابات NAT غير المستخدمة │
│ → $32/شهر كحد أدنى + البيانات │
│ النظر في NAT Instance للتطوير │
│ │
│ 7. مثيلات RDS المتوقفة │
│ ⚠️ تعيد التشغيل تلقائيًا بعد 7 أيام ! │
│ → لقطة وحذف إذا لم تكن بحاجة │
│ │
└─────────────────────────────────────────────────────────────┘
سكربت التنظيف
#!/bin/bash
# cleanup-orphans.sh
echo "=== البحث عن الموارد اليتيمة ==="
echo -e "\n1. وحدات EBS غير المرفقة:"
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size,CreateTime]' \
--output table
echo -e "\n2. Elastic IPs غير المستخدمة:"
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' \
--output table
echo -e "\n3. اللقطات > 90 يومًا:"
NINETY_DAYS_AGO=$(date -d '90 days ago' '+%Y-%m-%d')
aws ec2 describe-snapshots --owner-ids self \
--query "Snapshots[?StartTime<'${NINETY_DAYS_AGO}'].[SnapshotId,VolumeSize,StartTime]" \
--output table
echo -e "\n4. موازنات التحميل بدون أهداف:"
for alb in $(aws elbv2 describe-load-balancers --query 'LoadBalancers[*].LoadBalancerArn' --output text); do
targets=$(aws elbv2 describe-target-groups --load-balancer-arn $alb --query 'TargetGroups[*].TargetGroupArn' --output text)
if [ -z "$targets" ]; then
echo "ALB بدون أهداف: $alb"
fi
done
echo -e "\n=== التحليل مكتمل ==="
AWS Budgets
التكوين
┌─────────────────────────────────────────────────────────────┐
│ AWS BUDGETS │
├─────────────────────────────────────────────────────────────┤
│ │
│ أنواع الميزانيات : │
│ │
│ • Cost Budget : حد الإنفاق │
│ • Usage Budget : حد الاستخدام (ساعات، جيجابايت) │
│ • Reservation Budget : تغطية RI/Savings Plans │
│ │
│ مثال على التكوين : │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ اسم الميزانية: Monthly-Production │ │
│ │ المبلغ: $5,000 │ │
│ │ الفترة: شهري │ │
│ │ │ │
│ │ التنبيهات: │ │
│ │ • 50% ($2,500) → بريد إلكتروني معلومات │ │
│ │ • 80% ($4,000) → بريد إلكتروني تحذير │ │
│ │ • 100% ($5,000) → بريد إلكتروني + رسالة نصية │ │
│ │ • 110% متوقع → بريد إلكتروني تنبيه │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
# إنشاء ميزانية
aws budgets create-budget \
--account-id 123456789012 \
--budget '{
"BudgetName": "Monthly-Limit",
"BudgetLimit": {
"Amount": "5000",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' \
--notifications-with-subscribers '[{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80
},
"Subscribers": [{
"SubscriptionType": "EMAIL",
"Address": "team@example.com"
}]
}]'
ملخص التوصيات
| المجال | الإجراء | التوفير المحتمل |
|---|---|---|
| Tagging | تنفيذ العلامات الإلزامية | الرؤية |
| Right-sizing | تقليل المثيلات غير المستغلة | 20-40% |
| Reserved/SP | الالتزام بالحمل المستقر | 30-60% |
| Spot | الاستخدام للأحمال المرنة | 60-90% |
| Nettoyage | حذف الموارد اليتيمة | 10-20% |
| Budgets | تنبيهات استباقية | التحكم |
القسم التالي : مختبر FinOps