Ir para o conteúdo

Como resolvo o erro “Unable to import module” que aparece quando executo o código do Lambda no Python?

3 minuto de leitura
0

Quero resolver o erro “Unable to import module” ao executar o código Python em uma função do AWS Lambda.

Breve descrição

O erro “Unable to import module” aparece quando o ambiente do Lambda não consegue encontrar no pacote de implantação do Lambda a biblioteca definida.

Para solucionar o erro, crie um pacote de implantação com todas as bibliotecas exigidas. Ou crie uma camada do Lambda com as bibliotecas necessárias e anexe a camada à sua função do Lambda. Em seguida, é possível reutilizar a camada em várias funções do Lambda.

Resolução

Criar uma camada do Lambda para poder anexá‑la a funções do Lambda

Observação: ao criar a camada do Lambda, coloque as bibliotecas nas pasta /python ou na pasta python/lib/python3.x/site-packages. Recomenda-se criar a camada do Lambda no mesmo sistema operacional no qual o runtime do Lambda se baseia. Por exemplo, o Python 3.12 se baseia na imagem de máquina da Amazon (AMI) do Amazon Linux 2023. Portanto, crie a camada no sistema operacional Amazon Linux 2023.

Se sua instância do Amazon Elastic Compute Cloud (Amazon EC2) tiver permissão para usar a chamada de API PublishLayerVersion para fazer upload de camadas do Lambda, vá para a etapa 5.

Conclua as etapas a seguir:

  1. Use o console do Amazon EC2 para criar uma instância com a AMI Amazon Linux 2023. Ou, então, use o console do AWS Cloud9.

  2. Crie uma política do AWS Identity and Access Management (AWS IAM) que conceda as permissões necessárias para chamar a operação de API PublishLayerVersion.

    Exemplo de política do IAM:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "lambda:PublishLayerVersion",
                "Resource": "*"
            }
        ]
    }
  3. Crie um perfil do IAM e anexe a política do IAM ao perfil.

  4. Anexe o perfil do IAM à instância.

  5. Conecte‑se à instância ou ao ambiente do AWS Cloud9.

  6. Execute os comandos a seguir para criar uma pasta e use o pip para instalar a biblioteca de nome “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  
    

    Observação: edite o parâmetro platform de acordo com o tipo de função. Se a função do Lambda for x86_64, defina o valor como manylinux2014_x86_64. Se a função for arm64, defina o valor como manylinux2014_aarch64. Edite o parâmetro python-version com a versão do Python usada pela função do Lambda.

  7. Execute o comando a seguir para colocar o conteúdo da pasta do python em um arquivo chamado layer.zip:

    cd ..  
    zip -r layer.zip python
  8. Execute o comando a seguir para publicar a camada do Lambda:

    aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1

    Observação: substitua us-east-1 pela região da AWS onde está a função do Lambda.

  9. Adicione a camada à função do Lambda.

  10. Para testar a função do Lambda, importe o pacote e imprima a versão.
    Exemplo de saída:

import json
import numpy

def lambda_handler(event, context):
 print(numpy.__version__)
 return {
 'statusCode': 200,
 'body': json.dumps('Hello from Lambda!')
 }    

Informações relacionadas

Como faço para instalar e solucionar problemas de bibliotecas Python nos clusters do Amazon EMR e do Amazon EMR Sem Servidor?

AWS OFICIALAtualizada há um ano