Beheben von Bereitstellungsproblemen in Lambda - AWS Lambda

Beheben von Bereitstellungsproblemen in Lambda

Wenn Sie Ihre Funktion aktualisieren, stellt Lambda die Änderung durch Starten der neuen Instances der Funktion mit aktualisiertem Code oder aktualisierten Einstellungen bereit. Bereitstellungsfehler verhindern die Verwendung der neuen Version und können auf Probleme mit Bereitstellungspaket, Code, Berechtigungen oder Tools zurückzuführen sein.

Wenn Sie Updates für Ihre Funktion direkt mit der Lambda-API oder mit einem Client wie dem AWS CLI bereitstellen, können Sie Fehler von Lambda direkt in der Ausgabe sehen. Wenn Sie Services wie AWS CloudFormation, AWS CodeDeploy oder AWS CodePipeline verwenden, suchen Sie nach der Antwort von Lambda in den Protokollen oder im Ereignisstream für diesen Service.

Die folgenden Themen enthalten Ratschläge zur Fehlerbehebung bei Fehlern und Problemen, die bei der Verwendung der Lambda-API, -Konsole oder -Tools auftreten können. Wenn Sie auf ein Problem stoßen, das hier nicht aufgeführt ist, können Sie die Schaltfläche Feedback auf dieser Seite verwenden, um es zu melden.

Weitere Tipps zur Fehlerbehebung und Antworten auf häufig gestellte Supportfragen finden Sie im AWS- Wissenscenter.

Weitere Informationen zum Debuggen und zur Problembehandlung für Lambda-Anwendungen finden Sie bei Serverless Land unter Debugging.

Allgemein: Berechtigung wird verweigert/Kann solche Datei nicht laden

Fehler: EACCES: Berechtigung verweigert. Öffnen Sie '/var/task/index.js'

Fehler: kann eine derartige Datei nicht laden – Funktion

Fehler: [Fehler 13] Berechtigung verweigert: '/var/task/function.py'

Die Lambda-Laufzeit benötigt die Berechtigung zum Lesen der Dateien in Ihrem Bereitstellungspaket. In der oktalen Linux-Notation der Berechtigungen benötigt Lambda 644 Berechtigungen für nicht ausführbare Dateien (rw-r--r--) und 755 Berechtigungen (rwxr-xr-x) für Verzeichnisse und ausführbare Dateien.

Verwenden Sie unter Linux und MacOS den chmod-Befehl, um Dateiberechtigungen für Dateien und Verzeichnisse in Ihrem Bereitstellungspaket zu ändern. Um beispielsweise einer nicht ausführbaren Datei die richtigen Berechtigungen zu geben, führen Sie den folgenden Befehl aus.

chmod 644 <filepath>

Informationen zum Ändern von Dateiberechtigungen in Windows finden Sie unter Festlegen, Anzeigen, Ändern oder Entfernen von Berechtigungen für ein Objekt in der Microsoft-Windows-Dokumentation.

Anmerkung

Wenn Sie Lambda nicht die Berechtigungen gewähren, die es für den Zugriff auf Verzeichnisse in Ihrem Bereitstellungspaket benötigt, setzt Lambda die Berechtigungen für diese Verzeichnisse auf 755 (rwxr-xr-x).

Allgemein: Beim Aufruf von UpdateFunctionCode tritt ein Fehler auf

Fehler: Beim Aufrufen der UpdateFunctionCode-Operation ist ein Fehler aufgetreten (RequestEntityTooLargeException)

Wenn Sie ein Bereitstellungspaket oder ein Ebenenarchiv direkt in Lambda hochladen, ist die Größe der ZIP-Datei auf 50 MB begrenzt. Um eine größere Datei hochzuladen, speichern Sie sie in Amazon S3 und verwenden Sie die S3Bucket- und S3Key--Parameter.

Anmerkung

Wenn Sie eine Datei direkt mit der AWS CLI, dem AWS SDK oder auf andere Weise hochladen, wird die binäre ZIP-Datei in base64 konvertiert, wodurch ihre Größe um ca. 30 % erhöht wird. Um dies und die Größe anderer Parameter in der Anforderung zu ermöglichen, ist die tatsächliche von Lambda angewendete Größenbeschränkung der Anforderung größer. Aus diesem Grund ist der Grenzwert von 50 MB ein ungefährer Wert.

Amazon S3: Fehlercode PermanentRedirect.

Fehler: Fehler beim GetObject. S3-Fehlercode: PermanentRedirect. S3-Fehlermeldung: Der Bucket befindet sich in dieser Region: us-east-2. Verwenden Sie diese Region, um die Anfrage zu wiederholen

Wenn Sie das Bereitstellungspaket einer Funktion aus einem Amazon-S3-Bucket hochladen, muss sich der Bucket in derselben Region wie die Funktion befinden. Dieses Problem kann auftreten, wenn Sie ein Amazon-S3-Objekt in einem Aufruf von UpdateFunctionCode angeben, oder die Paket- und Bereitstellungsbefehle in der AWS CLI-CLI oder AWS SAM-CLI verwenden. Erstellen Sie einen Bucket mit Bereitstellungsartefakt für jede Region, in der Sie Anwendungen entwickeln.

Allgemein: Kann nicht gefunden werden, kann nicht geladen werden, Klasse nicht gefunden, keine solche Datei oder kein Verzeichnis

Fehler: Modul 'function' kann nicht gefunden werden

Fehler: kann eine derartige Datei nicht laden – Funktion

Fehler: Modul 'function' kann nicht importiert werden

Fehler: Klasse nicht gefunden: function.Handler

Fehler: fork/exec /var/task/function: keine solche Datei oder kein solches Verzeichnis

Fehler: Der Typ 'Function.Handler' kann nicht aus der Assembly 'Function' geladen werden.'

Der Name der Datei oder Klasse in der Handler-Konfiguration Ihrer Funktion stimmt nicht mit Ihrem Code überein. Weitere Informationen finden Sie im folgenden Abschnitt.

Allgemein: Undefinierter Methodenhandler

Fehler: index.handler ist nicht definiert oder wurde nicht exportiert

Fehler: Handler 'handler' fehlt für Modul 'function'

Fehler: undefinierte Methode 'handler' für #<LambdaHandler:0x000055b76ccebf98>

Fehler: Keine öffentliche Methode namens handleRequest mit der entsprechenden Methodensignatur für Klasse function.Handler gefunden

Fehler: Die Methode 'handleRequest' konnte nicht im Typ 'Function.Handler' der Assembly 'Function' gefunden werden

Der Name der Handler-Methode in der Handler-Konfiguration Ihrer Funktion stimmt nicht mit Ihrem Code überein. Jede Laufzeit definiert eine Namenskonvention für Handler wie Dateiname.Methodenname. Der Handler ist die Methode im Code Ihrer Funktion, die von der Laufzeit ausführt wird, wenn Ihre Funktion aufgerufen wird.

Lambda stellt für einige Sprachen eine Bibliothek mit einer Schnittstelle bereit, die erwartet, dass eine Handler-Methode einen bestimmten Namen hat. Weitere Informationen zur Handlerbenennung für jede Sprache finden Sie in den folgenden Themen.

Allgemein: Speicherlimit für Lambda-Code überschritten

Fehler: Das Code-Speicherlimit wurde überschritten.

Lambda speichert Ihren Funktionscode in einem internen S3-Bucket, der nur für Ihr Konto bestimmt ist. Jedem AWS-Konto werden 75 GB Speicherplatz in jeder Region zugewiesen. Der Codespeicher umfasst den gesamten Speicherplatz, der sowohl von Lambda-Funktionen als auch von Lambda-Ebenen verwendet wird. Wenn Sie das Kontingent erreichen, erhalten Sie eine CodeStorageExceededException, wenn Sie versuchen, neue Funktionen bereitzustellen.

Verwalten Sie den verfügbaren Speicherplatz, indem Sie alte Versionen von Funktionen bereinigen, ungenutzten Code entfernen oder Lambda-Ebenen verwenden. Darüber hinaus empfiehlt es sich, separate AWS-Konten für separate Workloads zu verwenden, um die Verwaltung der Speicherkontingente zu vereinfachen.

Sie können Ihre gesamte Speichernutzung in der Lambda-Konsole im Untermenü Dashboard einsehen:

Überwachung der Beobachtbarkeit Abbildung 26

Lambda: Ebenenkonvertierung ist fehlgeschlagen.

Fehler: Lambda-Ebenenkonvertierung ist fehlgeschlagen. Hinweise zur Lösung dieses Problems finden Sie auf der Seite „Beheben von Bereitstellungsproblemen in Lambda“ im Lambda-Benutzerhandbuch.

Wenn Sie eine Lambda-Funktion mit einer Ebene konfigurieren, führt Lambda die Ebene mit Ihrem Funktionscode zusammen. Wenn dieser Prozess nicht abgeschlossen wird, gibt Lambda diesen Fehler zurück. Führen Sie in diesem Fall die folgenden Schritte aus:

  • Löschen Sie alle ungenutzten Dateien von Ihrer Ebene.

  • Löschen Sie alle symbolischen Links in Ihrer Ebene.

  • Benennen Sie alle Dateien um, die denselben Namen wie ein Verzeichnis in einer der Ebenen Ihrer Funktion haben.

Lambda: InvalidParameterValueException oder RequestEntityTooLargeException

Fehler: InvalidParameterValueException: Lambda konnte Ihre Umgebungsvariablen nicht konfigurieren, da die von Ihnen angegebenen Umgebungsvariablen das Limit von 4 KB überschritten haben. Angegebene Zeichenfolge: {"A1":"uSFeY5cyPiPn7AtnX5BsM...

Fehler: RequestEntityToolargeException: Die Anforderung muss für die UpdateFunctionConfiguration-Operation kleiner als 5120 Bytes sein.

Die maximale Größe des Variablenobjekts, das in der Konfiguration der Funktion gespeichert ist, darf 4096 Bytes nicht überschreiten. Dazu gehören Schlüsselnamen, Werte, Anführungszeichen, Kommas und Klammern. Die Gesamtgröße des HTTP-Anforderungstexts ist ebenfalls begrenzt.

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs22.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "amzn-s3-demo-bucket", "KEY": "file.txt" } }, ... }

In diesem Beispiel umfasst das Objekt 39 Zeichen und benötigt 39 Bytes, wenn es als Zeichenfolge gespeichert wird (ohne Leerzeichen {"BUCKET":"amzn-s3-demo-bucket","KEY":"file.txt"}. Standard-ASCII-Zeichen in Umgebungsvariablenwerten verwenden jeweils ein Byte. Erweiterte ASCII- und Unicode-Zeichen können zwischen 2 und 4 Bytes pro Zeichen verwenden.

Lambda: InvalidParameterValueException

Fehler: InvalidParameterValueException: Lambda konnte Ihre Umgebungsvariablen nicht konfigurieren, da die von Ihnen angegebenen Umgebungsvariablen reservierte Schlüssel enthalten, die derzeit nicht für Änderungen unterstützt werden.

Lambda reserviert einige Umgebungsvariablenschlüssel zur internen Verwendung. Beispielsweise wird AWS_REGION von der Laufzeit verwendet, um die aktuelle Region zu bestimmen, und kann nicht außer Kraft gesetzt werden. Andere Variablen, wie z. B. PATH, werden von der Laufzeit verwendet, können aber in Ihrer Funktionskonfiguration erweitert werden. Eine vollständige Liste finden Sie unter Definierte Laufzeitumgebungsvariablen.

Lambda: Kontingente für Gleichzeitigkeit und Speicher

Fehler: Specified ConcurrentExecutions for function decreases account's UnreservedConcurrentExecution below its minimum value (Durch den für „ConcurrentExecutions“ angegebenen Wert sinkt „UnreservedConcurrentExecution“ des Kontos unter den Mindestwert.)

Fehler: 'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Der Wert für „memorySize“ erfüllt die folgende Einschränkung nicht: Der Wert des Mitglieds darf maximal 3 008 betragen.)

Diese Fehler treten auf, wenn Sie für Ihr Konto die Kontingente für Gleichzeitigkeit oder Speicher überschreiten. Neue AWS-Konten haben reduzierte Gleichzeitigkeits- und Speicherkontingente. Um Fehler im Zusammenhang mit der Gleichzeitigkeit zu beheben, können Sie eine Kontingenterhöhung beantragen. Sie können keine Erhöhung des Speicherkontingents beantragen.

  • Gleichzeitigkeit: Ein Fehler kann auftreten, wenn Sie wenn Sie versuchen, eine Funktion mit reservierter oder bereitgestellter Gleichzeitigkeit zu erstellen, oder wenn Ihre funktionsspezifische Gleichzeitigkeitsanforderung (PutFunctionConcurrency) das Gleichzeitigkeitskontingent Ihres Kontos übersteigt.

  • Speicher: Fehler treten auf, wenn die der Funktion zugewiesene Speichermenge das Speicherkontingent Ihres Kontos übersteigt.

Lambda: Ungültige Aliaskonfiguration für bereitgestellte Gleichzeitigkeit

Fehler: Ungültige Aliaskonfiguration für bereitgestellte Gleichzeitigkeit

Dieser Fehler tritt auf, wenn Sie versuchen, den Code oder die Konfiguration einer Lambda-Funktion zu aktualisieren, während ein Alias mit bereitgestellter Gleichzeitigkeit auf eine Version verweist, bei der Probleme auftreten. Lambda initialisiert Ausführungsumgebungen für die bereitgestellte Gleichzeitigkeit vorab. Wenn diese Umgebungen aufgrund von Codefehlern, Ressourcenbeschränkungen oder einem betroffenen Stack und Alias nicht ordnungsgemäß initialisiert werden können, schlägt die Bereitstellung fehl. Führen Sie in diesem Fall die folgenden Schritte aus:

  1. Den Alias rückgängig machen: Aktualisieren Sie den Alias vorübergehend, sodass er auf die zuvor funktionierende Version verweist.

    aws lambda update-alias \ --function-name <function-name> \ --name <alias-name> \ --function-version <known-good-version>
  2. Lambda-Initialisierungscode korrigieren: Stellen Sie sicher, dass der Initialisierungscode, der außerhalb des Handlers ausgeführt wird, keine nicht abgefangenen Ausnahmen enthält, und initialisieren Sie die Clients und Verbindungen.

  3. Sicherheit erneut bereitstellen: Stellen Sie korrigierten Code bereit und veröffentlichen Sie eine neue Version. Aktualisieren Sie dann den Alias so, dass er auf die korrigierte Version verweist. Aktivieren Sie optional die bereitgestellte Gleichzeitigkeit erneut, falls erforderlich.

Falls Sie AWS CloudFormation verwenden, aktualisieren Sie die Stack-Definition FunctionVersion:!GetAtt version.Version, sodass der Alias auf die funktionierende Version verweist:

alias: Type: AWS::Lambda::Alias Properties: FunctionName: !Ref function FunctionVersion: !GetAtt version.Version Name: BLUE ProvisionedConcurrencyConfig: ProvisionedConcurrentExecutions: 1