Desidero risolvere l'errore "Unable to import module" (Impossibile importare modulo) quando eseguo codice Python in una funzione AWS Lambda.
Breve descrizione
L'errore "Unable to import module" (Impossibile importare modulo) viene visualizzato quando l'ambiente Lambda non riesce a trovare la libreria specificata nel pacchetto di implementazione Lambda.
Per risolvere questo errore, crea un pacchetto di implementazione con tutte le librerie richieste. In alternativa, crea un livello Lambda con le librerie richieste e collegalo alla funzione Lambda. Puoi quindi riutilizzare il livello su più funzioni Lambda.
Risoluzione
Creazione di un livello Lambda da collegare a più funzioni Lambda
Nota: quando crei il livello Lambda, inserisci le librerie nelle cartelle /python o python/lib/python3.x/site-packages. Come best practice, crea un livello Lambda sullo stesso sistema operativo (OS) in cui si trova il runtime Lambda. Ad esempio, Python 3.12 è basato sull'Amazon Machine Image (AMI) Amazon Linux 2023. Crea quindi il livello su un sistema operativo Amazon Linux 2023.
Se l'istanza di Amazon Elastic Compute Cloud (Amazon EC2) dispone dell'autorizzazione per utilizzare la chiamata API PublishLayerVersion, vai al passaggio 5.
Completa i seguenti passaggi:
-
Utilizza la console Amazon EC2 per creare un'istanza con l'AMI Amazon Linux 2023. In alternativa, utilizza la console AWS Cloud9.
-
Crea una policy di AWS Identity and Access Management (IAM) che conceda le autorizzazioni per chiamare l'operazione API PublishLayerVersion.
Policy IAM di esempio:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:PublishLayerVersion",
"Resource": "*"
}
]
}
-
Crea un ruolo IAM e collega la policy IAM al ruolo.
-
Collega il ruolo IAM all'istanza.
-
Esegui la connessione all'istanza o all'ambiente AWS Cloud9.
-
Esegui i seguenti comandi per creare una nuova cartella e utilizza pip per installare la libreria denominata "numpy":
mkdir -p lambda-layer/pythoncd lambda-layer/python
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
Nota: aggiorna il parametro platform per il tipo di funzione. Per una funzione Lambda x86\ _64, imposta il valore su manylinux2014_x86_64. Per una funzione arm64, imposta il valore su manylinux2014_aarch64. Aggiorna il parametro python-version alla stessa versione utilizzata dalla funzione Lambda.
-
Esegui il seguente comando per inserire il contenuto della cartella Python in un file layer.zip:
cd ..zip -r layer.zip python
-
Esegui il seguente comando per pubblicare il livello Lambda:
aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1
Nota: sostituisci us-east-1 con la Regione AWS della funzione Lambda.
-
Aggiungi il livello alla funzione Lambda.
-
Per testare la funzione Lambda, importa il pacchetto e stampa la versione.
Esempio di output:
import jsonimport numpy
def lambda_handler(event, context):
print(numpy.__version__)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Informazioni correlate
Come posso installare le librerie Python su cluster Amazon EMR e Amazon EMR serverless e risolvere i problemi ad esse correlati?