[“Amount”]

twitter-image

المقدمة

توفر أمازون القدرة على إنشاء تنبيهات الفوترة

  • التي يمكن استخدامها تنبيه عندما تتجاوز فاتورة AWS حدًا معينًا. ومع ذلك ، فإن هذا النهج به بعض النواقص:
    • أنت بحاجة إلى تعيين عتبة محددة مسبقًا. عندما تبدأ في استخدام AWS لأول مرة ، من الصعب أن تعرف كيف ستبدو فاتورة AWS الخاصة بك. كثير من الناس وضعوا هذه العتبة منخفضة جدًا ليكونوا آمنين.

      يميل تنبيه مثل هذا إلى أن يكون رد الفعل بدلاً من الاستباقي. يتم تشغيل الإنذار بمجرد تجاوز العتبة بالفعل. على سبيل المثال ، لقد نسيت إيقاف تشغيل مثيل EC2 لم أعد أستخدمه ، لكنني اكتشفت بعد أسبوع تقريبًا بمجرد تجاوز حد تحرير الفواتير الخاص بي.

      مستكشف التكلفة

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

      في هذه المقالة ، سننظر في كيفية بناء خط أنابيب بسيط لإرسال تقارير الفواتير إلينا عبر البريد الإلكتروني. سيبدو التقرير الناتج كما يلي:

      الأدوات التي سنستخدمها هي:

      Cost Explorer API billing-alert-email

      ابدء

      الكود المصدري للمشروع متاح في هذا المستودع

    • .

      إعداد مشروع

      قم بإنشاء متطلبات. txt مع جميع التبعيات

        تثبيت التبعيات 
       

      قم بتشغيل الأمر التالي في shell لتثبيت جميع التبعيات.

         نقطة 

      تثبيت

    • – ص إعادة quirements.txt

      كن خبيرًا في AWS

      تلقي رسالة إخبارية أسبوعية بها مقالات ودروس متعمقة حول AWS. لا يوجد بريد عشوائي على الإطلاق.

      يحصل المشتركون على

      أوراق الغش والأدلة .

      إنشاء سقالات

       

      سنقوم بإنشاء مجلد جديد يسمى تطبيق

      الذي سيخزن منطق التطبيق لـ Cost Explorer API وكذلك استخدام SES.

      مكدير تطبيق لمس. اتصال. صلة app / __ init__.py app / cost_explorer.py app / email.py

      سنقوم أيضًا بإنشاء ملف يسمى معالج.py في الدليل الجذر. سيحتوي هذا الملف على المنطق المستخدم لإنشاء تقارير الفواتير.

      Cost Explorer API

      سوف نستخدم ال التكلفة والاستخدام

    • من Cost Explorer للحصول على بيانات الفوترة نحن نحتاج.

      استبدال محتويات cost_explorer ملف .py ملف أنشأنا سابقًا بهذا:

      التاريخ والوقت ،

    • timedelta

      من عند داتوتيل.ريلاتيفيدلتا استيراد relativedelta

      صف دراسي CostExplorer :

      تاريخ اليوم = التاريخ والوقت . أوتكناو (). تاريخ () CUR_MONTH_DATE

      = تاريخ اليوم


      . يحل محل

      ( يوم= 1

        ) PREV_MONTH_DATE : تاريخ = CUR_MONTH_DATE – relativedelta

        ( الشهور =+


        1 ) def __فيه__ ( الذات [

        self.RECIPIENT, ] ): الذات . زبون = boto3 . زبون ( “م” ) الذات . المقاييس =

        الذات . عملة : شارع = “دولار أمريكي” الذات . daily_report_kwargs = { “فترة زمنية” : الذات . _ get_timeperiod

        (

        بداية = الذات . تاريخ اليوم – timedelta ( أيام = 2 ) ، # start_dt شامل النهاية = الذات .

        تاريخ اليوم ، # end_dt حصري

        ) ،

        “المقاييس” : الذات . المقاييس ، “تقسيمات” : “اليومي”

        } الذات . مو nthly_report_kwargs

        = {


        “فترة زمنية”

        :

        الذات

        . _ get_timeperiod (

        بداية = الذات . PREV_MONTH_DATE

        ، # start_dt شامل النهاية = الذات

        . تاريخ اليوم ، # end_dt حصري ) ، “المقاييس” : الذات . المقاييس ، [

        self.RECIPIENT, ] “تقسيمات” : “شهريا”

      } صفر

      _ get_timeperiod ( الذات ، بداية : تاريخ ، النهاية :

      تاريخ): إرجاع [ self.RECIPIENT, ] {

      “بداية”

      : بداية . تنسيق متساوي () ، “النهاية” : النهاية . تنسيق متساوي () ، } def

      _احصل على البيانات ( الذات ، النتائج ): “” “يسترجع صفوف الفوترة الفردية من بيانات مستكشف التكلفة. “” “ صفوف = [] إلى عن على الخامس في النتائج : صف = { “تاريخ” :

      الخامس [“TimePeriod”] [“Start”]} إلى عن على [ self.RECIPIENT, ] أنا

      في الخامس

      [

      “Groups”]: مفتاح = أنا [“Keys”] [0] صف. تحديث ({

      مفتاح :

      تطفو ( أنا [“Metrics”] [“UnblendedCost”] [“Amount”])}) صف . تحديث ({

      “مجموع” : تطفو ( الخامس [“Total”] [“UnblendedCost”] [“Amount”])}) الصفوف . ألحق


      ( صف ) إرجاع [f”{row[‘date’] }

      :

      { مستدير ( صف [‘Total’] ،


      2 ) } إلى عن على صف في صفوف ] def انشاء تقرير (

      الذات ، report_kwargs ): “” “احصل على بيانات التكلفة بناءً على الدقة وتاريخ البدء وتاريخ الانتهاء. “” “

      استجابة = [ self.RECIPIENT, ] الذات

      . زبون

      . get_cost_and_usage ( report_kwargs

      ) إرجاع ” ن “ . انضم (الذات

      . _احصل على _البيانات ( استجابة


      [“ResultsByTime”]))

      [

      self.RECIPIENT, ] النقاط الرئيسية [ self.RECIPIENT, ]

      نريد إنشاء تقريرين ، أحدهما لآخر يومين (دقة يومية) والآخر لمقارنة إنفاق الشهر الماضي مقابل الشهر الحالي (دقة شهرية).

      كنا التكاليف غير المربوطة لتمثيل بيانات الفواتير الخاصة بنا. يمكن العثور على مزيد من المعلومات حول هذا

      هنا. billing-alert-email

      بسيط خدمة البريد الإلكتروني (SES)

      سوف نستخدم SES لإرسال تقارير الفواتير لأنفسنا عبر البريد الإلكتروني.

      المتطلبات الأساسية

      يتطلب SES عنوان بريد إلكتروني تم التحقق منه قبل استخدامه. يمكن إجراء التحقق عبر وحدة تحكم AWS. باستخدام SES

      استبدال محتويات email.py مع مقتطف الشفرة أدناه:


      استيراد boto3 صف دراسي عميل البريد الإلكتروني : مرسل = “AWS Cost Alert > “ موضوع = “تقرير فوترة AWS اليومي” # نص البريد الإلكتروني للمستلمين مع غير عملاء البريد الإلكتروني بتنسيق HTML.

      BODY_TEXT = “” “تنبيهات فواتير AWS


      r n تقرير الفواتير اليومي r n {daily_billing_report} r n تقرير الفواتير الشهرية r n {month_billing_report} r n “” ” # نص HTML للبريد الإلكتروني.

      BODY_HTML = “”


      تنبيه فوترة AWS

      الفواتير اليومية

      {daily_billing_report}

      الفواتير الشهرية

      {month_billing_report}

      “” ” # ترميز الأحرف للبريد الإلكتروني.

      مجموعة = “UTF-8” # البريد الألكتروني للمتلقي مستلم =

      [email protected] ” def __فيه__ ( الذات ): الذات . زبون = boto3 .


      زبون (

      “ses” ) def إرسال ( الذات

      ، daily_billing_report ، تقرير_الفواتير الشهرية

      ): “” “إرسال بريد إلكتروني يحتوي على بيانات فوترة AWS “” “ email_text = [ self.RECIPIENT, ] الذات

      . BODY_TEXT . شكل ( daily_billing_report = daily_billing_report

      ، الشهرية_تقرير الفواتير [ self.RECIPIENT, ] =

      تقرير_فواتير شهري

      ) email_html = الذات . BODY_HTML . شكل ( daily_billing_report


      = daily_billing_report ، تقرير_فاتورة شهرية

      = الشهرية_تقرير الفواتير )


      استجابة = الذات . زبون . ارسل بريد الكتروني ( المكان المقصود = { “ToAddresses” : [ self.RECIPIENT, ] ، } ، رسالة = { “الجسم” : { “لغة البرمجة” [ self.RECIPIENT, ] :

      {

      “Charset” : الذات

      . المجموعة

      ، “البيانات” : email_html

      } ، “نص” :


      { “Charset” :

      الذات . مجموعة ،


      “د آتا ” : email_text ، } ، } ، “موضوع” :

      { “Charset” : الذات. مجموعة

      ، “البيانات” : الذات

      . موضوع ، } ، } ، مصدر = الذات . مرسل ، )


      النقاط الرئيسية:

    • يحل محل مرسل و المتلقي

      مع عنوان البريد الإلكتروني الذي قمت بالتحقق منه باستخدام SES. billing-alert-email إنشاء تقرير الفواتير

      سنقوم الآن بإنشاء تقرير باستخدام Cost Explorer و SES. استبدال محتويات معالج . الحمر مع مقتطف الشفرة أدناه:

      من عند app.cost_explorer استيراد CostExplorer من عند app.email

      استيراد عميل البريد الإلكتروني def الأساسية (): م = CostExplorer () تقرير يومي = م . انشاء تقرير ( م [ self.RECIPIENT, ] .

      .

      daily_report_kwargs

      )

      تقرير_ شهري = م . انشاء تقرير ( م .

      الشهرية_تقرير_كوارز ) عميل البريد الإلكتروني = عميل البريد الإلكتروني () عميل البريد الإلكتروني . [ self.RECIPIENT, ] إرسال

      (

      daily_billing_report =تقرير يومي ، شهرياً_بليلي ng_report

      = تقرير شهري


      )

      إذا __اسم__ == “__الأساسية__” : الأساسية ()

      بعد ذلك ، قم بتشغيل البرنامج النصي من جهازك باستخدام الأمر التالي: إذا تم إعداد ملف تعريف AWS الخاص بك باستخدام الأذونات المناسبة ، يجب أن تتلقى رسالة بريد إلكتروني تحتوي على بيانات الفواتير الخاصة بك. هذا ما يجب أن يبدو عليه البريد الإلكتروني:

      دمج AWS Lambda الآن بعد أن قمنا بإنشاء تقرير الفواتير محليًا ، سنستخدم

        إطار عمل بدون خادم

      1. لإنشاء خط أنابيب بدون خادم باستخدام AWS Lambda.

        المتطلبات الأساسية

    • قم بإعداد إطار عمل بدون خادم باتباع الإرشادات المذكورة

      هنا.

    • قم بتشغيل الأوامر التالية بعد تثبيت إطار العمل بدون خادم.

       

      npm init -F np م تثبيت - حفظ ديف متطلبات بيثون بدون خادم

      sls-deploy

      ال متطلبات بيثون بدون خادم

      يقوم البرنامج المساعد تلقائيًا بحزم التبعيات من المتطلبات. txt وإتاحتها لوظيفة Lambda.

      lambda-http

      إعداد المشروع بدون خادم

       

      بعد ذلك ، قم بإنشاء الملف serverless.yml في الدليل الجذر الخاص بك وانسخ المحتوى التالي:

      الخدمات :

      تنبيهات التكلفة بدون خادم

      الإضافات : متطلبات بيثون بدون خادم صفقة

      : استبعاد التبعيات : صحيح استبعاد : – node_modules / مخصص : متطلبات python

      : معتدل البنيه


      : صحيح قطاع : فال حد ذاتها SlimPatternsAppendDefaults :


      صحيح أنماط نحيفة : – ” / *. egg-info ” – / *. dist-info ”


      dockerizePip : صحيح مزود: اسم [ self.RECIPIENT, ] :

      AWS

      مدة العرض

      : بيثون 3.7 المسرح : ديف منطقة : الولايات المتحدة والغرب -2 iamRole البيانات : تأثير : السماح عمل : ses: إرسال بريد إلكتروني

      الموارد

      : – “


      “ – تأثير :

      السماح عمل : – ce: GetCostAndUsage المورد :


      ” “ المهام : send_daily_cost_report

      : معالج : handler.generate_report

      أحداث

      : – http : احصل على مرحبا

      sls-deployالنقاط الرئيسية

      سيكون لوظيفة lambda الإذن بالاستعلام عن التكلفة والاستخدام وظيفة في Cost Explorer و ارسل بريد الكتروني في SES.

    • إلى اختبر وظيفة Lambda الخاصة بنا ، وسننشئ نقطة نهاية HTTP مؤقتة تسمى مرحبا
    • .

      معالج Lambda

      قبل أن ننشر وظيفة Lambda إلى AWS ، نحتاج إلى تحديث وظيفة Lambda بحيث يمكنه الاستجابة لطلب HTTP. تحديث محتويات المعالج الخاص بك .py مع مقتطف الشفرة التالي:

      من عند app.cost_explorer استيراد CostExplorer من عند app.email

      استيراد عميل البريد الإلكتروني

      def انشاء تقرير ( حدث ، سياق الكلام ): م = CostExplorer () تقرير يومي = م . انشاء تقرير ( م . daily_report_kwargs

      )

      تقرير شهري = م . انشاء تقرير ( م . [ self.RECIPIENT, ] الشهرية_تقرير_ kwargs

      ) عميل البريد الإلكتروني

      = عميل البريد الإلكتروني () عميل البريد الإلكتروني . إرسال ( daily_billing_report = تقرير يومي ،


      تقرير_فواتير شهري = تقرير_ شهري ) إرجاع { “statusCode” : 200 ، “رؤوس” : { ” نوع المحتوى”

      : “التطبيق / json” ، } ، “الجسم” : “نجاح” ،


      }

      الآن سنقوم بنشر Lambda fun ction إلى AWS. قم بتشغيل الأمر التالي في الجهاز:

      إذا كان النشر ناجحًا ، فيجب أن تكون قادرًا على رؤية نقطة نهاية HTTP الخاصة بـ Lambda كما يلي:

      إذا نقرت على نقطة نهاية HTTP ، يجب أن ترى الإخراج مثل هذا:


      لامدا المجدولة

      أخيرًا ، سنقوم بتحديث وظيفة Lambda الخاصة بنا لتعمل كرون مجدول بدلاً من HTTP نقطة النهاية. سنقوم بإعداد وظيفة Lambda الخاصة بنا للتشغيل مرة واحدة في اليوم.

      تحديث المهام قسم

      بدون خادم .yml : المهام : send_daily_cost_report

      : # المعالج: handler.generate _نقل # أحداث: # – http: احصل على مرحبًا معالج : معالج . انشاء تقرير أحداث : جدول [ self.RECIPIENT, ] :

      كرون

      ( 0 9


      ؟ )

      لقد حددنا الآن جدولة تشغيل وظيفة Lambda كل يوم في الساعة 9 صباحًا . خاتمة

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

      ٪٪ item_read_more_button ٪٪

      ترك الرد

      من فضلك ادخل تعليقك
      من فضلك ادخل اسمك هنا