0Pricing
Serverless AWS Lambda Development · Pelajaran

Menelusuri Kesalahan Aplikasi Tanpa Server

Temukan teknik untuk menelusuri kesalahan fungsi Lambda secara efektif, termasuk pengujian lokal, penelusuran kesalahan jarak jauh, dan interpretasi log CloudWatch untuk menyelesaikan masalah.

Menelusuri Kesalahan Aplikasi Tanpa Server adalah pelajaran Serverless AWS Lambda Development gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Serverless AWS Lambda Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Serverless AWS Lambda Development mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Intro to Debugging Lambda

Debugging serverless applications, especially AWS Lambda functions, presents unique challenges. Unlike traditional applications, Lambdas are stateless and ephemeral.

In this lesson, we'll explore practical techniques for effectively identifying and resolving issues in your Lambda functions, from local testing to interpreting logs.

Why Serverless Debugging is Unique

Traditional debugging often involves stepping through code line-by-line using an IDE. With Lambda, this isn't always straightforward because:

  • Ephemeral Nature: Functions run only when invoked, then disappear.
  • Statelessness: No persistent memory between invocations.
  • Distributed Systems: Issues can arise from interactions between many services.

We rely heavily on logs, metrics, and tracing to understand what's happening.

Local Testing with SAM CLI

One of the most effective ways to debug is to test your Lambda functions locally before deploying them to AWS.

The AWS Serverless Application Model (SAM) CLI allows you to invoke your Lambda functions on your local machine, simulating the AWS Lambda runtime environment.

  • Faster feedback loop.
  • Use your familiar local debugging tools.

SAM CLI Local Invoke Demo

Here's a simple Python Lambda function. For local testing, you can simulate an event and context. Try running it!

import json

def lambda_handler(event, context):
    message = event.get('message', 'Hello from Lambda!')
    print(f"Received event: {json.dumps(event)}")
    print(f"Processing message: {message}")
    return {
        'statusCode': 200,
        'body': json.dumps({'response': message})
    }

# This block allows local execution
if __name__ == '__main__':
    # Simulate an event
    test_event = {'message': 'Local debug test'}
    # Simulate a context object
    test_context = type('obj', (object,), {'invoked_function_arn': 'local'})()

    response = lambda_handler(test_event, test_context)
    print("\n--- Lambda Response ---")
    print(json.dumps(response, indent=2))

CloudWatch Logs for Debugging

Once your Lambda is deployed, Amazon CloudWatch Logs becomes your primary tool for understanding its behavior and debugging issues.

Every time your Lambda function is invoked, logs are sent to a dedicated log group. Each invocation gets a unique Request ID, which helps trace its execution.

  • Log Groups: Contain logs for a specific function.
  • Log Streams: Specific instances of your function's logs.

Finding Issues in Logs

When an error occurs, the first place to look is CloudWatch Logs. You can:

  • Filter Logs: Search for keywords like "ERROR", "Exception", or specific messages.
  • Log Insights: Use powerful query language to analyze logs, group errors, and identify trends.
  • Request ID: Use the Request ID from the invocation to find all logs related to a specific execution.

Always check the full stack trace for detailed error information.

Debugging with Log Statements

The simplest yet most powerful debugging technique for Lambda is using print() (Python) or console.log() (Node.js) statements.

By strategically adding log statements, you can track variable values, execution paths, and function state at different points in your code. Let's see an example:

import json

def calculate_discount(price, discount_percentage):
    print(f"DEBUG: Initial price: {price}")
    if not isinstance(price, (int, float)) or price < 0:
        raise ValueError("Price must be non-negative.")
    if not isinstance(discount_percentage, (int, float)) or not (0 <= discount_percentage <= 100):
        raise ValueError("Discount must be between 0 and 100.")

    discount_amount = price * (discount_percentage / 100)
    final_price = price - discount_amount
    print(f"DEBUG: Final price: {final_price}")
    return final_price

def lambda_handler(event, context):
    try:
        data = json.loads(event['body'])
        price = data['price']
        discount = data['discount']
        
        final_price = calculate_discount(price, discount)
        
        return {
            'statusCode': 200,
            'body': json.dumps({'originalPrice': price, 'finalPrice': final_price})
        }
    except Exception as e:
        print(f"ERROR: An error occurred: {e}")
        return {
            'statusCode': 400,
            'body': json.dumps({'error': str(e)})
        }

if __name__ == '__main__':
    # Test case 1: Valid input
    test_event_1 = {'body': json.dumps({'price': 100, 'discount': 10})}
    response_1 = lambda_handler(test_event_1, None)
    print("\n--- Test Case 1 Response ---")
    print(json.dumps(response_1, indent=2))

    # Test case 2: Invalid discount
    test_event_2 = {'body': json.dumps({'price': 50, 'discount': 110})}
    response_2 = lambda_handler(test_event_2, None)
    print("\n--- Test Case 2 Response ---")
    print(json.dumps(response_2, indent=2))

Understanding Invocation Errors

Lambda functions can fail for various reasons. It's crucial to distinguish between different error types:

  • Function Errors: Your code threw an unhandled exception. These appear in CloudWatch Logs with a stack trace.
  • Invocation Errors: Issues before your code even runs, like permissions errors or payload size limits. These might not even show up in your function's logs directly.
  • Timeout Errors: Your function exceeded its configured execution time.

CloudWatch metrics and X-Ray (another lesson!) help identify these.

Tracing Request Flow

In complex serverless applications, a single request might involve multiple Lambda functions, API Gateway, SQS, DynamoDB, and more.

Understanding the flow of a request across these services is key to debugging. Use the Request ID (often propagated as x-amzn-RequestId or similar) to correlate logs across different components.

AWS X-Ray (covered in a later lesson) provides visual tracing for this purpose.

Best Practices for Debugging

To minimize debugging headaches, adopt these practices:

  • Comprehensive Logging: Log inputs, outputs, and key variable states.
  • Structured Logging: Use JSON logs for easier parsing and querying.
  • Idempotency: Design functions to produce the same result even if invoked multiple times.
  • Small Functions: Easier to isolate and test.
  • Automated Testing: Unit and integration tests catch issues early.

Debugging Challenge

You have a Lambda function that processes user registration. Users report that sometimes, their registration fails, but you don't see any "ERROR" messages in CloudWatch Logs for your Lambda function.

What is the most likely reason for this, and where should you investigate first?

Recap: Debugging Serverless

We've covered essential techniques for debugging your serverless applications:

  • Local testing with SAM CLI for rapid iteration.
  • Using CloudWatch Logs to analyze function behavior and identify errors.
  • Leveraging log statements to trace execution flow.
  • Understanding different types of Lambda errors.
  • Best practices for building debuggable serverless functions.

Mastering these will significantly improve your ability to build robust serverless applications.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menelusuri Kesalahan Aplikasi Tanpa Server” gratis?

Ya — teks lengkap “Menelusuri Kesalahan Aplikasi Tanpa Server” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Serverless AWS Lambda Development, upgrade ke CoddyKit PRO. Kursus Serverless AWS Lambda Development mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menelusuri Kesalahan Aplikasi Tanpa Server”?

Temukan teknik untuk menelusuri kesalahan fungsi Lambda secara efektif, termasuk pengujian lokal, penelusuran kesalahan jarak jauh, dan interpretasi log CloudWatch untuk menyelesaikan masalah. Kamu berlatih Serverless AWS Lambda Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Serverless AWS Lambda Development?

Tidak diperlukan pengalaman sebelumnya. Serverless AWS Lambda Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Menelusuri Kesalahan Aplikasi Tanpa Server” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Serverless AWS Lambda Development ini?

Ya. Setiap pelajaran Serverless AWS Lambda Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Log dan Metrik CloudWatch
  2. Penanganan Kesalahan dan Percobaan Ulang
  3. Menelusuri Kesalahan Aplikasi Tanpa Server
  4. Metrik Khusus dan Alarm CloudWatch
← Kembali ke Serverless AWS Lambda Development