Come faccio a risolvere gli errori "servizio sconosciuto", "convalida dei parametri non riuscita" e "l'oggetto non ha attributi" da una funzione Lambda Python (Boto3)?

4 minuti di lettura
0

La mia funzione AWS Lambda in Python (Boto3) restituisce gli errori "servizio sconosciuto", "convalida dei parametri non riuscita" o "l'oggetto non ha alcun attributo".

Breve descrizione

Una funzione Lambda Python (Boto3) che non utilizza l'ultima versione di Boto3 potrebbe restituire uno dei seguenti errori:

  • servizio sconosciuto
  • convalida dei parametri non riuscita
  • l'oggetto non ha alcun attributo

Questi errori si verificano quando la funzione tenta di chiamare un servizio AWS o un'API AWS che richiede la versione più recente di Boto3.
Per risolvere questo problema, crea un layer Lambda che utilizzi l'ultima versione di Boto3. Puoi farlo manualmente oppure tramite Docker. È più efficiente aggiornare il layer Lambda tramite Docker, assicurandoti cos' che i file binari siano corretti per il sistema operativo Lambda.

Importante: Le seguenti procedure presuppongono che tu disponga della versione più recente di Botocore (su GitHub). Se non disponi della versione più recente di Botocore, devi aggiornarlo prima di poter eseguire l'aggiornamento alla versione più recente di Boto3. Implementa la soluzione necessaria per la tua configurazione specifica e quella di Python.

Risoluzione

Nota: Se visualizzi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS.

È consigliabile creare un layer Lambda sullo stesso sistema operativo su cui si basa il runtime Lambda. Ad esempio, le versioni 3.8 e 3.9 di Python sono basate su Amazon Linux 2 Amazon Machine Image (AMI). Tuttavia, Python 3.7 e Python 3.6 sono basati sull'AMI Amazon Linux.

(Prerequisiti) Installare pip3 e la versione più recente dell'interfaccia a riga di comando di AWS

1.    Se non l'hai già fatto, installa pip3 per il packaging di Python 3 dal sito web pip. 

-oppure-

Se disponi di una versione precedente di pip, aggiornala dal sito Web pip.

2.    Installa o aggiorna l'interfaccia a riga di comando di AWS utilizzando pip3.

Nota: L'ultima versione dell'interfaccia a riga di comando di AWS include il modello API Lambda Layers.

Usa Docker per creare o aggiornare un layer Lambda che utilizza l'ultima versione di Boto3

(Prerequisiti) Installare Docker

Assicurati di aver installato Docker sul tuo sistema e che sia in esecuzione. Per scaricare la versione più recente di Docker, consulta Installare Docker.

Creare e applicare il tuo livello

1.    Accedi alla directory in cui desideri creare il file di livello.

2.    Esegui il seguente comando nella CLI del tuo sistema:

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 ."

Nota: Sostituisci public.ecr.aws/lambda/python:3.9.2023.03.21.20 con l'immagine di base per la tua versione di Python. Puoi sostituire boto3-mylayer con un nome personalizzato per il tuo pacchetto.

3.    Attendi il completamento dell'operazione. Quando l'operazione viene completata correttamente, verrà visualizzato un file con il nome del pacchetto nella directory corrente, ad esempio boto3-mylayer.zip.

4.    Per creare o aggiornare il tuo layer Lambda, esegui il seguente comando:

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb://boto3-mylayer.zip --compatible-runtimes python3.9 --region REGION_NAME

Nota: Sostituisci boto3-mylayer con il nome del tuo pacchetto. Sostituisci REGION_NAME con la tua regione AWS. Inoltre, includi i runtime compatibili che hai specificato in precedenza.

Crea manualmente un livello Lambda che utilizza l'ultima versione di Boto3

Importante: I seguenti comandi dell'interfaccia a riga di comando di AWS sono validi per i sistemi operativi Linux, Unix e macOS. In ogni comando, assicurati di sostituire boto3-mylayer con nome che hai scelto per la cartella lib e il livello Lambda.

1.    Crea una cartella lib:

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

2.    Installa la libreria su LIB_DIR:

pip3 install boto3 -t $LIB_DIR

3.    Comprimi tutte le dipendenze in /tmp/boto3-mylayer.zip:

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

4.    Pubblica il layer:

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

Il comando restituisce l'Amazon Resource Name (ARN) del nuovo livello.

Esempio livello ARN Lambda

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

Aggiungi il nuovo livello alla configurazione della tua funzione Lambda

Per aggiungere il nuovo livello alla configurazione della tua funzione Lambda, esegui il seguente comando:

Importante: Sostituisci MY_FUNCTION con il nome della tua funzione. Sostituisci LAYER_ARN con l'ARN del tuo layer.

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

Tutti i servizi e gli argomenti AWS sono ora disponibili per la tua funzione Lambda.

Suggerimento: Per confermare la versione di Boto3 e Botocore, usa print(boto3.__version__) e print(botocore.__version__) nel codice della funzione

Informazioni correlate

Creare funzioni Lambda con Python

Runtime Lambda

Implementare le funzioni di Python Lambda con archivi di file.zip

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa