Serverless-kehitys AWS Lambdalla · Oppitunti

Serverless-sovellusten virheenkorjaus

Tutustukaa Lambda-funktioiden tehokkaan virheenkorjauksen tekniikoihin, kuten paikalliseen testaukseen, etävirheenkorjaukseen ja CloudWatch-lokien tulkintaan ongelmien ratkaisemiseksi

Oppitunti 3/412 vaihetta

Serverless-sovellusten virheenkorjaus on ilmainen Serverless-kehitys AWS Lambdalla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Serverless-kehitys AWS Lambdalla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Serverless-kehitys AWS Lambdalla-kurssilla on yhteensä 4 oppituntia.

Johdatus Lambdan virheenkorjaukseen

Palvelimettomien sovellusten, erityisesti AWS Lambda -funktioiden, virheenkorjaukseen liittyy ainutlaatuisia haasteita. Toisin kuin perinteiset sovellukset, Lambda-funktiot ovat tilattomia ja lyhytikäisiä.

Tässä oppitunnissa tutustumme käytännön tekniikoihin, joiden avulla Lambda-funktioiden ongelmat voidaan tunnistaa ja ratkaista tehokkaasti paikallisesta testauksesta lokien tulkintaan.

Miksi palvelimettomien sovellusten virheenkorjaus on erityistä

Perinteisessä virheenkorjauksessa koodia käydään usein läpi rivi riviltä IDE:n avulla. Lambdan kanssa tämä ei ole aina suoraviivaista, koska:

  • Lyhytikäisyys: Funktiot suoritetaan vain kutsuttaessa, minkä jälkeen ne poistuvat.
  • Tilattomuus: Kutsujen välillä ei ole pysyvää muistia.
  • Hajautetut järjestelmät: Ongelmat voivat johtua useiden palveluiden välisestä vuorovaikutuksesta.

Luotamme vahvasti lokeihin, mittareihin ja jäljitykseen ymmärtääksemme, mitä tapahtuu.

Paikallinen testaus SAM CLI:llä

Yksi tehokkaimmista virheenkorjaustavoista on testata Lambda-funktiot paikallisesti ennen niiden käyttöönottoa AWS:ssä.

AWS Serverless Application Model (SAM) CLI mahdollistaa Lambda-funktioiden kutsumisen paikallisella tietokoneellasi simuloiden AWS Lambda -suoritusympäristöä.

  • Nopeampi palautesykli.
  • Tuttujen paikallisten virheenkorjaustyökalujen käyttö.

SAM CLI:n paikallisen kutsun esittely

Tässä on yksinkertainen Python Lambda -funktio. Paikallista testausta varten voit simuloida tapahtuman ja kontekstin. Kokeile suorittaa se!

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 virheenkorjauksessa

Kun Lambda on otettu käyttöön, Amazon CloudWatch Logs on ensisijainen työkalusi sen toiminnan ymmärtämiseen ja ongelmien selvittämiseen.

Aina kun Lambda-funktiotasi kutsutaan, lokit lähetetään sille omistettuun lokiryhmään. Jokainen kutsu saa yksilöllisen Request ID -tunnisteen, jonka avulla suoritusta voidaan seurata.

  • Log Groups: Sisältävät tietyn funktion lokit.
  • Log Streams: Funktion lokien yksittäiset esiintymät.

Ongelmatilanteiden etsiminen lokeista

Kun virhe ilmenee, ensimmäinen paikka sen etsimiseen on CloudWatch Logs. Voit:

  • Filter Logs: Etsi avainsanoja, kuten "ERROR" tai "Exception", tai tiettyjä viestejä.
  • Log Insights: Käytä tehokasta kyselykieltä lokien analysointiin, virheiden ryhmittelyyn ja trendien tunnistamiseen.
  • Request ID: Etsi kutsun Request ID -tunnisteen avulla kaikki tiettyyn suoritukseen liittyvät lokit.

Tarkista aina koko pinojäljitys saadaksesi yksityiskohtaiset tiedot virheestä.

Virheenkorjaus lokilausekkeiden avulla

Yksinkertaisin mutta tehokkain Lambdan virheenkorjaustekniikka on käyttää print()- (Python) tai console.log()-lausekkeita (Node.js).

Lisäämällä lokilausekkeita harkitusti voit seurata muuttujien arvoja, suorituspolkuja ja funktion tilaa koodin eri kohdissa. Katsotaan esimerkkiä:

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))

Kutsujen aiheuttamien virheiden ymmärtäminen

Lambda-funktiot voivat epäonnistua monista syistä. On tärkeää erottaa erityyppiset virheet toisistaan:

  • Function Errors: Koodisi aiheutti käsittelemättömän poikkeuksen. Nämä näkyvät CloudWatch-lokeissa pinojäljityksen kanssa.
  • Invocation Errors: Ongelmat, jotka ilmenevät ennen koodin suorittamista, kuten käyttöoikeusvirheet tai hyötykuorman kokorajat. Ne eivät välttämättä näy suoraan funktion lokeissa.
  • Timeout Errors: Funktion määritetty suoritusaika ylittyi.

CloudWatch-mittarit ja X-Ray (jota käsitellään toisessa oppitunnissa) auttavat tunnistamaan nämä ongelmat.

Pyyntöjen kulun jäljittäminen

Monimutkaisissa palvelimettomissa sovelluksissa yksi pyyntö voi kulkea useiden Lambda-funktioiden, API Gatewayn, SQS:n, DynamoDB:n ja muiden palveluiden kautta.

Pyynnön kulun ymmärtäminen näiden palveluiden välillä on keskeistä virheenkorjauksessa. Käytä Request ID -tunnistetta (joka välitetään usein muodossa x-amzn-RequestId tai vastaavassa muodossa) lokien yhdistämiseen eri komponenttien välillä.

AWS X-Ray (jota käsitellään myöhemmässä oppitunnissa) tarjoaa visuaalisen jäljityksen tätä tarkoitusta varten.

Virheenkorjauksen parhaat käytännöt

Voit vähentää virheenkorjauksen aiheuttamaa vaivaa noudattamalla näitä käytäntöjä:

  • Kattava lokitus: Kirjaa syötteet, tulosteet ja tärkeiden muuttujien tilat.
  • Rakenteinen lokitus: Käytä JSON-lokeja, jotta niiden jäsentäminen ja kyselyiden tekeminen on helpompaa.
  • Idempotenssi: Suunnittele funktiot tuottamaan sama tulos, vaikka ne kutsuttaisiin useita kertoja.
  • Pienet funktiot: Ne on helpompi eristää ja testata.
  • Automaattinen testaus: Yksikkö- ja integraatiotestit havaitsevat ongelmat varhain.

Virheenkorjaushaaste

Sinulla on Lambda-funktio, joka käsittelee käyttäjien rekisteröitymisiä. Käyttäjät ilmoittavat, että rekisteröityminen epäonnistuu joskus, mutta et näe Lambda-funktion CloudWatch-lokeissa yhtään "ERROR"-viestiä.

Mikä on todennäköisin syy tähän, ja mistä sinun kannattaa aloittaa tutkiminen?

Kertaus: palvelimettomien sovellusten virheenkorjaus

Olemme käsitelleet palvelimettomien sovellustenne virheenkorjauksen keskeiset tekniikat:

  • Paikallinen testaus SAM CLI:n avulla nopeaa iterointia varten.
  • CloudWatch Logs -lokien käyttö funktioiden toiminnan analysointiin ja virheiden tunnistamiseen.
  • Lokiviestien hyödyntäminen suorituksen kulun seuraamiseen.
  • Lambda-virheiden eri tyyppien ymmärtäminen.
  • Parhaat käytännöt helposti virheenkorjattavien palvelimettomien funktioiden rakentamiseen.

Näiden hallitseminen parantaa merkittävästi kykyänne rakentaa vankkoja palvelimettomia sovelluksia.

Aloita maksutta

Opi Serverless-kehitys AWS Lambdalla tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Serverless-sovellusten virheenkorjaus” ilmainen?

Kyllä – oppitunnin ”Serverless-sovellusten virheenkorjaus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Serverless-kehitys AWS Lambdalla-kurssin, päivitä CoddyKit PROhon. Serverless-kehitys AWS Lambdalla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Serverless-sovellusten virheenkorjaus”?

Tutustukaa Lambda-funktioiden tehokkaan virheenkorjauksen tekniikoihin, kuten paikalliseen testaukseen, etävirheenkorjaukseen ja CloudWatch-lokien tulkintaan ongelmien ratkaisemiseksi Harjoittelet Serverless-kehitys AWS Lambdalla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Serverless-kehitys AWS Lambdalla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Serverless-kehitys AWS Lambdalla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Serverless-sovellusten virheenkorjaus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Serverless-kehitys AWS Lambdalla-oppitunnilla?

Kyllä. Jokainen Serverless-kehitys AWS Lambdalla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. CloudWatch-lokit ja mittarit
  2. Virheiden käsittely ja uudelleenyritykset
  3. Serverless-sovellusten virheenkorjaus
  4. Mukautetut mittarit ja CloudWatch-hälytykset
← Takaisin: Serverless-kehitys AWS Lambdalla