Wie behebe ich die Fehler „unknown service“, „parameter validation failed“ oder „object has no attribute“ in einer Python-Lambda-Funktion (Boto3)?
Meine Python (Boto3) AWS Lambda-Funktion gibt die Fehler „unknown service“, „parameter validation failed“ oder „object has no attribute“ zurück.
Kurzbeschreibung
Eine Python-Lambda-Funktion (Boto3), die nicht die neueste Version von Boto3 verwendet, kann den folgenden Fehler zurückgeben:
- unknown service
- Die Parameterüberprüfung ist fehlgeschlagen
- object has no attribute
Diese Fehler treten auf, wenn die Funktion einen AWS-Service oder eine AWS-API aufruft, für welche die neueste Version von Boto3 erforderlich ist.
Erstelle einen Lambda-Layer, der die neueste Version von Boto3 verwendet, um dieses Problem zu beheben. Du kannst einen Lambda-Layer entweder manuell oder mit Docker erstellen. Es ist eine bewährte Methode, den Lambda-Layer über Docker zu aktualisieren, um sicherzustellen, dass die Binärdateien für das Lambda-Betriebssystem korrekt sind.
Wichtig: Bei den folgenden Verfahren wird davon ausgegangen, dass du über die neueste Version von Botocore verfügst. Wenn du nicht über die neueste Version von Botocore verfügst, musst du Botocore aktualisieren, bevor du auf die neueste Boto3-Version aktualisieren kannst. Weitere Informationen findest du unter botocore auf der GitHub-Website.
Lösung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Es hat sich bewährt, einen Lambda-Layer auf demselben Betriebssystem zu erstellen, auf dem die Lambda-Laufzeit basiert. Die Python-Versionen 3.8 und 3.9 basieren beispielsweise auf einem Amazon Linux 2 Amazon Machine Image (AMI). Python 3.7 und Python 3.6 basieren jedoch auf dem Amazon Linux AMI.
Voraussetzungen:
- Installiere das Paket pip3 für Python 3. Oder, wenn du eine frühere Version von pip hast, aktualisiere sie. Weitere Informationen findest du unter Installation auf der pip-Website.
- Installiere oder aktualisiere die AWS CLI mit pip3.
**Hinweis:**Die neueste Version der AWS-CLI enthält das Lambda Layers API-Modell.
Verwende Docker, um einen Lambda-Layer zu erstellen oder zu aktualisieren, der die neueste Boto3-Version verwendet
Voraussetzung: Installiere Docker auf deinem System. Informationen zum Herunterladen der neuesten Version von Docker findest du unter ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html#install-docker-instructions)Docker installieren[.
Deinen Layer erstellen und anwenden
Führe die folgenden Schritte aus:
-
Navigiere zu dem Verzeichnis, in dem du die Layer-Datei erstellen möchtest.
-
Führe den folgenden Befehl in der CLI des Systems aus:
docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/python:3.9.2023.03.21.20" /bin/sh -c "mkdir -p /tmp/python && pip3 install boto3 -t /tmp/python && cd /tmp && yum install -y zip && zip -r /var/task/boto3-mylayer.zip ."
Hinweis: Ersetze public.ecr.aws/lambda/python:3.9.2023.03.21.20durch das Basis-Image für deine Version von Python. Ersetze boto3-mylayer durch einen benutzerdefinierten Namen für das Paket.
Nachdem der Befehl erfolgreich abgeschlossen wurde, wird im aktuellen Verzeichnis eine Datei mit dem Paketnamen angezeigt, z. B. boto3-mylayer.zip. -
Führe den folgenden Befehl aus, um den Lambda-Layer zu erstellen oder zu aktualisieren:
aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb://boto3-mylayer.zip --compatible-runtimes python3.9 --region REGION_NAME
**Hinweis:**Ersetze boto3-mylayer durch deinen Paketnamen. Ersetze **REGION\NAME ** durch deine AWS-Region. Gib auch die kompatiblen Laufzeiten an, die du zuvor angegeben hast.
Erstelle manuell einen Lambda-Layer, der die neueste Boto3-Version verwendet
Die folgenden AWS CLI-Befehle funktionieren für Linux-, Unix- und macOS-Betriebssysteme.
Hinweis: Stelle bei jedem Befehl sicher, dass du boto3-mylayer durch deinen bevorzugten Namen für den lib-Ordner und den Lambda-Layer ersetzt.
Führe die folgenden Schritte aus:
-
Erstelle einen lib-Ordner:
LIB_DIR=boto3-mylayer/pythonmkdir
-
Installiere die Bibliothek in LIB_DIR.
pip3 install boto3 -t $LIB_DIR
-
Führe den folgenden Befehl aus, um alle Abhängigkeiten zu /tmp/boto3-mylayer.zip zu komprimieren.
cd boto3-mylayer zip -r /tmp/boto3-mylayer.zip
-
Führe den folgenden Befehl aus, um den Layer zu veröffentlichen.
aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip
Der Befehl gibt den Amazon-Ressourcennamen (ARN) des neuen Layers zurück.
Beispielausgabe:arn:aws:lambda:region:$ACC_ID:layer:boto3-mylayer:1
Den neuen Layer zur Konfiguration der Lambda-Funktion hinzufügen
Führe den folgenden Befehl aus, um den neuen Layer zur Konfiguration der Lambda-Funktion hinzuzufügen:
aws lambda update-function-configuration --function-name MY_FUNCTION --layers LAYER_ARN
Hinweis: Ersetze MY_FUNCTION durch den Namen deiner Funktion. Ersetze LAYER\ _ARN durch den ARN deiner Ebene.
Alle AWS-Services und -Argumente sind jetzt für die Lambda-Funktion verfügbar.
Verwende print(boto3.__version__) and print(botocore.__version__) im Funktionscode, um die Version von Boto3 und Botocore zu bestätigen.
Ähnliche Informationen
Erstellen von Lambda-Funktionen mit Python
Arbeiten mit .zip-Dateiarchiven bei Python-Lambda-Funktionen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 5 Monaten
- AWS OFFICIALAktualisiert vor 3 Jahren