العربية

أطلق العنان لقوة الحوسبة بدون خوادم مع Google Cloud Functions. يستكشف هذا الدليل مشغلات HTTP، مما يوفر للمطورين حول العالم المعرفة اللازمة لبناء تطبيقات قابلة للتطوير وتعتمد على الأحداث.

Google Cloud Functions: دليل شامل لمشغلات HTTP

Google Cloud Functions (GCF) هي بيئة تنفيذ بدون خوادم تتيح لك بناء وربط الخدمات السحابية. باستخدام Cloud Functions، تكتب وظائف بسيطة ذات غرض واحد يتم ربطها بالأحداث الصادرة من البنية التحتية والخدمات السحابية الخاصة بك. يتم تنفيذ وظيفتك عند حدوث الحدث الذي تراقبه. يسمح لك هذا النهج بتطوير تطبيقات تعتمد على الأحداث دون إدارة الخوادم أو بيئات التشغيل.

واحدة من أكثر الطرق شيوعًا لتشغيل Cloud Function هي عبر طلب HTTP. سيتعمق هذا الدليل في عالم مشغلات HTTP في Google Cloud Functions، مما يمنحك المعرفة اللازمة لبناء تطبيقات قوية وقابلة للتطوير وفعالة من حيث التكلفة.

ما هي مشغلات HTTP؟

يسمح لك مشغل HTTP بتنفيذ Cloud Function الخاص بك استجابة لطلب HTTP. في الأساس، عند إرسال طلب HTTP إلى عنوان URL محدد، ستقوم Google Cloud Functions تلقائيًا بتنفيذ الوظيفة المرتبطة. هذا يجعل مشغلات HTTP مثالية لبناء واجهات برمجة التطبيقات، والـ webhooks، وتطبيقات الويب التي تعتمد على الأحداث.

الفوائد الرئيسية لاستخدام مشغلات HTTP:

إنشاء Cloud Function مع مشغل HTTP

دعنا نمر عبر عملية إنشاء Cloud Function بسيط مع مشغل HTTP. سنقوم بإنشاء وظيفة تستجيب برسالة "Hello, World!". يمكن تكييف هذا المثال لمختلف المواقع العالمية عن طريق تعديل سلسلة الإخراج ببساطة.

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

الخطوات:

  1. إنشاء مشروع جديد (إذا لم يكن لديك واحد):

    إذا لم يكن لديك مشروع GCP بالفعل، فقم بإنشاء واحد في Google Cloud Console.

  2. تمكين واجهة برمجة تطبيقات Cloud Functions:

    في Cloud Console، انتقل إلى واجهة برمجة تطبيقات Cloud Functions وقم بتمكينها.

  3. إنشاء دليل للوظيفة:

    قم بإنشاء دليل جديد لوظيفة Cloud Function الخاصة بك. على سبيل المثال:

    mkdir hello-http
    cd hello-http
  4. كتابة كود الوظيفة:

    قم بإنشاء ملف يسمى `main.py` (أو `index.js` لـ Node.js) مع الكود التالي:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
    
  5. إنشاء ملف المتطلبات (Python فقط):

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

  6. نشر الوظيفة:

    استخدم أمر `gcloud functions deploy` لنشر وظيفتك. استبدل `YOUR_FUNCTION_NAME` بالاسم المطلوب لوظيفتك.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    شرح المعلمات:

    • `YOUR_FUNCTION_NAME`: الاسم الذي تريد إطلاقه على Cloud Function الخاص بك.
    • `--runtime`: بيئة التشغيل لوظيفتك (على سبيل المثال، `python39`، `nodejs16`).
    • `--trigger-http`: يحدد أن الوظيفة يجب تشغيلها بواسطة طلبات HTTP.
    • `--allow-unauthenticated`: يسمح لأي شخص بتشغيل الوظيفة بدون مصادقة. تحذير: توخ الحذر عند تمكين هذا في بيئات الإنتاج! فكر في تطبيق المصادقة والترخيص المناسبين.
  7. اختبار الوظيفة:

    بعد النشر، سيقوم أمر `gcloud` بإخراج عنوان URL لوظيفتك. يمكنك بعد ذلك اختباره عن طريق إرسال طلب HTTP إلى هذا العنوان باستخدام أداة مثل `curl` أو Postman.

    curl YOUR_FUNCTION_URL

    يجب أن ترى رسالة "Hello, World!" في الاستجابة. يمكنك أيضًا تمرير اسم كمعلمة استعلام:

    curl "YOUR_FUNCTION_URL?name=YourName"

    يجب أن يعرض هذا "Hello, YourName!"

فهم طلب واستجابة HTTP

عندما يتم تشغيل Cloud Function بواسطة طلب HTTP، فإنه يستقبل كائنًا يحتوي على معلومات حول الطلب. يتضمن هذا الكائن عادةً:

يجب على وظيفتك بعد ذلك إرجاع استجابة HTTP، والتي تتضمن:

مثال: معالجة طرق HTTP المختلفة

إليك مثال على كيفية معالجة طرق HTTP المختلفة في Cloud Function الخاص بك:

Python (main.py):

from flask import escape

def http_method(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`.
    """
    if request.method == 'GET':
        return 'This is a GET request!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'This is a POST request with message: {message}'
        else:
            return 'This is a POST request without a message.'
    else:
        return 'Unsupported HTTP method.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('This is a GET request!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`This is a POST request with message: ${message}`);
      } else {
        res.status(200).send('This is a POST request without a message.');
      }
      break;
    default:
      res.status(405).send('Unsupported HTTP method!');
      break;
  }
};

تذكر نشر الوظيفة المحدثة باستخدام أمر `gcloud functions deploy`.

تأمين مشغلات HTTP الخاصة بك

الأمان أمر بالغ الأهمية عند العمل مع مشغلات HTTP، خاصة عند التعامل مع البيانات الحساسة أو العمليات الهامة. فيما يلي بعض الاعتبارات الأمنية الرئيسية:

المصادقة والترخيص

بشكل افتراضي، يمكن الوصول إلى Cloud Functions التي يتم تشغيلها بواسطة HTTP بشكل عام إذا استخدمت `--allow-unauthenticated`. في معظم سيناريوهات الإنتاج، سترغب في تقييد الوصول للمستخدمين أو الخدمات المصرح لهم. توفر Google Cloud العديد من الخيارات للمصادقة والترخيص:

التحقق من صحة المدخلات

قم دائمًا بالتحقق من صحة بيانات الإدخال التي تتلقاها Cloud Function الخاصة بك لمنع الثغرات الأمنية مثل حقن SQL أو البرمجة النصية عبر المواقع (XSS). استخدم تقنيات التطهير والتشفير المناسبة للحماية من المدخلات الضارة.

HTTPS

تأكد من أن Cloud Function الخاص بك يمكن الوصول إليه فقط عبر HTTPS لتشفير الاتصال بين العميل والوظيفة. توفر Google Cloud Functions تلقائيًا نقاط نهاية HTTPS.

تحديد المعدل

قم بتنفيذ تحديد المعدل لمنع إساءة الاستخدام وهجمات حجب الخدمة (DoS). يمكنك استخدام خدمات مثل Google Cloud Armor لحماية Cloud Functions الخاصة بك من حركة المرور المفرطة.

حالات استخدام مشغلات HTTP

مشغلات HTTP متعددة الاستخدامات ويمكن استخدامها في مجموعة واسعة من التطبيقات. فيما يلي بعض حالات الاستخدام الشائعة:

أمثلة عبر صناعات مختلفة

تقنيات متقدمة

استخدام متغيرات البيئة

تسمح لك متغيرات البيئة بتكوين Cloud Function الخاص بك دون ترميز المعلومات الحساسة أو قيم التكوين في الكود الخاص بك. يمكنك تعيين متغيرات البيئة باستخدام أمر `gcloud functions deploy` أو في Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

في الكود الخاص بك، يمكنك الوصول إلى متغيرات البيئة باستخدام القاموس `os.environ` (Python) أو الكائن `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

معالجة المهام غير المتزامنة

بالنسبة للمهام التي تستغرق وقتًا طويلاً أو كثيفة الحوسبة، من الأفضل استخدام المعالجة غير المتزامنة لتجنب حظر طلب HTTP. يمكنك استخدام خدمات مثل Google Cloud Tasks أو Cloud Pub/Sub لتفريغ هذه المهام إلى قوائم انتظار منفصلة.

معالجة الأخطاء والتسجيل

قم بتنفيذ معالجة أخطاء وتسجيل قوية في Cloud Functions لتحديد المشكلات وحلها بسرعة. استخدم Google Cloud Logging لجمع السجلات من وظائفك ومراقبة أدائها.

أفضل الممارسات

استكشاف الأخطاء وإصلاحها للمشكلات الشائعة

الخلاصة

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