Wie behebe ich den Fehler „Die endgültige Richtliniengröße ist größer als das Limit“ von Lambda?

Lesedauer: 4 Minute
0

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:

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?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren