Wie behebe ich den Fehler „Die endgültige Richtliniengröße ist größer als das Limit“ von Lambda?
Wenn ich einen Auslöser setze, um meine AWS-Lambda-Funktion aufzurufen, erhalte ich die Fehlermeldung „Die endgültige Richtliniengröße ist größer als das Limit“.
Kurzbeschreibung
Wenn die ressourcenbasierte Richtlinie Ihrer Lambda-Funktion über 20 KB groß ist, gibt Lambda den Fehler Die endgültige Richtliniengröße ist größer als der Grenzwert zurück.
Der Fehler kann auftreten, wenn Sie der ressourcenbasierten Richtlinie Ihrer Funktion Richtlinienanweisungen hinzufügen, indem Sie einen der folgenden Schritte ausführen:
- Manuell den Befehl add-permission in AWS Command Line Interface (AWS CLI) verwenden.
- Ressourcen für andere AWS-Services erstellen, die eine Genehmigung für den Zugriff auf Ihre Funktion benötigen.
Um den Fehler zu beheben, reduzieren Sie die Größe der Richtlinie Ihrer Funktion, indem Sie sich wiederholende Richtlinienanweisungen entfernen und durch konsolidierte Anweisungen ersetzen, die Platzhalter (*) verwenden. Weitere Informationen finden Sie unter Lambda-Kontingente und Bereinigen von ressourcenbasierten Richtlinien.
Lösung
Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.
Ihre ressourcenbasierten Richtlinien Ihrer Funktion überprüfen
Hinweis: Ersetzen Sie für die folgenden Befehle my-function durch den Namen Ihrer Funktion oder den Amazon-Ressourcennamen (ARN).
1. Führen Sie den folgenden get-policy-Befehl in AWS CLI aus, um die ressourcenbasierte Richtlinie Ihrer Lambda-Funktion zu finden und zu überprüfen:
$ aws lambda get-policy --function-name my-function
Hinweis: Sie können auch den Befehlszeilen-JSON-Prozessor jq im Befehl get-policy verwenden, um erweiterte Abfragen zu schreiben. Informationen zum Herunterladen und Installieren von jq finden Sie unter Download jq auf der jq-Website bei GitHub.
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Richtlinie einer Lambda-Funktion als JSON-Datei zu formatieren
$ aws lambda get-policy --function-name my-function | jq '.Policy|fromjson'
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Größe der Richtlinie einer Lambda-Funktion zu ermitteln
$ aws lambda get-policy --function-name my-function | jq -r '.Policy' | wc -c
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Anweisungs-ID (Sid) bestimmter Richtlinienanweisungen zu finden
Ersetzen Sie events.amazonaws.com durch den AWS-Service, der Ihre Funktion aufruft.
$ aws lambda get-policy --function-name my-function | jq '.Policy | fromjson | .Statement[] | select(.Principal.Service=="events.amazonaws.com") | .Sid'
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Sid von Ressourcen abzurufen, deren Namen mit derselben Zeichenfolge beginnen
Ersetzen Sie arn:aws:events:region:account-id:rule/test- durch eine Zeichenfolge, die die ARNs der Ressourcen mehrerer sich wiederholender Richtlinienanweisungen gemeinsam haben.
$ aws lambda get-policy --function-name my-function | jq '.Policy | fromjson | .Statement[] | select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-")) | .Sid'
2. Identifizieren Sie in der ressourcenbasierten Richtlinie die Richtlinienanweisungen, die Sie durch einen Platzhalter ersetzen können. Notieren Sie sich die Sid jeder Richtlinienanweisung.
Sich wiederholende Richtlinienanweisungen entfernen
Führen Sie den folgenden remove-permission-Befehl in AWS CLI aus, um jede sich wiederholende Richtlinienanweisung zu entfernen. Ersetzen Sie my-function durch den Namen oder den ARN Ihrer Funktion. Ersetzen Sie sid durch die Sid der Richtlinienanweisung, die Sie entfernen möchten.
$ aws lambda remove-permission --function-name my-function --statement-id sid
Richtlinienanweisungen, die einen Platzhalter (*) verwenden, hinzufügen
Führen Sie den folgenden add-permission-Befehl in AWS CLI aus, um neue, konsolidierte Richtlinienanweisungen hinzuzufügen, die einen Platzhalter (*) verwenden. Ersetzen Sie my-function durch den Namen oder den ARN Ihrer Funktion. Ersetzen Sie sid durch eine neue Sid mit einem beliebigen Wert. Ersetzen Sie events.amazonaws.com durch den AWS-Service oder Kontoprinzipal, der Ihre Funktion aufruft. Ersetzen Sie arn:aws:events:region:account-id:rule/test-* durch eine ARN-Zeichenfolge (plus einen Platzhalter), die die Ressourcen gemeinsam haben, denen Sie Berechtigungen erteilen.
$ aws lambda add-permission --function-name my-function \ --statement-id 'sid' \ --action 'lambda:InvokeFunction' \ --principal 'events.amazonaws.com' \ --source-arn 'arn:aws:events:region:account-id:rule/test-*'
Hinweis: Auslöser mit Platzhaltern in der ressourcenbasierten Richtlinie sind in der Lambda-Konsole möglicherweise nicht sichtbar. Weitere Informationen finden Sie unter Ereignisgesteuerter Aufruf.
Weitere Informationen finden Sie unter Gewähren des Funktionszugriffs auf AWS-Services.
Verwandte Informationen
IAM-JSON-Richtlinienelemente: Ressource
Steuern der Befehlsausgabe von der AWS CLI (AWS-CLI-Benutzerhandbuch)
Warum ruft meine Amazon-S3-Ereignisbenachrichtigung meine Lambda-Funktion nicht auf?
Wie stoppe und starte ich Amazon-EC2-Instances in regelmäßigen Abständen mit Lambda?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 3 Jahren