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:
-
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.
-
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": "*"
}
]
}
-
Crie um perfil do IAM e anexe a política do IAM ao perfil.
-
Anexe o perfil do IAM à instância.
-
Conecte‑se à instância ou ao ambiente do AWS Cloud9.
-
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.
-
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
-
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.
-
Adicione a camada à função do Lambda.
-
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?