Come posso risolvere l'errore "Unable to import module" che ricevo quando eseguo il codice Lambda in Python?

3 minuti di lettura
0

Ricevo l'errore "Unable to import module" quando provo a eseguire il codice AWS Lambda in Python.

Breve descrizione

L’errore "Unable to import module" viene visualizzato quando l'ambiente AWS 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 necessarie e collegalo alla tua funzione Lambda. Il metodo del livello Lambda consente di riutilizzare questo livello con più funzioni Lambda.

Risoluzione

Crea un livello Lambda da collegare a più funzioni Lambda

Nota: quando crei il livello Lambda, posiziona le librerie nelle cartelle /python o python/lib/python3.x/site-packages. È consigliabile creare 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 la tua istanza di Amazon Elastic Compute Cloud (Amazon EC2) non dispone delle autorizzazioni necessarie per caricare livelli Lambda tramite la chiamata API PublishLayerVersion segui i passaggi 1-3. Se la tua istanza dispone già delle autorizzazioni, procedi con il passaggio 4.

  1. Usa la console Amazon EC2 per creare un'istanza con l’AMI Amazon Linux 2023. In alternativa, usa la console AWS Cloud9.

  2. Crea una policy di AWS Identity and Access Management (IAM) che conceda le autorizzazioni per richiamare l'operazione API PublishLayerVersion.
    Esempio di dichiarazione in una policy IAM:

    {
     "Version": "2012-10-17",
     "Statement": [
     {
     "Sid": "VisualEditor0",
     "Effect": "Allow",
     "Action": "lambda:PublishLayerVersion",
     "Resource": "*"
     }
     ]
    }
  3. Crea un ruolo IAM e collega la policy IAM a tale ruolo.

  4. Collega il ruolo IAM all'istanza.

  5. Connettiti alla tua istanza o all'ambiente Cloud9.

  6. Esegui i seguenti comandi per creare una nuova cartella e usa pip per installare la libreria denominata "numpy":

    mkdir -p lambda-layer/python
    cd 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.

  7. Esegui il seguente comando per comprimere 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.

  8. Aggiungi il livello alla funzione Lambda.

  9. Per testare la funzione Lambda, importa il pacchetto e stampa la versione.
    Esempio di output riuscito: 

    import json
    import numpy
    
    
    def lambda_handler(event, context):
     print(numpy.__version__)
     return {
     'statusCode': 200,
     'body': json.dumps('Hello from Lambda!')
     }	
AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa