JustOnePrompt Staging

التصنيف: أتمته عامه

تمبلات أوتوميشين

  • أفضل الممارسات لأتمتة واجهات برمجة التطبيقات (API) في بايثون

    أفضل الممارسات لأتمتة واجهات برمجة التطبيقات (API) في بايثون

    أفضل الممارسات لأتمتة واجهات برمجة التطبيقات (API) باستخدام بايثون: دليل المطور

    أفضل ممارسات أتمتة واجهات برمجة التطبيقات (API) باستخدام بايثون تشمل استخدام معالجة الأخطاء بشكل صحيح، وتنفيذ حدود معدل الاستخدام، وتخزين بيانات الاعتماد بشكل آمن، وكتابة توثيق شامل، واستخدام جلسات الطلبات لتحسين الأداء، وتنفيذ المصادقة بشكل صحيح، وإنشاء كود معياري قابل لإعادة الاستخدام. اتباع هذه النهج سيجعل تكاملات API الخاصة بك أكثر موثوقية وقابلية للصيانة وأمانًا.

    related image

    وهناك كنت، غارق في أخطاء API في الساعة 2 صباحًا، أتساءل لماذا قرر سكريبت البايثون الجميل الخاص بي فجأة التعامل مع استدعاءات REST API المُصممة بعناية كما لو كانت مكتوبة باللغة السومرية القديمة. كلنا مرينا بهذا الموقف، صح؟ تلك اللحظة التي تدرك فيها أن الأتمتة التي كانت تعمل بشكل مثالي في الاختبار قررت أن تنهار تمامًا في بيئة الإنتاج لأنك نسيت معالجة حالة طرفية غريبة حيث يُرجع API صورة قطة بدلاً من بيانات JSON. (حسنًا، هذا تحديدًا لم يحدث معي… بعد).

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

    ما الذي يجعل بايثون رائعًا لأتمتة واجهات برمجة التطبيقات

    أصبح بايثون اللغة المفضلة لأتمتة API، ولسبب وجيه. فكر في بايثون كصديق منظم للغاية يجعل المهام المعقدة تبدو سهلة. مع مكتبات مثل Requests، يمكنك إجراء استدعاءات API بأقل قدر من الكود الذي يُقرأ تقريبًا مثل اللغة الإنجليزية العادية.

    لكن امتلاك سيارة فيراري لا يجعلك تلقائيًا سائقًا جيدًا. نفس الشيء ينطبق على بايثون و API – تحتاج إلى معرفة كيفية التعامل مع هذه المجموعة القوية بشكل صحيح.

    أفضل الممارسات الأساسية لأتمتة واجهات برمجة التطبيقات باستخدام بايثون

    1. تنفيذ معالجة الأخطاء بشكل صحيح

    إذا كان هناك شيء واحد مستعد للدفاع عنه حتى النهاية، فهو أن معالجة الأخطاء ليست اختيارية. إنها الفرق بين “السكريبت الخاص بي عمل بشكل مثالي!” و “السيرفر مشتعل ولا أحد يعرف السبب!”

    إليك كيفية القيام بذلك بشكل صحيح:

    • استخدم كتل try/except لالتقاط أنواع مختلفة من الاستثناءات
    • تعامل مع رموز حالة HTTP بذكاء (وليس فقط الكود 200)
    • نفذ التراجع الأسي لإعادة المحاولات في حالة الأخطاء العابرة
    • سجل الأخطاء مع سياق ذي معنى لاستكشاف الأخطاء وإصلاحها
    
    import requests
    import time
    import logging
    
    def make_api_call(url, max_retries=3):
        retries = 0
        while retries < max_retries:
            try:
                response = requests.get(url, timeout=10)
                response.raise_for_status()  # Raises exception for 4XX/5XX responses
                return response.json()
            except requests.exceptions.HTTPError as e:
                # Handle HTTP errors like 404, 500, etc.
                if response.status_code == 429:  # Too Many Requests
                    logging.warning(f"Rate limited. Waiting before retry {retries+1}")
                    time.sleep(2 ** retries)  # Exponential backoff
                    retries += 1
                    continue
                logging.error(f"HTTP Error: {e}")
                break
            except requests.exceptions.ConnectionError:
                logging.error("Connection failed. Retrying...")
                retries += 1
                time.sleep(2 ** retries)  # Exponential backoff
            except requests.exceptions.Timeout:
                logging.error("Request timed out. Retrying...")
                retries += 1
                time.sleep(1)
            except Exception as e:
                logging.error(f"Unexpected error: {e}")
                break
        
        return None  # Return None if all retries failed
    

    2. تنفيذ حدود معدل الاستخدام

    واجهات API لها حدود، تمامًا مثل صبري بعد الزبون الخامس في المقهى الذي يغير طلبه عند الكاشير. احترم هذه الحدود أو استعد لعالم من الألم (وربما حظر مفتاح API الخاص بك).

    • أضف تأخيرات بين الطلبات (خاصة في الحلقات)
    • تتبع استخدامك لـ API باستخدام عدادات
    • احترم حدود المعدل المقدمة في رؤوس الاستجابة
    • استخدم مكتبات التحكم في المعدل مثل ratelimit عند الضرورة
    
    from ratelimit import limits, sleep_and_retry
    
    # Limit to 5 calls per minute
    @sleep_and_retry
    @limits(calls=5, period=60)
    def call_api(url):
        response = requests.get(url)
        return response.json()
    

    3. تأمين بيانات الاعتماد الخاصة بك

    لقد رأيت قواعد كود حيث تم تضمين مفاتيح API مباشرة في الكود. ليس في ملف تكوين منفصل – بل مباشرة في الكود الذي تم رفعه إلى مستودع GitHub عام. لا تكن هذا الشخص. نفسك المستقبلي (وفريق الأمان) سيشكرك.

    • خزن مفاتيح API في متغيرات البيئة
    • استخدم أدوات إدارة الأسرار المخصصة للإنتاج
    • لا تقم أبدًا بتضمين بيانات الاعتماد مباشرة في النصوص البرمجية
    • استخدم أدوات مثل Python-dotenv للتطوير المحلي
    
    import os
    from dotenv import load_dotenv
    
    # Load environment variables from .env file
    load_dotenv()
    
    # Access your API key securely
    api_key = os.environ.get('API_KEY')
    api_secret = os.environ.get('API_SECRET')
    
    # Use them in your requests
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    }
    

    4. إنشاء كود قابل لإعادة الاستخدام ومعياري

    نسخ ولصق نفس كود الطلب عبر 15 سكريبت مختلف هو مثل ارتداء نفس الجوارب لمدة أسبوع – من الناحية الفنية يعمل، لكنها ممارسة سيئة ستسبب مشاكل في النهاية.

    بدلاً من ذلك، قم ببناء فئة عميل أو وحدة تتعامل مع كل منطق التفاعل الشائع مع API:

    
    class APIClient:
        def __init__(self, base_url, api_key):
            self.base_url = base_url
            self.session = requests.Session()
            self.session.headers.update({
                'Authorization': f'Bearer {api_key}',
                'Content-Type': 'application/json'
            })
        
        def get(self, endpoint, params=None):
            url = f"{self.base_url}/{endpoint}"
            return self._make_request('GET', url, params=params)
        
        def post(self, endpoint, data=None, json=None):
            url = f"{self.base_url}/{endpoint}"
            return self._make_request('POST', url, data=data, json=json)
        
        def _make_request(self, method, url, **kwargs):
            try:
                response = self.session.request(method, url, **kwargs)
                response.raise_for_status()
                return response.json()
            except requests.exceptions.RequestException as e:
                # Handle exceptions
                logging.error(f"Request error: {e}")
                return None
    

    5. استخدام الجلسات لتحسين الأداء

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

    
    # Bad practice: Creating a new connection for every request
    for item_id in item_ids:
        response = requests.get(f"{base_url}/items/{item_id}")
        # Process response...
    
    # Good practice: Reuse connection with a session
    with requests.Session() as session:
        session.headers.update({'Authorization': f'Bearer {api_key}'})
        for item_id in item_ids:
            response = session.get(f"{base_url}/items/{item_id}")
            # Process response...
    

    6. توثيق الكود الخاص بك (نفسك المستقبلي سيشكرك)

    ذات مرة قضيت ثلاث ساعات أحاول معرفة سبب قيام سكريبت كتبته قبل ستة أشهر بإجراء استدعاءات API غريبة. لا تفعل ذلك بنفسك – وثق كل شيء، خاصة الحالات الطرفية الغريبة وغرائب API.

    • علق على سلوكيات API غير العادية أو الحلول البديلة
    • وثق بنية الاستجابة المتوقعة
    • قم بتضمين أمثلة استدعاءات API للرجوع إليها
    • استخدم docstrings لشرح أغراض الوظائف والمعلمات
    
    def get_user_data(user_id):
        """
        Retrieves user information from the API.
        
        Args:
            user_id (int): The unique identifier for the user
            
        Returns:
            dict: User data including 'name', 'email', and 'subscription_status'
                Returns None if user not found or request fails
                
        Note:
            This API occasionally returns 500 errors during peak hours (1-3 PM EST).
            Implement retries if calling during these times.
            
        Example:
            >>> get_user_data(12345)
            {'name': 'John Doe', 'email': 'john@example.com', 'subscription_status': 'active'}
        """
        # Implementation here
    

    مشاكل شائعة يجب تجنبها في أتمتة واجهات برمجة التطبيقات

    1. تجاهل إصدارات API

    واجهات API تتطور. نقطة النهاية التي تستخدمها اليوم قد تتغير تمام

  • استخدام بايثون لأتمتة برومبتات شات جي بي تي

    استخدام بايثون لأتمتة برومبتات شات جي بي تي

    عايز تعزز شغلك على ChatGPT؟ بايثون لأتمتة  هي سلاحك السري. بكام سطر كود بس، تقدر تعالج مجموعة من الطلبات دفعة واحدة، تجدول التفاعلات، وتنشئ تطبيقات مخصصة تستفيد من قدرات ChatGPT – كل ده مع توفير ساعات من وقت الإدخال اليدوي.

    related image

    ليه ممكن تحتاج تأتمت ChatGPT باستخدام بايثون

    كنت قاعد بنسخ وألصق نفس أنواع الطلبات في ChatGPT حوالي 50 مرة في اليوم زي الهامستر الرقمي اللي بيلف في عجلة. كلنا مرينا بالموقف ده، صح؟ اللحظة اللي بتدرك فيها إنك بتعمل نفس الحاجة مرة ورا مرة وبتفكر “أكيد في طريقة أحسن”. سبويلر أليرت: فعلاً في.

    أتمتة بايثون زي ما تكون وظفت مساعد ما بيتعبش وما بيشتكيش من المهام المتكررة. ومين مش عايز كده؟ سواء كنت منشئ محتوى محتاج توليد أفكار بشكل كبير، أو محلل بيانات بيعالج معلومات، أو حتى شخص بيستخدم ChatGPT كتير، الأتمتة ممكن توفرلك وقت قيم وطاقة ذهنية.

    خلينا نشوف بالظبط إزاي بايثون ممكن يحول تجربتك مع ChatGPT من شغل يدوي ممل لكفاءة منظمة.

    البداية: الاتصال بين بايثون و ChatGPT

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

    السحر بيحصل من خلال واجهة برمجة تطبيقات OpenAI (API)، اللي هي زي باب رقمي بيسمح لكود البايثون بتاعك إنه يرسل طلبات مباشرة لـ ChatGPT. هتحتاج:

    • مفتاح API من OpenAI (اعتبره زي تصريح الدخول VIP بتاعك)
    • بايثون متثبت على جهازك
    • مكتبة OpenAI لبايثون

    تثبيت الحزمة اللازمة سهل جداً – سطر واحد بس في التيرمينال:

    pip install openai

    بعد كده، الهيكل الأساسي لسكريبت بايثون اللي بيتكلم مع ChatGPT هيبقى شكله كده:

    import openai
    
    # حط مفتاح API بتاعك
    openai.api_key = "your-api-key-goes-here"
    
    # إنشاء دالة للتفاعل مع ChatGPT
    def ask_chatgpt(prompt):
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "user", "content": prompt}
            ]
        )
        return response.choices[0].message.content
    
    # مثال للاستخدام
    result = ask_chatgpt("What's the capital of France?")
    print(result)

    5 أمثلة عملية لأتمتة بايثون مع ChatGPT

    بعد ما فهمنا الأساسيات، خلينا نستكشف بعض الاستخدامات الفعلية اللي هتخليك تتساءل إزاي عشت من غير أتمتة بايثون.

    1. معالجة مجموعة من الطلبات دفعة واحدة

    تخيل إنك محتاج تعمل أوصاف لـ 100 منتج مختلف. بدل ما تقعد تنسخ وتلصق لحد ما تتجنن، ممكن تعالجهم كلهم مرة واحدة:

    product_names = ["Ergonomic Office Chair", "Wireless Headphones", "Smart Water Bottle"]
    descriptions = []
    
    for product in product_names:
        prompt = f"Write a compelling 50-word product description for: {product}"
        description = ask_chatgpt(prompt)
        descriptions.append({product: description})
        
    # حفظ في ملف أو قاعدة بيانات
    import json
    with open("product_descriptions.json", "w") as f:
        json.dump(descriptions, f, indent=4)

    2. إنشاء مولد محتوى مجدول

    محتاج محتوى سوشيال ميديا يومي؟ اعمل سكريبت يشتغل كل صباح:

    import schedule
    import time
    
    def generate_daily_content():
        topics = ["industry news", "product tips", "customer success stories"]
        today_topic = topics[time.localtime().tm_wday % len(topics)]
        
        prompt = f"Generate a Twitter thread about {today_topic} in our software development industry"
        content = ask_chatgpt(prompt)
        
        # إرسال للإيميل، حفظ في ملف، أو دفع لمجدول سوشيال ميديا
        with open(f"content_{time.strftime('%Y%m%d')}.txt", "w") as f:
            f.write(content)
    
    # تشغيل كل يوم الساعة 8 صباحاً
    schedule.every().day.at("08:00").do(generate_daily_content)
    
    while True:
        schedule.run_pending()
        time.sleep(60)

    3. بناء بوت سلاك مدعوم بـ ChatGPT

    عايز تدي فريقك إمكانية الوصول لـ ChatGPT مباشرة في سلاك؟ بايثون بيخلي ده ممكن:

    from slack_bolt import App
    import os
    
    # تهيئة تطبيق سلاك
    app = App(token=os.environ["SLACK_BOT_TOKEN"])
    
    @app.message("!ask")
    def handle_message(message, say):
        # استخراج السؤال (كل حاجة بعد !ask)
        question = message['text'].replace("!ask", "").strip()
        
        # الحصول على رد من ChatGPT
        response = ask_chatgpt(question)
        
        # الرد في قناة سلاك
        say(f"Answer: {response}")

    4. أتمتة تحليل البيانات باستخدام ChatGPT

    دمج pandas للتعامل مع البيانات و ChatGPT للتحليل المفيد:

    import pandas as pd
    
    # تحميل البيانات
    df = pd.read_csv("customer_feedback.csv")
    
    # تحليل الاتجاهات باستخدام ChatGPT
    sample_feedback = "n".join(df["feedback"].sample(20).tolist())
    prompt = f"""Analyze these customer feedback samples and identify:
    1. Common themes or issues
    2. Sentiment trends
    3. Potential product improvement areas
    
    Feedback samples:
    {sample_feedback}"""
    
    analysis = ask_chatgpt(prompt)
    print(analysis)

    5. إنشاء مساعد بحث مخصص

    بناء أداة تقدر تبحث في مواضيع متعددة وتنظم النتائج:

    def research_topic(topic, questions):
        research = {}
        
        # الحصول على نظرة عامة
        research["overview"] = ask_chatgpt(f"Provide a comprehensive overview of {topic}")
        
        # طرح أسئلة محددة
        research["details"] = {}
        for question in questions:
            research["details"][question] = ask_chatgpt(f"Regarding {topic}: {question}")
        
        return research
    
    # مثال للاستخدام
    ai_research = research_topic("Artificial Intelligence Ethics", [
        "What are the main concerns about bias in AI?",
        "How can transparency be improved in AI systems?",
        "What regulations exist globally for AI?"
    ])
    
    # حفظ البحث في ملف ماركداون
    with open("ai_ethics_research.md", "w") as f:
        f.write(f"# Research: AI Ethicsnn")
        f.write(f"## Overviewnn{ai_research['overview']}nn")
        
        f.write(f"## Detailed Findingsnn")
        for question, answer in ai_research["details"].items():
            f.write(f"### {question}nn{answer}nn")

    تقنيات متقدمة: ما بعد الأتمتة الأساسية

    بعد ما تتقن الأساسيات، في عالم كامل من الإمكانيات المتقدمة في انتظارك. التقنيات دي ممكن تخلي الأتمتة بتاعتك أكثر قوة:

    • إدارة السياق: الاحتفاظ بتاريخ المحادثة عبر تفاعلات متعددة للحصول على ردود أكثر تماسكاً
    • ضبط المعاملات: تعديل temperature و top_p وإعدادات أخرى للتحكم في الإبداع مقابل الدقة
    • معالجة الأخطاء: تنفيذ كتل try/except قوية للتعامل مع حدود معدل API ومشاكل الاتصال
    • تدفق الردود: استخدام وضع التدفق للحصول على النتائج في الوقت الفعلي بدل انتظار الردود الكاملة

    هنا مثال سريع لإدارة السياق:

    def chat_with_history(new_message, conversation_history=[]):
        # إضافة الرسالة الجديدة للتاريخ
        conversation_history.append({"role": "user", "content": new_message})
        
        # الحصول على رد من ChatGPT
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=conversation_history
        )
        
        # استخراج محتوى الرد
        assistant_message = response.choices[0].message
        
        # إضافة رد المساعد للتاريخ
        conversation_history.append({"role": assistant_message.role, "content": assistant_message.content})
        
        return assistant_message.content, conversation_history

    المشاكل الشائعة وكيفية تجنبها

    حتى أفضل سكريبتات الأتمتة ممكن تواجه مشاكل. هنا بعض المشاكل الشائعة وإزاي تحلها:

    • حدود المعدل: OpenAI عندها حدود لاستدعاء API. نفذ تراجع أسي للمحاولات المتكررة.
    • حدود التوكن: كل نموذج له الحد الأقصى لطول السياق. قسم المهام الكبيرة لأجزاء يمكن إدارتها.
    • إدارة التكلفة: استدعاءات API بتكلف فلوس. نفذ ميزانية ومراقبة لتجنب الفواتير المفاجئة.
    • تباين الاستجابة: ChatGPT ممكن يكون غير متوقع. استخدم رسائل النظام والطلبات الدقيقة للحصول على نتائج متسقة.

    هنا طريقة بسيطة للتعامل مع حدود المعدل:

    import time
    import random
    
    def ask_chatgpt_with_retry(prompt, max_retries=5):
        retries = 0
        while retries < max_retries:
            try:
                return ask_chatgpt(prompt)
            except openai.error.RateLimitError:
                wait_time = (2 ** retries) + random.random()
                print(f"Rate limited. Retrying in {wait_time:.2f} seconds...")
                time.sleep(wait_time)
                retries += 1
        
        raise Exception("Max retries exceeded.")

    طلب ممكن تستخدمه النهاردة

    عايز تبدأ تبني أتمتة ChatGPT خاصة بيك؟ هنا طلب يساعدك تصمم السكريبت المثالي لاحتياجات

  • أتمتة سير العمل السحابي باستخدام بايثون (جوجل كلاود، أمازون)

    أتمتة سير العمل السحابي باستخدام بايثون (جوجل كلاود، أمازون)

    أتمتة سير العمل السحابي باستخدام بايثون: بناء حلول ذكية لـ GCP و AWS

    بايثون هي اللغة المثالية لأتمتة سير العمل السحابي عبر GCP و AWS، مما يمكّن المطورين من كتابة سكريبتات لتوفير الموارد ومعالجة البيانات وإدارة البنية التحتية. مع مكتبات بايثون الواسعة وحزم تطوير البرمجيات السحابية، يمكنك إنشاء سكريبتات أتمتة فعالة توفر الوقت وتقلل من الأخطاء البشرية وتوفر نتائج متسقة عبر البيئات السحابية.

    ليه بدأت أتمتة سير العمل فكل حاجة في السحابة

    السنة اللي فاتت، لقيت نفسي بضغط يدويًا على لوحة تحكم AWS للمرة المليار، بحاول إعداد دلو S3 جديد بنفس الصلاحيات بالظبط زي الباقيين. كان عندي الإحساس ده – أكيد تعرفه – لما دماغك بتصرخ “لازم يكون فيه طريقة أحسن!” بينما صوابعك مستمرة في المهمة المملة على أي حال.

    كانت دي نقطة التحول بالنسبة لي. بعد تلات فناجين قهوة، كتبت أول سكريبت بايثون بتاعي لأتمتة إنشاء موارد AWS. السكريبت ماكانش جميل (النسخة الأولى كان فيها غلطة مطبعية أدت لإنشاء 50 دلو بدل 5 – أوبس!)، لكنه اشتغل. وده غيّر كل حاجة في طريقة تعاملي مع المنصات السحابية.

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

    related image

    إيه هي بالظبط أتمتة سير العمل فالسحابة باستخدام بايثون؟

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

    في جوهرها، أتمتة السحابة باستخدام بايثون بتتضمن:

    • كتابة كود بيتفاعل مع واجهات برمجة التطبيقات (APIs) الخاصة بمزودي الخدمات السحابية
    • إنشاء أو تعديل أو حذف الموارد السحابية بشكل برمجي
    • جدولة المهام الروتينية لتشتغل بدون تدخل بشري
    • تنفيذ منطق شرطي لجعل البنية التحتية السحابية بتاعتك أذكى

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

    ليه بايثون هي صديقك المفضل لأتمتة السحابة

    ممكن تتساءل ليه بايثون بقت اللغة المفضلة لأتمتة السحابة. ده مش صدفة – فيه أسباب مقنعة:

    • سهولة القراءة: كود بايثون تقريبًا زي قراءة اللغة الإنجليزية، مما يجعله أسهل للفهم والصيانة
    • دعم SDK رسمي: كل من AWS (boto3) و GCP (google-cloud) بيقدموا مكتبات بايثون شاملة
    • مجتمع ضخم: أمثلة لا حصر لها، إجابات على Stack Overflow، ومشاريع مفتوحة المصدر للتعلم منها
    • تنوع الاستخدامات: من سكريبتات بسيطة لتطبيقات معقدة، بايثون بتتكيف مع احتياجاتك
    • متعددة المنصات: بتشتغل على ويندوز، ماك، لينكس – في أي مكان محتاج تشغل فيه الأتمتة بتاعتك

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

    مكتبات بايثون الأساسية لأتمتة السحابة

    قبل ما ندخل في الأمثلة، خلينا نتكلم بسرعة عن المكتبات الأساسية اللي هتحتاجها في مجموعة أدوات أتمتة السحابة:

    لـ AWS:

    • Boto3: SDK رسمي من AWS لبايثون، بيديك وصول لكل خدمات AWS
    • AWS CLI: أداة سطر أوامر ممكن استدعاؤها من سكريبتات بايثون باستخدام subprocess

    لـ GCP:

    • google-cloud: مكتبة Google Cloud الرسمية للعملاء لبايثون
    • google-auth: بتتعامل مع المصادقة لخدمات Google Cloud

    أدوات عامة:

    • Requests: لعمل طلبات HTTP لواجهات برمجة REST
    • PyYAML/JSON: لتحليل ملفات الإعدادات
    • Pandas: لمعالجة البيانات إذا كانت الأتمتة بتاعتك بتتضمن معالجة بيانات
    • Schedule/APScheduler: لجدولة سكريبتات الأتمتة بتاعتك لتشتغل في أوقات محددة

    تثبيتهم سهل باستخدام pip:

    pip install boto3 google-cloud-storage pyyaml requests pandas schedule

    أمثلة عملية: أتمتة سير العمل AWS باستخدام بايثون

    خلينا نبدأ ببعض أمثلة أتمتة AWS العملية اللي وفرت لي ساعات لا تحصى:

    مثال 1: أتمتة إنشاء وإعداد دلو S3

    import boto3
    
    def create_configured_bucket(bucket_name, region="us-east-1"):
        """Create and configure an S3 bucket with standard settings"""
        s3 = boto3.client('s3', region_name=region)
        
        # Create the bucket
        s3.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={'LocationConstraint': region}
        )
        
        # Enable versioning
        s3.put_bucket_versioning(
            Bucket=bucket_name,
            VersioningConfiguration={'Status': 'Enabled'}
        )
        
        # Set default encryption
        s3.put_bucket_encryption(
            Bucket=bucket_name,
            ServerSideEncryptionConfiguration={
                'Rules': [
                    {
                        'ApplyServerSideEncryptionByDefault': {
                            'SSEAlgorithm': 'AES256'
                        }
                    }
                ]
            }
        )
        
        print(f"Bucket {bucket_name} created and configured successfully!")
    
    # Example usage
    create_configured_bucket('my-secure-data-bucket', 'us-west-2')

    السكريبت ده بينشئ دلو S3 مع تفعيل إدارة الإصدارات والتشفير – وهو متطلب شائع للتخزين الآمن للبيانات. بدل ما تضغط على شاشات متعددة في لوحة تحكم AWS، بتشغل سكريبت واحد وبتحصل على نتائج متسقة في كل مرة.

    مثال 2: مراقبة وإدارة مثيلات EC2 بشكل آلي

    import boto3
    import time
    
    def monitor_and_manage_instances(max_cpu_percent=70):
        """Monitor EC2 instances and stop any with low utilization"""
        ec2 = boto3.resource('ec2')
        cloudwatch = boto3.client('cloudwatch')
        
        # Get all running instances
        running_instances = ec2.instances.filter(
            Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]
        )
        
        for instance in running_instances:
            # Get CPU utilization for the last hour
            response = cloudwatch.get_metric_statistics(
                Namespace='AWS/EC2',
                MetricName='CPUUtilization',
                Dimensions=[
                    {'Name': 'InstanceId', 'Values': [instance.id]}
                ],
                StartTime=time.time() - 3600,
                EndTime=time.time(),
                Period=300,
                Statistics=['Average']
            )
            
            # Check if any datapoints were returned
            if response['Datapoints']:
                avg_cpu = max([d['Average'] for d in response['Datapoints']])
                print(f"Instance {instance.id}: Average CPU = {avg_cpu}%")
                
                # If CPU utilization is below threshold, stop the instance
                if avg_cpu < max_cpu_percent:
                    print(f"Stopping instance {instance.id} due to low utilization")
                    instance.stop()
            else:
                print(f"No metrics available for instance {instance.id}")

    السكريبت ده بيراقب مثيلات EC2 بتاعتك وبيوقف أوتوماتيكيًا أي منها بيستخدم موارد قليلة – مثالي لتحسين التكلفة. ممكن تجدول ده عشان يشتغل يوميًا وتوفر مئات الدولارات في فاتورة السحابة بتاعتك.

    أمثلة عملية: أتمتة GCP باستخدام بايثون

    دلوقتي خلينا نشوف بعض أمثلة منصة Google السحابية:

    مثال 1: إنشاء وإدارة دلاء تخزين GCP

    from google.cloud import storage
    
    def create_and_configure_gcs_bucket(bucket_name, location="us-central1"):
        """Create and configure a GCS bucket with standard settings"""
        # Initialize the client
        storage_client = storage.Client()
        
        # Create the bucket
        bucket = storage_client.create_bucket(bucket_name, location=location)
        
        # Set lifecycle rules (delete objects older than 90 days)
        bucket.lifecycle_rules = [
            {
                'action': {'type': 'Delete'},
                'condition': {'age': 90}
            }
        ]
        bucket.patch()
        
        # Enable versioning
        bucket.versioning_enabled = True
        bucket.patch()
        
        print(f"Bucket {bucket_name} created and configured successfully!")
    
    # Example usage
    create_and_configure_gcs_bucket('my-gcp-data-bucket')

    مشابه لمثال AWS بتاعنا، السكريبت ده بينشئ دلو تخزين Google Cloud مع تفعيل إدارة الإصدارات وقاعدة دورة حياة لحذف الملفات القديمة أوتوماتيكيًا – نمط شائع لإدارة تك