أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

أتمتة تقدير تكلفة Terraform بـ Infracost — شوف فاتورة الـ PR قبل الـ merge

📅 ٢٠ أبريل ٢٠٢٦⏱ 5 دقائق قراءة
أتمتة تقدير تكلفة Terraform بـ Infracost — شوف فاتورة الـ PR قبل الـ merge
أتمتة تقدير تكلفة Terraform بـ Infracost قبل merge الـ PR

الـ PR بتاع زميلك ضاف EC2 r6i.4xlarge في ملف Terraform واتدمج. بعد أسبوعين، فاتورة AWS طلعت 843 دولار زيادة مفاجأة. لو Infracost كان شغّال في الـ CI، كان حطّ تعليق في الـ PR: +$843.50/شهر، وكنت وقّفت قبل الـ merge.

مكعبات دولارات تمثل تكلفة الـ Cloud الشهرية اللي بيقدّرها Infracost قبل merge الـ PR

المشكلة باختصار

في الفرق اللي بتستخدم Infrastructure as Code، المطور بيكتب HCL ويعمل git push، الـ reviewer بيبص على السطور، والفاتورة بتبان في آخر الشهر كمفاجأة. الـ trade-off الأصلي للـ IaC: سرعة في الـ deploy مقابل ضعف في الرؤية المالية. Infracost بيسدّ الفجوة دي في خطوتين CI بس.

مثال بسيط الأول علشان المبتدئ يلحق

تخيّل إن عندك بقالة، والموظف بيكتب ورقة طلبات: "3 شوالات سكر، 2 زيت، 5 علب لبن". الورقة دي زي الـ Terraform plan. لو الموظف ما كتبش الأسعار جنب كل حاجة، إنت هتوافق وهتتفاجأ بالفاتورة. Infracost هو الراجل اللي بيمسك الورقة ويكتب السعر جنب كل سطر قبل ما تروح للصرّاف. كده بقى عندك قرار قبل الدفع، مش بعده.

بالشكل الدقيق: Infracost أداة مفتوحة المصدر (رخصة Apache 2.0) بتاخد مخرج terraform plan، بتقرأ الـ pricing API الرسمي لـ AWS / Azure / GCP، وبتحسب التكلفة الشهرية لكل resource اتعدّل أو اتضاف. الناتج تعليق تلقائي في الـ PR فيه diff — مش رقم إجمالي فقط، لكن قبل/بعد لكل مورد.

شكل التعليق اللي بيظهر في الـ PR

Project: terraform/production
Baseline:  $4,218.50/mo
After:     $5,062.00/mo
Change:    +$843.50/mo  (+20.0%)

~ aws_instance.app_server
  Monthly cost: $124.10 → $967.60 (+$843.50)
  + Instance type: m5.large → r6i.4xlarge

الإعداد في GitHub Actions خطوة خطوة

  1. اعمل حساب مجاني على infracost.io وجيب الـ API key من صفحة الـ dashboard.
  2. ضيف المفتاح في GitHub تحت Settings → Secrets and variables → Actions باسم INFRACOST_API_KEY.
  3. أنشئ ملف .github/workflows/infracost.yml بالكونفيج اللي جاي تحت.
  4. افتح PR تجريبي فيه تعديل في أي ملف .tf — التعليق بيظهر خلال 60 ثانية.
YAML
name: Infracost
on:
  pull_request:
    paths:
      - 'terraform/**'

jobs:
  cost-estimate:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.base.ref }}

      - uses: infracost/actions/setup@v3
        with:
          api-key: ${{ secrets.INFRACOST_API_KEY }}

      - name: Baseline cost
        run: |
          infracost breakdown --path=terraform \
            --format=json --out-file=/tmp/base.json

      - uses: actions/checkout@v4
        with:
          clean: false

      - name: PR cost diff
        run: |
          infracost diff --path=terraform \
            --format=json --compare-to=/tmp/base.json \
            --out-file=/tmp/diff.json

      - name: Post comment on PR
        run: |
          infracost comment github \
            --path=/tmp/diff.json \
            --repo=$GITHUB_REPOSITORY \
            --pull-request=${{ github.event.pull_request.number }} \
            --github-token=${{ secrets.GITHUB_TOKEN }} \
            --behavior=update

لوحة دوائر إلكترونية تمثل pipeline الـ GitHub Actions اللي بيشغّل Infracost على كل PR

ضبط الأرقام الديناميكية بملف usage

S3 bucket تكلفته بتعتمد على حجم التخزين وعدد الـ requests. Infracost بيفترض قيم افتراضية (10 GB storage، مليون GET request). لو عندك bucket بـ 2 TB، التقدير هيكون غلط بحوالي 200x. الحل: ملف infracost-usage.yml جنب ملفات Terraform.

YAML
version: 0.1
resource_usage:
  aws_s3_bucket.logs:
    standard_storage_gb: 2048
    monthly_tier_1_requests: 5_000_000
    monthly_tier_2_requests: 40_000_000
    monthly_data_transfer_out_gb:
      us_east_1: 120

  aws_lambda_function.ingestor:
    monthly_requests: 18_000_000
    request_duration_ms: 240

وبعدين ضيف على أمر infracost breakdown الـ flag: --usage-file=infracost-usage.yml.

مثال من مشروع حقيقي

شغّلنا Infracost على repo فيه 180 مورد AWS (EC2, RDS, S3, Lambda, NAT Gateway، إلخ). قبل: متوسط الفرق بين التكلفة المتوقعة والفعلية كان 240 دولار شهريًا. بعد 3 شهور من الـ CI comment: الفرق نزل لـ 38 دولار. السبب البسيط إن 6 من 14 PR فيها تغييرات مالية اتعدّلت قبل الـ merge — تحويل EBS من gp2 لـ gp3 (وفّر 20%)، تصغير instance types غير مستغلة، حذف اتنين NAT Gateway ما كانوش بيستخدموا.

الـ trade-offs اللي لازم تبقى على علم بيها

الدقة مقابل البساطة: Infracost بيحسب على أساس on-demand pricing. لو عندك Reserved Instances أو Savings Plans، الرقم الحقيقي هيكون أقل بـ 40-72%. بتكسب: تقدير سريع بدون تكامل معقد. بتخسر: لو الـ Savings Plan بيغطّي 80% من الـ compute، التعليق هيبان مبالغ فيه وفريقك يتعود يتجاهله.

السرعة: الـ plan بياخد 15-45 ثانية لكل run حسب حجم الـ state. لو فريقك بيفتح 50 PR يوميًا، فعّل caching للـ .terraform directory عبر actions/cache وإلا هتصرف دقائق GitHub Actions بلا داعي.

الفرضية الأساسية: الشرح ده مبني على فرضية إنك بتستخدم Terraform (أو OpenTofu) بـ state مركزي ومخزن في S3/Terraform Cloud. لو بتستخدم Pulumi أو CDK، في أدوات مختلفة (مثل pulumi cost) بس فلسفتها مختلفة.

متى لا تستخدم Infracost

  • مشاريع بدون IaC. لو موارد AWS بتتعمل من الكونسول يدويًا، Infracost مش هيلمسها. استخدم AWS Cost Explorer بتنبيهات budget بدل ذلك.
  • مطور واحد بدون فريق. الـ overhead (API key، ملف usage، review الـ comment كل مرة) أعلى من القيمة لو إنت اللي بتعمل deploy لوحدك.
  • بنية قائمة على spot instances. أسعار الـ spot بتتقلّب كل ساعة؛ Infracost بيستخدم on-demand بس، فالرقم هيكون مضلّل باستمرار.
  • مزودي Cloud إقليميين. DigitalOcean و Hetzner و Contabo مش مدعومين بشكل كامل — الدعم محدود للـ compute الأساسي.

الخطوة التالية

افتح repo Terraform بتاعك دلوقتي، انسخ ملف الـ workflow فوق كما هو، وأنشئ PR اختباري يغيّر instance_type من t3.medium لـ m5.xlarge. لو ما ظهرش تعليق في خلال دقيقة، افتح تبويب Actions — 90% من المشاكل سببها إن INFRACOST_API_KEY مش مضاف أو مضاف في environment مختلف. لو لسه مش شغّال، ابعتلي logs الـ run وهقولك فين المشكلة بالظبط.

المصادر

  • Infracost Documentation — الوثائق الرسمية
  • infracost/actions — مستودع الـ GitHub Action الرسمي
  • Usage-based resources — infracost.io
  • AWS Savings Plans — التسعير الرسمي
  • terraform plan — HashiCorp Docs
]]>

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة