Wie behebe ich die Fehler „unbekannter Dienst“, „Parameterüberprüfung fehlgeschlagen“ und „Objekt hat kein Attribut“ in einer Python-Lambda-Funktion (Boto3)?

Lesedauer: 4 Minute
0

Meine Python (Boto3) AWS Lambda-Funktion gibt die Fehler „unbekannter Dienst“, „Parameterüberprüfung fehlgeschlagen“ oder „Objekt hat kein Attribut“ zurück.

Kurzbeschreibung

Eine Python-Lambda-Funktion (Boto3), die nicht die neueste Version von Boto3 verwendet, kann einen der folgenden Fehler zurückgeben:

  • unbekannter Dienst
  • Die Parameterüberprüfung ist fehlgeschlagen
  • Objekt hat kein Attribut

Diese Fehler treten auf, wenn die Funktion versucht, einen AWS-Service oder eine AWS-API aufzurufen, für welche die neueste Version von Boto3 erforderlich ist.
Um dieses Problem zu beheben, erstellen Sie einen Lambda-Layer , der die neueste Version von Boto3 verwendet. Sie können dies manuell tun oder Docker verwenden. Es ist effizienter, Ihre Lambda-Schicht über Docker zu aktualisieren. Dadurch wird sichergestellt, dass Ihre Binärdateien für das Lambda-Betriebssystem korrekt sind.

**Wichtig:**Bei den folgenden Verfahren wird davon ausgegangen, dass Sie über die neueste Version von Botocore (auf GitHub) verfügen. Wenn Sie nicht über die neueste Version von Botocore verfügen, müssen Sie Botocore aktualisieren, bevor Sie auf die neueste Boto3-Version aktualisieren können. Implementieren Sie die Auflösung nach Bedarf für Ihre spezifische Konfiguration und Python-Konfiguration.

Lösung

**Hinweis:**Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

Es hat sich bewährt, eine Lambda-Schicht auf demselben Betriebssystem zu erstellen, auf dem Ihre 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) Installieren Sie pip3 und die neueste AWS-CLI-Version

1.    Falls Sie dies noch nicht getan haben, installieren Sie das Paket pip3 für Python 3 von der Pip-Website.

-oder-

Wenn Sie eine frühere Version von Pip haben, aktualisieren Sie diese auf der Pip-Website.

2.    Installieren oder aktualisieren Sie die AWS-CLI mit pip3.

**Hinweis:**Die neueste Version der AWS-CLI enthält das Lambda Layers API-Modell.

Verwenden Sie Docker, um eine Lambda-Schicht zu erstellen oder zu aktualisieren, welche die neueste Boto3-Version verwendet

(Voraussetzungen) Docker installieren

Stellen Sie sicher, dass Sie Docker auf Ihrem System installiert haben und dass es läuft. Informationen zum Herunterladen der neuesten Version von Docker finden Sie unter ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html#install-docker-next-steps) Docker installieren[.

Erstellen Sie Ihre Layer und wenden Sie diese an

1.    Navigieren Sie zu dem Verzeichnis, in dem Sie die Layer-Datei erstellen möchten.

2.    Führen Sie den folgenden Befehl in der CLI Ihres 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:**Ersetzen Sie **public.ecr.aws/lambda/python:3.9.2023.03.21.20 **durch das Basis-Image für Ihre Version von Python. Sie können **boto3-mylayer ** durch einen benutzerdefinierten Namen für Ihr Paket ersetzen.

3.    Warten Sie, bis der Befehl abgeschlossen ist. Wenn der Vorgang erfolgreich abgeschlossen wurde, wird im aktuellen Verzeichnis eine Datei mit Ihrem Paketnamen angezeigt, z. B. boto3-mylayer.zip.

4.    Führen Sie den folgenden Befehl aus, um Ihren 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:**Ersetzen Sie boto3-mylayer durch Ihren Paketnamen. Ersetzen Sie **REGION\NAME ** durch Ihre AWS-Region. Geben Sie auch die kompatiblen Laufzeiten an, die Sie zuvor angegeben haben.

Erstellen Sie manuell einen Lambda-Layer, der die neueste Boto3-Version verwendet

**Wichtig:**Die folgenden AWS-CLI-Befehle funktionieren für Linux-, Unix- und macOS-Betriebssysteme. Stellen Sie in jedem Befehl sicher, dass Sie **boto3-mylayer **durch Ihren bevorzugten Namen für den lib-Ordner und den Lambda-Layer ersetzen.

1.    Erstellen Sie einen lib-Ordner:

LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

2.    Installieren Sie die Bibliothek in LIB\ _DIR:

pip3 install boto3 -t $LIB_DIR

3.    Zippen Sie alle Abhängigkeiten in /tmp/boto3-mylayer.zip:

cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

4.    Veröffentlichen Sie den Layer:

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.

Beispiel für Lambda-Layer-ARN

arn:aws:lambda:region:$ACC_ID:layer:boto3-mylayer:1

Fügen Sie die neue Ebene zur Konfiguration Ihrer Lambda-Funktion hinzu

Führen Sie den folgenden Befehl aus, um die neue Ebene zur Konfiguration Ihrer Lambda-Funktion hinzuzufügen:

**Wichtig:**Ersetzen Sie MY\ _FUNCTION durch den Namen Ihrer Funktion. Ersetzen Sie LAYER\ _ARN durch den ARN Ihrer Ebene.

aws lambda update-function-configuration --function-name MY_FUNCTION --layers LAYER_ARN

Alle AWS-Services und -Argumente sind jetzt für Ihre Lambda-Funktion verfügbar.

**Tipp:Um die Version von Boto3 und Botocore zu bestätigen, verwenden Sie print (boto3. \ _\ _version\ _\ _) und ** drucken (botocore. \ _\ _version\ _\ _) in Ihrem Funktionscode

Ähnliche Informationen

Lambda-Funktionen mit Python erstellen

Lambda-Laufzeiten

Stellen Sie Python-Lambda-Funktionen mit ZIP-Dateiarchiven bereit

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 10 Monaten