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)?
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
Implementare le funzioni di Python Lambda con archivi di file.zip
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa