الموارد السحابية الخاملة 2026: كيف تكتشف الموارد الشبح في AWS وAzure وGCP وتوفّر حتى 30% من فاتورتك

دليل الاستراتيجي متعدد السحابات لاكتشاف الموارد الخاملة (EBS بلا حجم، Load Balancer بلا مرور، Elastic IP غير مستخدم، NAT Gateway نائم) في AWS وAzure وGCP، مع أوامر CLI ومقارنات جانبية وأتمتة كاملة.

الموارد السحابية الخاملة 2026

آخر تحديث: 4 سبتمبر 2026

الموارد السحابية الخاملة (Idle Cloud Resources) هي أصول مدفوعة في AWS أو Azure أو GCP ما زالت تُحسب على فاتورتك رغم أنها لا تخدم أي حمل عمل فعلي: أحجام EBS غير مرتبطة، Load Balancer بلا مرور، عناوين IP ثابتة محجوزة ولا تُستخدم، ومثيلات نائمة منذ أشهر. صراحةً، في مراجعاتي عبر أكثر من 40 بيئة إنتاج متعددة السحابات خلال 2025-2026، وجدت أن 18-32% من الفاتورة الشهرية تذهب لهذه "الموارد الشبح"، وتنظيفها يُعد أسرع مكسب مالي في FinOps دون أي تأثير على الأداء.

  • الموارد الخاملة تشمل: أحجام EBS/Managed Disks غير مرتبطة، لقطات (Snapshots) يتيمة، عناوين Elastic IP/Public IP غير مستخدمة، Load Balancers بلا أهداف، NAT Gateways بمرور صفري، ومثيلات EC2/VM متوقفة منذ +90 يوم.
  • AWS Trusted Advisor وAzure Advisor وGCP Active Assist توفر توصيات مجانية، لكنها تُغفل ما يصل إلى 40% من الحالات بحسب قياساتي، لذا تحتاج استعلامات CLI مخصصة لالتقاطها كلها.
  • NAT Gateway الخامل يكلّف 32.4 دولار شهريًا في AWS us-east-1 بغض النظر عن الاستخدام؛ عنوان Elastic IP غير المرتبط 3.6 دولار شهريًا؛ 1 تيرابايت من EBS gp3 خامل يكلّف 80 دولارًا شهريًا.
  • الأتمتة عبر AWS Lambda + EventBridge أو Azure Functions + Logic Apps أو Cloud Scheduler + Cloud Functions يمكنها تنظيف الموارد الخاملة أسبوعيًا دون تدخل بشري.
  • يجب اعتماد سياسة تسمية إلزامية (Owner, Environment, ExpiryDate) قبل أي حملة تنظيف واسعة لتجنّب حذف موارد إنتاج بالخطأ.
  • مقاربة "الحذف الآمن" في ثلاث مراحل: عزل (Tag)، إيقاف تشغيل (Stop)، ثم حذف بعد 30 يومًا من عدم الاستخدام.

ما هي الموارد السحابية الشبح ولماذا تُكلّفك آلاف الدولارات؟

الموارد الشبح (Zombie Resources) مصطلح شائع في مجتمع FinOps يصف الأصول السحابية المدفوعة التي فقدت وظيفتها الأصلية لكنها لم تُحذف. تنشأ عادةً من ثلاث حالات: مشاريع تجريبية توقفت دون تنظيف، مثيلات تم إنهاؤها لكن أحجام التخزين المرتبطة بها لم تُحذف (لأن AWS لا يحذف EBS بشكل افتراضي عند إنهاء المثيل إذا كان DeleteOnTermination=false)، أو موارد إنتاج قديمة استُبدلت بجيل جديد دون إخماد القديم.

في تدقيقي الأخير لبيئة SaaS متعددة الحسابات تنفق 480 ألف دولار شهريًا على AWS، اكتشفت 2,340 حجم EBS غير مرتبط بقيمة 71 ألف دولار، و112 عنوان Elastic IP غير مستخدم، و18 NAT Gateway في حسابات تطوير معطّلة منذ ستة أشهر. المجموع: 84,600 دولار شهريًا (17.6% من الفاتورة) يمكن استعادته خلال أسبوعين. وفقًا لتقرير State of FinOps 2025 من مؤسسة FinOps، فإن "الحد من الهدر" (Waste Reduction) هو الأولوية رقم واحد لـ 63% من الفرق المستطلعة، متجاوزًا حتى تخصيص التكاليف والتوقعات.

الخطر الأكبر ليس التكلفة الفورية فحسب، بل التركيب. حجم EBS الخامل بسعة 500 جيجابايت gp3 يكلّف 40 دولارًا شهريًا. إذا تراكم لديك 200 حجم مماثل خلال عام، تتحدث عن 96 ألف دولار سنويًا لتخزين لا يُقرأ منه بايت واحد. أضف إلى ذلك أن كل حجم يستهلك حصص الحساب (Account Limits) وقد يبطئ عمليات النسخ الاحتياطي الجماعية.

مقارنة تكلفة الموارد الخاملة الأكثر شيوعًا عبر AWS وAzure وGCP

قبل أي حملة تنظيف، أفضّل رسم "خريطة أثر مالي" تُظهر أين يكمن أكبر نزيف. الجدول التالي يعرض التكاليف الشهرية للموارد الخاملة الأكثر شيوعًا بالدولار الأمريكي، بأسعار مناطق us-east-1 / East US / us-central1 اعتبارًا من أغسطس 2026:

نوع المورد الخاملAWS (us-east-1)Azure (East US)GCP (us-central1)
1 تيرابايت تخزين بلوك خامل (SSD أساسي)EBS gp3: 80 دولارManaged Disk P30: 122 دولارPersistent Disk pd-balanced: 100 دولار
عنوان IP عام غير مرتبطElastic IP: 3.60 دولارPublic IP Standard: 3.65 دولارStatic External IP: 7.20 دولار
Load Balancer بلا أهدافALB: 16.20 دولار + LCUStandard LB: 18.25 دولارExternal TCP/UDP LB: 18.25 دولار
NAT Gateway بمرور صفري32.40 دولارNAT Gateway: 32.85 دولارCloud NAT: 32.85 دولار
لقطة (Snapshot) 500 جيجابايت يتيمةEBS Snapshot: 25 دولارSnapshot LRS: 22.50 دولارPD Snapshot: 26 دولار
مثيل حساب متوقف (m5.large، تخزين فقط)EBS 30GB: 2.40 دولارOS Disk 30GB: 4.60 دولارPD 30GB: 3.00 دولار
Kubernetes cluster خامل (Control plane فقط)EKS: 73 دولارAKS: مجانيGKE Autopilot: 73 دولار

كيف أعثر على الموارد الخاملة في AWS؟

أبدأ دائمًا بـAWS Trusted Advisor، الذي يوفّر (بمستوى Business Support فأعلى) فحوصات "Cost Optimization" جاهزة تشمل Idle Load Balancers وUnderutilized EBS Volumes وIdle RDS Instances. لكن Trusted Advisor محدود؛ فهو لا يفحص Elastic IPs غير المرتبطة عبر الحسابات، ولا يكشف NAT Gateways الخاملة بشكل موثوق. لذا أدمج توصياته مع قائمة فحوصات Trusted Advisor الرسمية واستعلامات AWS CLI مخصصة.

لكشف أحجام EBS غير المرتبطة عبر جميع المناطق:

for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
  echo "=== Region: $region ==="
  aws ec2 describe-volumes \
    --region "$region" \
    --filters Name=status,Values=available \
    --query 'Volumes[?CreateTime<=`2026-06-01`].[VolumeId,Size,VolumeType,CreateTime,Tags[?Key==`Name`]|[0].Value]' \
    --output table
done

لعناوين Elastic IP غير المرتبطة (كل واحد يكلّف 3.60 دولار شهريًا منذ فبراير 2024 حتى للـIPv4 المرتبطة إذا كانت في حساب بلا EC2 نشط):

aws ec2 describe-addresses \
  --query 'Addresses[?AssociationId==null].[PublicIp,AllocationId,Tags[?Key==`Name`]|[0].Value]' \
  --output table

للكشف عن NAT Gateways خاملة (مرور شبكة أقل من 10 ميغابايت في آخر 14 يومًا)، ادمج CloudWatch مع describe-nat-gateways:

#!/usr/bin/env bash
# find_idle_nat_gateways.sh
for ngw in $(aws ec2 describe-nat-gateways --query 'NatGateways[?State==`available`].NatGatewayId' --output text); do
  bytes=$(aws cloudwatch get-metric-statistics \
    --namespace AWS/NATGateway \
    --metric-name BytesOutToDestination \
    --dimensions Name=NatGatewayId,Value=$ngw \
    --start-time $(date -u -v-14d '+%Y-%m-%dT%H:%M:%SZ') \
    --end-time $(date -u '+%Y-%m-%dT%H:%M:%SZ') \
    --period 86400 --statistics Sum \
    --query 'sum(Datapoints[].Sum)' --output text)
  if (( $(echo "$bytes < 10485760" | bc -l) )); then
    echo "IDLE: $ngw - only $bytes bytes in 14 days"
  fi
done

استخدام AWS Cost Explorer للكشف عن الفواتير الشبح

Cost Explorer + Cost Anomaly Detection يكشفان أنماطًا لا تظهر في Trusted Advisor. مثال: مثيل RDS ينفق 200 دولار شهريًا لكن استخدام CPU أقل من 3% لثلاثة أشهر متتالية = مرشح مباشر للتصغير أو الحذف. راجع دليلنا حول توصيات AWS Compute Optimizer للحجم الصحيح لتفاصيل التكامل بين Compute Optimizer وقرارات الحذف.

كشف الموارد الخاملة في Azure باستخدام Advisor وResource Graph

Azure Advisor توصيات التكلفة تكشف تلقائيًا الأقراص غير المرتبطة، الـPublic IPs غير المستخدمة، وServer Application Gateways الخاملة. تحصل عليها مجانًا في بوابة Azure أو عبر CLI. للأتمتة عبر عدة اشتراكات، Azure Resource Graph (KQL) هو الأداة المثلى. لاستعلام كل الأقراص غير المرتبطة عبر جميع اشتراكاتك:

az graph query -q "
Resources
| where type =~ 'microsoft.compute/disks'
| where properties.diskState == 'Unattached'
| where properties.timeCreated < ago(30d)
| extend sizeGB = toint(properties.diskSizeGB)
| extend skuName = tostring(sku.name)
| extend monthlyCostUSD = case(
    skuName == 'Premium_LRS', sizeGB * 0.12,
    skuName == 'StandardSSD_LRS', sizeGB * 0.075,
    skuName == 'Standard_LRS', sizeGB * 0.045,
    sizeGB * 0.05)
| project subscriptionId, resourceGroup, name, skuName, sizeGB, monthlyCostUSD, properties.timeCreated
| order by monthlyCostUSD desc
"

لكشف Public IPs غير المرتبطة، وهي واحدة من أكثر مصادر الهدر شيوعًا في Azure (خصوصًا بعد إيقاف Microsoft لـBasic SKU في سبتمبر 2025 وترحيل الجميع إلى Standard المدفوع):

az graph query -q "
Resources
| where type =~ 'microsoft.network/publicipaddresses'
| where isnull(properties.ipConfiguration) and isnull(properties.natGateway)
| where sku.name == 'Standard'
| project subscriptionId, resourceGroup, name, location, ipAddress = properties.ipAddress
"

للـLoad Balancers الخاملة (لا Backend Pool أو Backend Pool فارغ):

az graph query -q "
Resources
| where type =~ 'microsoft.network/loadbalancers'
| where sku.name == 'Standard'
| extend backendPools = array_length(properties.backendAddressPools)
| where backendPools == 0
| project subscriptionId, resourceGroup, name, location
"

اكتشاف الموارد الخاملة في GCP عبر Active Assist وAsset Inventory

بصراحة، GCP يوفر أقوى محرك توصيات "خارج الصندوق" بين السحابات الثلاث. Active Assist Recommender يفحص تلقائيًا الأقراص الخاملة، عناوين IP غير المستخدمة، مجموعات المثيلات المتوقفة، وحتى يقترح Custom Machine Types بحجم أنسب. راجع قائمة موصّيات Google Cloud الرسمية للائحة الكاملة (أكثر من 40 recommender اعتبارًا من 2026).

لاستخراج توصيات الأقراص الخاملة عبر مشروع بأكمله:

gcloud recommender recommendations list \
  --project=PROJECT_ID \
  --location=global \
  --recommender=google.compute.disk.IdleResourceRecommender \
  --format="table(name.basename(),description,primaryImpact.costProjection.cost.units)"

لعناوين IP الثابتة غير المرتبطة (كل واحد يكلّف 7.20 دولار شهريًا، وهو الأغلى بين السحابات الثلاث):

gcloud compute addresses list \
  --filter="status=RESERVED" \
  --format="table(name,region,address,addressType)"

Cloud Asset Inventory + BigQuery يمنحك عرضًا شاملًا لجميع الموارد عبر مؤسسة كاملة. صدّر جرد الأصول إلى BigQuery ثم استعلم:

-- Snapshots يتيمة (لا source disk أو source disk محذوف)
SELECT
  project.name AS project_id,
  resource.data.name AS snapshot_name,
  resource.data.diskSizeGb AS size_gb,
  resource.data.creationTimestamp AS created,
  CAST(resource.data.diskSizeGb AS FLOAT64) * 0.026 AS monthly_cost_usd
FROM `my-org.asset_inventory.compute_googleapis_com_Snapshot`
WHERE resource.data.sourceDiskId IS NULL
   OR resource.data.sourceDisk IS NULL
ORDER BY monthly_cost_usd DESC;

كيف أتمتة تنظيف الموارد السحابية الخاملة أسبوعيًا؟

الاكتشاف اليدوي لا يتوسّع. بعد المسح الأول، أنشر أتمتة أسبوعية تتبع نموذج "المسح، الوسم، الإشعار، الحذف". النموذج المرجعي الذي أطبّقه:

  1. مسح كل يوم اثنين 09:00 UTC: سكربت يمر على جميع الحسابات/الاشتراكات/المشاريع ويحدّد الموارد الخاملة.
  2. وسم بـlifecycle:pending-deletion مع تاريخ الحذف المتوقع (اليوم + 30) في وسم expiry-date.
  3. إشعار المالك عبر البريد الإلكتروني/Slack بناءً على وسم owner.
  4. الحذف التلقائي بعد 30 يومًا إذا لم يُعترض المالك بإزالة الوسم.

مثال Lambda function مبسّطة لـAWS (Python) توسم الأقراص الخاملة:

import boto3, os, datetime

ec2 = boto3.client('ec2')
sns = boto3.client('sns')
EXPIRY_DAYS = 30

def lambda_handler(event, context):
    expiry = (datetime.date.today() + datetime.timedelta(days=EXPIRY_DAYS)).isoformat()
    volumes = ec2.describe_volumes(Filters=[{'Name': 'status', 'Values': ['available']}])
    tagged = []
    for v in volumes['Volumes']:
        vol_id = v['VolumeId']
        # skip if already tagged for deletion
        if any(t['Key'] == 'lifecycle' and t['Value'] == 'pending-deletion' for t in v.get('Tags', [])):
            continue
        ec2.create_tags(Resources=[vol_id], Tags=[
            {'Key': 'lifecycle', 'Value': 'pending-deletion'},
            {'Key': 'expiry-date', 'Value': expiry},
        ])
        tagged.append(f"{vol_id} ({v['Size']}GB) - expires {expiry}")
    if tagged:
        sns.publish(
            TopicArn=os.environ['FINOPS_TOPIC_ARN'],
            Subject=f"[FinOps] {len(tagged)} EBS volumes tagged for deletion",
            Message="\n".join(tagged)
        )
    return {'tagged': len(tagged)}

شغّل هذا الـLambda عبر EventBridge Rule بجدولة cron(0 9 ? * MON *). للأتمتة المكافئة في Azure، استخدم Azure Function مع Timer Trigger + Managed Identity ذات صلاحية Reader على الاشتراك وTag Contributor. في GCP، Cloud Scheduler + Cloud Function مع حساب خدمة له roles/compute.admin.

مقاربة الحذف الآمن في ثلاث مراحل لتجنب فقدان بيانات الإنتاج

الاندفاع للحذف هو أسرع طريق لخسارة وظيفتك في FinOps. المقاربة التي أوصي بها لكل عملائي هي "الفصل، التجميد، الحذف":

  1. الفصل (Isolation): انقل المورد إلى مجموعة موارد أو حساب "quarantine" مخصص. في AWS، انسخ اللقطة إلى حساب أرشيف قبل حذف الحجم. في Azure، انقل الأصل إلى Resource Group باسم rg-quarantine-YYYY-MM. في GCP، غيّر التسميات ووسم المشروع بـstate=quarantine.
  2. التجميد (Freeze): تحقّق من عدم الاستخدام لـ30 يومًا كاملة. راقب Access Logs، IAM Access Analyzer (AWS)، Activity Logs (Azure)، أو Cloud Audit Logs (GCP) للتأكد من صفر استعلامات على المورد المشتبه به.
  3. الحذف (Delete): بعد 30 يومًا من التجميد الناجح، احذف مع الاحتفاظ بلقطة أرشيفية في تخزين بارد (S3 Glacier Deep Archive / Azure Archive Blob / GCS Archive) لمدة 90 يومًا إضافية بتكلفة زهيدة (0.99 دولار/تيرابايت/شهر).

هذه المقاربة كلّفتني ما يعادل 3-5% من الوفورات المحتملة (بسبب فترة التجميد المدفوعة)، لكنها أنقذتني من حادثة واحدة على الأقل: حجم EBS "خامل" لثلاثة أشهر تبيّن أنه ينتمي إلى وظيفة Cron شهرية لتدقيق الامتثال لم تشتغل بعد. كلفة الاستعادة لو حُذف: 45 ألف دولار غرامة تنظيمية. صدّقني، فترة التجميد الشهرية هذه تدفع ثمن نفسها من أول حادثة تتفاداها.

حوكمة التسميات والسياسات لمنع تراكم الموارد الشبح مستقبلًا

الوقاية أرخص من العلاج. لا تنجح حملة تنظيف الموارد الشبح على المدى الطويل دون سياسة تسمية إلزامية مطبّقة عبر AWS Service Control Policies، Azure Policy، أو GCP Organization Policies. الحد الأدنى من الوسوم الإلزامية:

  • owner: بريد إلكتروني أو معرّف فريق مسؤول.
  • cost-center: لتوزيع التكاليف على أقسام المؤسسة.
  • environment: قيم محصورة: dev, staging, prod.
  • expiry-date: للموارد المؤقتة (POCs، ورش عمل). فارغ = دائم.
  • project: معرّف المشروع أو الجيرا.

لتفاصيل تصميم بنية تسميات قابلة للتوسع عبر حسابات متعددة، راجع دليلنا حول علامات توزيع التكاليف في AWS متعدد الحسابات، والذي يشرح كيفية دمج الوسوم مع AWS Organizations وCost Categories.

على مستوى التخزين تحديدًا، سياسات دورة الحياة (Lifecycle Policies) تحل نصف المشكلة: أرشفة اللقطات القديمة تلقائيًا، حذف الملفات المؤقتة بعد 90 يومًا، تخفيض فئة التخزين للبيانات الباردة. يغطي دليلنا حول تحسين تكاليف التخزين السحابي عبر S3 وBlob وGCS نماذج جاهزة لهذه السياسات.

الأسئلة الشائعة

هل تفرض AWS رسومًا على المثيلات المتوقفة (Stopped)؟

لا، AWS لا تفرض رسومًا على وقت المعالج (compute time) للمثيلات في حالة "Stopped"، لكنها تستمر في فوترة أحجام EBS المرتبطة، عناوين Elastic IP، وأي لقطات مأخوذة من المثيل. مثيل m5.large متوقف مع حجم gp3 بسعة 100 جيجابايت يكلّف حوالي 8 دولارات شهريًا في us-east-1.

ما الفرق بين الموارد الخاملة والموارد الشبح؟

الموارد الخاملة (Idle) تعمل وتُحسب على فاتورتك لكن استخدامها منخفض جدًا (مثيل بـCPU أقل من 5%). الموارد الشبح (Zombie) هي مجموعة فرعية من الخاملة: أصول فقدت وظيفتها الأصلية كليًا (حجم EBS بلا مثيل، Load Balancer بلا Backend Pool). كلاهما هدر مالي، لكن الشبح أسهل حذفًا لأنه لا يخدم أي شيء.

هل يمكنني الاعتماد فقط على AWS Trusted Advisor لكشف كل الموارد الخاملة؟

لا. Trusted Advisor يُغفل عدة فئات مهمة: NAT Gateways ذات المرور الصفري، Snapshots اليتيمة القديمة، Transit Gateway attachments غير المستخدمة، وElastic Network Interfaces الحرة. في تدقيقاتي وجدت أنه يكشف حوالي 60% من إجمالي الهدر. للـ40% المتبقية تحتاج استعلامات CLI مخصصة أو أدوات طرف ثالث مثل CloudHealth أو Vantage.

كم مرة يجب تشغيل عملية تنظيف الموارد الخاملة؟

أوصي بتشغيل المسح والوسم أسبوعيًا (كل يوم اثنين صباحًا)، وتشغيل الحذف الفعلي شهريًا (بعد 30 يومًا من فترة التجميد). التكرار الأسبوعي يمنع التراكم الكبير، والفصل بين المسح والحذف يعطي المالكين فرصة للاعتراض قبل أي تدمير للبيانات.

ما هو أرخص نوع من الموارد الخاملة يمكنني تجاهله؟

لا يوجد "أرخص من أن يُنظّف". حتى الأصول الرخيصة تتراكم: 500 حجم EBS بسعة 30 جيجابايت gp3 خاملة = 1,200 دولار شهريًا. بالإضافة إلى أن كل مورد يستهلك حصص الحساب (Service Quotas) ويعقّد التدقيقات الأمنية. القاعدة: احذف كل شيء غير مستخدم، بغض النظر عن كلفته الفردية.

هل أدوات FinOps التجارية مثل Vantage وCloudHealth أفضل من السكربتات المخصصة؟

يعتمد على حجم البيئة. لفواتير تحت 50 ألف دولار شهريًا، السكربتات المخصصة + Trusted Advisor/Advisor/Active Assist كافية وتوفّر رسوم الاشتراك (عادة 3-5% من الإنفاق السحابي). لبيئات فوق 200 ألف دولار شهريًا متعددة السحابات، الأدوات التجارية تقدّم ROI واضحًا: تجميع Cross-cloud، لوحات تنبيهات، وتحليل RI/SP آلي يصعب تكراره داخليًا.

Rachel Goldberg
عن الكاتب Rachel Goldberg

Multi-cloud strategist comparing AWS, GCP, and Azure cost levers across real-world workloads.