Lambda कोड लिखना और टेस्ट करना

AWS Lambda के साथ Serverless Applications

Claudio Canales

Senior DevOps Engineer

टेस्टिंग और लॉगिंग क्यों ज़रूरी हैं

  • असली इवेंट बिखरे हुए होते हैं और कई तरह के आते हैं।
  • टेस्टिंग से यूज़र्स से पहले ही त्रुटियाँ पकड़ी जाती हैं।
  • डिबगिंग के लिए लॉग आपका "ब्लैक बॉक्स" हैं।

टेस्टिंग एक फायर ड्रिल जैसी है

AWS Lambda के साथ Serverless Applications

एक फ्लो याद रखें

कोर फ्लो टूलकिट

  • Event in -> handler runs -> response out.
  • डिबग के लिए लॉग + टेस्ट इवेंट का उपयोग करें।

Lambda invocation flow

AWS Lambda के साथ Serverless Applications

लॉग कहाँ जाते हैं: CloudWatch Logs

  • Lambda डिफ़ॉल्ट रूप से print() आउटपुट और एरर वहीं लिखता है।
  • CloudWatch Logs, AWS की सर्विसेज़ के लिए लॉग स्टोरेज है।
  • लॉग ग्रुप ऐसे दिखते हैं: /aws/lambda/<function-name>

हैंडलर CloudWatch Logs में लॉग करता है

AWS Lambda के साथ Serverless Applications

हैंडलर कॉन्ट्रैक्ट

  • event इनपुट पेलोड है।
  • context रनटाइम मेटाडेटा देता है।
  • रिटर्न वैल्यू ही फंक्शन की response बनती है।

हैंडलर कॉन्ट्रैक्ट: event + context -> response

AWS Lambda के साथ Serverless Applications

वॉकथ्रू: event और context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

इवेंट और कॉन्टेक्स्ट कॉलआउट्स

AWS Lambda के साथ Serverless Applications

इनपुट को सुरक्षित रूप से पार्स करना

  • वैकल्पिक फ़ील्ड के लिए event.get() पसंद करें।
  • आवश्यक इनपुट जल्दी वैलिडेट करें।
  • गुम फ़ील्ड पर स्पष्ट एरर लौटाएँ।

सुरक्षित पार्स करें और जल्दी वैलिडेट करें

AWS Lambda के साथ Serverless Applications

वॉकथ्रू: आवश्यक इनपुट वैलिडेट करें

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

वैलिडेशन ब्रांच: 400 बनाम 200

AWS Lambda के साथ Serverless Applications

टेस्ट करने के एज केस

  • गुम फ़ील्ड (खाली JSON)।
  • गलत टाइप (name एक नंबर)।
  • अतिरिक्त फ़ील्ड या बड़ा पेलोड।

एज-केस पेलोड उदाहरण

AWS Lambda के साथ Serverless Applications

एक पूर्वानुमेय response लौटाना

  • एक समान response स्ट्रक्चर रखें।
  • सफलता या एरर के लिए statusCode उपयोग करें।
  • अपनी response body को JSON-एन्कोड करें।

Response लिफाफा: statusCode + JSON body

AWS Lambda के साथ Serverless Applications

वॉकथ्रू: JSON लौटाना

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps: dict से JSON टेक्स्ट

AWS Lambda के साथ Serverless Applications

लॉगिंग और ट्रेसिंग

  • प्रमुख फ़ील्ड लॉग करें (ज़रूरत पर JSON में)।
  • ट्रेसिंग हेतु context.aws_request_id शामिल करें।
  • सीक्रेट या निजी डेटा लॉग न करें।
  • डिफ़ॉल्ट रूप से Lambda के लॉग CloudWatch Logs में जाते हैं।

लॉगिंग के सर्वोत्तम अभ्यास

AWS Lambda के साथ Serverless Applications

वॉकथ्रू: स्ट्रक्चर्ड लॉगिंग

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

स्ट्रक्चर्ड लॉगिंग JSON लाइन

AWS Lambda के साथ Serverless Applications

कंसोल इवेंट से टेस्टिंग

  • नाम वाले टेस्ट इवेंट बनाइए।
  • हैप्पी पाथ और एज केस दोनों टेस्ट करें।
  • हर रन के बाद response + लॉग देखें।

कंसोल टेस्ट इवेंट

AWS Lambda के साथ Serverless Applications

एक सरल डिबग लूप

  • छोटा सा कोड बदलाव करें।
  • डिप्लॉय करें, फिर एक टेस्ट इवेंट चलाएँ।
  • response और CloudWatch Logs पढ़ें।

डिबग लूप चक्र

AWS Lambda के साथ Serverless Applications

अभ्यास करते हैं!

AWS Lambda के साथ Serverless Applications

Preparing Video For Download...