Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Fehlerbehebung bei verwalteten Lambda-Instanzen
Probleme bei der Drosselung und Skalierung
Hohe Fehlerraten bei der Skalierung
Problem: Es treten Drosselungsfehler (HTTP 429) auf, wenn der Traffic schnell zunimmt.
Ursache: Lambda Managed Instances werden asynchron auf der Grundlage der CPU-Ressourcenauslastung und der Mehrparallelität skaliert. Wenn sich Ihr Traffic innerhalb von 5 Minuten mehr als verdoppelt, kann es zu Drosselungen kommen, wenn Lambda Instances und Ausführungsumgebungen entsprechend der Nachfrage skaliert.
Lösung:
-
Passen Sie die Zielressourcenauslastung an: Wenn Ihr Workload vorhersehbare Verkehrsmuster aufweist, legen Sie eine niedrigere Zielressourcenauslastung fest, um zusätzlichen Spielraum für Datenverkehrsspitzen zu haben.
-
Kapazität vor der Erwärmung: Erhöhen Sie den Datenverkehr bei einem geplanten Anstieg des Datenverkehrs über einen längeren Zeitraum schrittweise, damit die Skalierung Schritt halten kann.
-
Überwachen Sie die Skalierungsmetriken: Verfolgen Sie die Messwerte für Drosselungsfehler, um den Grund für Drosselungen und Probleme mit der Kapazitätsskalierung zu verstehen.
-
Überprüfen Sie die Funktionskonfiguration: Stellen Sie sicher, dass Ihre Funktionsspeicher- und vCPU-Einstellungen mehrere gleichzeitige Ausführungen unterstützen. Erhöhen Sie bei Bedarf die Funktionsspeicher- oder vCPU-Zuweisung.
Langsames Herunterskalieren
Problem: Es dauert lange, bis Instances herunterskaliert werden, nachdem der Traffic zurückgegangen ist.
Ursache: Lambda Managed Instances werden schrittweise herunterskaliert, um die Verfügbarkeit aufrechtzuerhalten und schnelle Kapazitätsänderungen zu vermeiden, die sich auf die Leistung auswirken könnten.
Lösung:
Dieses Verhalten wird erwartet. Lambda skaliert Instanzen konservativ herunter, um Stabilität zu gewährleisten. Überwachen Sie Ihre CloudWatch Metriken, um die Anzahl der laufenden Instanzen zu verfolgen.
Probleme mit der Parallelität
Bei Ausführungsumgebungen mit geringer Parallelität kommt es zu Drosselungen
Problem: Ihre Funktionen werden trotz verfügbarer Kapazität gedrosselt.
Ursache: Ausführungsumgebungen mit sehr niedriger maximaler Parallelität können Schwierigkeiten haben, effektiv zu skalieren. Lambda Managed Instances sind für Anwendungen mit mehreren gleichzeitigen Vorgängen konzipiert.
Lösung:
-
Erhöhen Sie die maximale Parallelität: Wenn Ihre Funktionsaufrufen nur sehr wenig CPU verbrauchen, erhöhen Sie die Einstellung für maximale Parallelität auf 64 pro vCPU.
-
Funktionscode optimieren: Überprüfen Sie Ihren Funktionscode, um den CPU-Verbrauch pro Aufruf zu reduzieren und so eine höhere Parallelität zu ermöglichen.
-
Passen Sie den Funktionsspeicher und die vCPU an: Stellen Sie sicher, dass Ihre Funktion über ausreichende Ressourcen verfügt, um mehrere gleichzeitige Aufrufe zu verarbeiten.
Probleme mit der Thread-Sicherheit (Java-Laufzeit)
Problem: Ihre Java-Funktion erzeugt falsche Ergebnisse oder es treten unter Last Rennbedingungen auf.
Ursache: Mehrere Threads führen die Handler-Methode gleichzeitig aus, und der gemeinsame Status ist nicht threadsicher.
Lösung:
-
Verwenden Sie
AtomicIntegerorAtomicLongfür Zähler anstelle von primitiven Typen -
Ersetze durch
HashMapConcurrentHashMap -
Zum
Collections.synchronizedList()Einwickeln verwendenArrayList -
Wird
ThreadLocalfür einen anforderungsspezifischen Status verwendet -
Greifen Sie IDs vom Lambda Context-Objekt aus auf die Ablaufverfolgung zu, nicht über Umgebungsvariablen
Eine ausführliche Anleitung finden Sie in der Dokumentation Java Runtime for Lambda Managed Instances.
Probleme mit der Statusisolierung (Laufzeit von Node.js)
Problem: Ihre Funktion Node.js gibt Daten aus verschiedenen Anfragen zurück oder es kommt zu Datenbeschädigungen.
Ursache: Globale Variablen werden von mehreren gleichzeitigen Aufrufen desselben Worker-Threads gemeinsam genutzt. Wenn asynchrone Operationen die Kontrolle übernehmen, können andere Aufrufe den gemeinsamen Status ändern.
Lösung:
-
Installation und Verwendung
@aws/lambda-invoke-storefür alle anforderungsspezifischen Zustände -
Ersetzen Sie globale Variablen durch und
InvokeStore.set()InvokeStore.get() -
Verwenden Sie eindeutige Dateinamen in
/tmpmit Anfrage IDs -
Access Trace IDs mit Umgebungsvariablen
InvokeStore.getXRayTraceId()anstelle von Umgebungsvariablen
Eine ausführliche Anleitung finden Sie in der Dokumentation Node.js Runtime for Lambda Managed Instances.
Dateikonflikte (Python-Laufzeit)
Problem: Ihre Python-Funktion liest falsche Daten aus Dateien in/tmp.
Ursache: Das /tmp Verzeichnis wird von mehreren Prozessen gemeinsam genutzt. Gleichzeitige Schreibvorgänge in dieselbe Datei können zu Datenbeschädigungen führen.
Lösung:
-
Verwenden Sie bei Anfrage IDs eindeutige Dateinamen:
/tmp/request_{context.request_id}.txt -
Verwenden Sie das Sperren von Dateien mit
fcntl.flock()für gemeinsam genutzte Dateien -
Bereinigen Sie temporäre Dateien mit „
os.remove()Nach dem Gebrauch“
Eine ausführliche Anleitung finden Sie in der Dokumentation zur Python-Laufzeit für Lambda Managed Instances.
Leistungsprobleme
Hohe Speicherauslastung
Problem: Bei Ihren Funktionen kommt es zu hoher Speicherauslastung oder zu out-of-memory Fehlern.
Ursache: Jede gleichzeitige Anforderung in Python wird in einem separaten Prozess mit eigenem Speicherplatz ausgeführt. Die gesamte Speichernutzung entspricht dem Speicher pro Prozess multipliziert mit gleichzeitigen Prozessen.
Lösung:
-
Überwachen Sie die Metrik in
MemoryUtilizationCloudWatch -
Reduzieren Sie die
MaxConcurrencyEinstellung, wenn sich die Speichernutzung dem Speicherlimit der Funktion nähert -
Erhöhen Sie die Speicherzuweisung für Funktionen, um eine höhere Parallelität zu unterstützen
-
Optimieren Sie die Speichernutzung, indem Sie Daten bei Bedarf statt während der Initialisierung laden
Inkonsistente Leistung
Problem: Die Funktionsleistung variiert zwischen Aufrufen erheblich.
Ursache: Lambda kann je nach Verfügbarkeit unterschiedliche Instanztypen auswählen, oder Funktionen werden möglicherweise auf Instanzen mit unterschiedlicher Ressourcenverfügbarkeit ausgeführt.
Lösung:
-
Zulässige Instanztypen angeben: Wenn Sie bestimmte Leistungsanforderungen haben, konfigurieren Sie zulässige Instance-Typen in Ihrem Kapazitätsanbieter, um die Instance-Typen einzuschränken, die Lambda auswählen kann.
-
Überwachen Sie Metriken auf Instanzebene: Verfolgen Sie
CPUUtilizationund verfolgen Sie sieMemoryUtilizationauf Ebene des Kapazitätsanbieters, um Ressourcenbeschränkungen zu identifizieren. -
Überprüfen Sie
vCPUAvailabledie Kapazitätskennzahlen: Stellen Sie sicherMemoryAvailable, dass auf Ihren Instances ausreichend Ressourcen verfügbar sind.
Probleme mit dem Kapazitätsanbieter
Die Funktionsversion kann nicht AKTIV werden
Problem: Ihre Funktionsversion befindet sich nach der Veröffentlichung weiterhin im Status „Ausstehend“.
Ursache: Lambda startet Managed Instances und startet Ausführungsumgebungen. Dieser Vorgang benötigt Zeit, insbesondere bei der ersten Funktionsversion eines neuen Kapazitätsanbieters.
Lösung:
Warten Sie, bis Lambda den Initialisierungsprozess abgeschlossen hat. Lambda startet standardmäßig drei Instances aus Gründen der AZ-Resilienz und startet drei Ausführungsumgebungen, bevor Ihre Funktionsversion als AKTIV markiert wird. Dies dauert in der Regel mehrere Minuten.
Der Kapazitätsanbieter kann nicht gelöscht werden
Problem: Beim Versuch, einen Kapazitätsanbieter zu löschen, wird eine Fehlermeldung angezeigt.
Ursache: Sie können keinen Kapazitätsanbieter löschen, an den Funktionsversionen angehängt sind.
Lösung:
-
Identifizieren Sie mit der
ListFunctionVersionsByCapacityProviderAPI alle Funktionsversionen, die den Kapazitätsanbieter verwenden. -
Löschen oder aktualisieren Sie diese Funktionsversionen, um die Zuordnung des Kapazitätsanbieters zu entfernen.
-
Versuchen Sie erneut, den Kapazitätsanbieter zu löschen.
Generische Fehlermeldungen bei der Veröffentlichung von Funktionen
Problem: Beim Veröffentlichen von Funktionen treten generische Fehlermeldungen wie „Beim Publizieren ist ein interner Fehler aufgetreten“ auf.
Lösung:
-
Überprüfen Sie die IAM-Berechtigungen: Stellen Sie sicher, dass Sie über die entsprechenden
lambda:PassCapacityProviderBerechtigungen für den Kapazitätsanbieter verfügen, den Sie verwenden möchten. -
Überprüfen Sie die Konfiguration des Kapazitätsanbieters: Stellen Sie mithilfe der
GetCapacityProviderAPI sicher, dass sich Ihr Kapazitätsanbieter im Status AKTIV befindet. -
Überprüfen Sie die VPC-Konfiguration: Stellen Sie sicher, dass die in Ihrem Kapazitätsanbieter angegebenen Subnetze und Sicherheitsgruppen korrekt konfiguriert und zugänglich sind.
-
AWS CloudTrail Protokolle überprüfen: In den CloudTrail Protokollen finden Sie detaillierte Fehlerinformationen zu dem fehlgeschlagenen Vorgang.
Probleme bei der Überwachung und Beobachtbarkeit
Fehlende Metriken CloudWatch
Problem: Sie sehen keine erwarteten Kennzahlen CloudWatch für Ihren Kapazitätsanbieter oder Ihre Funktionen.
Ursache: Metriken werden in Intervallen von 5 Minuten veröffentlicht. Bei neuen Kapazitätsanbietern oder Funktionen sind Metriken möglicherweise nicht sofort verfügbar.
Lösung:
Warten Sie nach der Veröffentlichung einer Funktionsversion mindestens 5-10 Minuten, bevor Sie erwarten, dass Metriken in angezeigt werden CloudWatch. Vergewissern Sie sich, dass Sie sich den richtigen Namespace (AWS/Lambda) und die richtigen Dimensionen (CapacityProviderNameFunctionName, oderInstanceType) ansehen.
Protokolle können nicht gefunden CloudWatch werden
Problem: Ihre Funktion wird erfolgreich ausgeführt, aber Sie können keine CloudWatch Protokolle in Logs finden.
Ursache: Lambda Managed Instances werden in Ihrer VPC ausgeführt und benötigen Netzwerkkonnektivität, um Protokolle an Logs zu CloudWatch senden. Ohne die richtige VPC-Konnektivitätskonfiguration können Ihre Funktionen den Endpunkt des CloudWatch Logs-Dienstes nicht erreichen.
Lösung:
Konfigurieren Sie die VPC-Konnektivität, damit Ihre Funktionen CloudWatch Protokolle an Logs senden können. Sie haben drei Möglichkeiten:
Option 1: VPC-Endpunkt für CloudWatch Logs (für die Produktion empfohlen)
-
Öffnen Sie die Amazon VPC-Konsole unter console.aws.amazon.com/vpc/
. -
Wählen Sie im Navigationsbereich Endpunkte aus.
-
Wählen Sie Endpunkt erstellen aus.
-
Wählen Sie bei Service category (Servicekategorie) die Option AWS services (-Services) aus.
-
Wählen Sie als Servicename die Option (durch Ihre Region ersetzen) aus.
com.amazonaws.region.logsregionAWS -
Wählen Sie für VPC die von Ihrem Kapazitätsanbieter verwendete VPC aus.
-
Wählen Sie für Subnetze die Subnetze aus, in denen Sie Endpunkt-Netzwerkschnittstellen erstellen möchten. Wählen Sie für eine hohe Verfügbarkeit Subnetze in mehreren Availability Zones aus.
-
Wählen Sie für Sicherheitsgruppen Sicherheitsgruppen aus, die eingehenden HTTPS-Verkehr (Port 443) aus der Sicherheitsgruppe Ihrer Funktion zulassen.
-
Aktivieren Sie Private DNS für den Endpunkt.
-
Wählen Sie Endpunkt erstellen aus.
Option 2: Öffentliches Subnetz mit Internet-Gateway
Wenn Ihr Kapazitätsanbieter öffentliche Subnetze verwendet, stellen Sie Folgendes sicher:
-
Ein Internet-Gateway ist an Ihre VPC angeschlossen
-
Die Routentabelle leitet den
0.0.0.0/0Verkehr an das Internet-Gateway weiter -
Sicherheitsgruppen lassen ausgehenden HTTPS-Verkehr auf Port 443 zu
Option 3: Privates Subnetz mit NAT-Gateway
Wenn Ihr Kapazitätsanbieter private Subnetze verwendet, stellen Sie Folgendes sicher:
-
Ein NAT-Gateway ist in einem öffentlichen Subnetz vorhanden
-
Die Routing-Tabelle des privaten Subnetzes leitet den
0.0.0.0/0Verkehr an das NAT-Gateway weiter -
Die öffentliche Subnetz-Routentabelle leitet den
0.0.0.0/0Verkehr an ein Internet-Gateway weiter -
Sicherheitsgruppen ermöglichen ausgehenden HTTPS-Verkehr auf Port 443
Eine ausführliche Anleitung zu VPC-Konnektivitätsoptionen finden Sie unter VPC-Konnektivität für Lambda Managed Instances.
Schwierigkeiten beim Korrelieren von Protokollen aus gleichzeitigen Anfragen
Problem: Die Protokolle verschiedener Anfragen sind ineinander verschachtelt, was es schwierig macht, einzelne Anfragen nachzuverfolgen.
Ursache: Das Verschachteln von Protokollen wird erwartet und ist in Systemen mit mehreren gleichzeitigen Vorgängen Standard.
Lösung:
-
Strukturierte Protokollierung im JSON-Format verwenden: Geben Sie die Anforderungs-ID in alle Protokollanweisungen ein
-
Java: Verwenden Sie Log4j mit, um die
ThreadContextAnfrage-ID automatisch einzubeziehen -
Node.js:
console.log()Mit JSON-Formatierung verwenden und einschließenInvokeStore.getRequestId() -
Python: Verwenden Sie das Standard-Logging-Modul mit JSON-Formatierung und fügen Sie hinzu
context.request_id
Eine ausführliche Anleitung finden Sie auf den laufzeitspezifischen Dokumentationsseiten.
Weitere Hilfe
Wenn Sie nach dem Ausprobieren dieser Lösungen weiterhin Probleme haben:
-
CloudWatch Kennzahlen überprüfen: Überprüfen Sie die Kennzahlen zum Kapazitätsanbieter und zur Ausführungsumgebung, um Ressourcenbeschränkungen oder Skalierungsprobleme zu identifizieren.
-
AWS CloudTrail Protokolle überprüfen: In den CloudTrail Protokollen finden Sie detaillierte Informationen zu API-Aufrufen und Fehlern.
-
AWS Support kontaktieren: Wenn Sie das Problem nicht lösen können, wenden Sie sich mit Einzelheiten zur Konfiguration Ihres Kapazitätsanbieters, zur Funktionskonfiguration und zu den spezifischen Fehlermeldungen, auf die Sie stoßen, an den AWS Support.
Nächste Schritte
-
Erfahren Sie mehr über Kapazitätsanbieter für Lambda Managed Instances
-
Skalierung für Lambda Managed Instances verstehen
-
Lesen Sie laufzeitspezifische Anleitungen für Java, Node.js und Python
-
Überwachen Sie Lambda Managed Instances mit Metriken CloudWatch
-
Informieren Sie sich über bewährte Methoden für Lambda Managed Instances