Eu recebo o erro “Não é possível importar o módulo” quando tento executar meu programa do AWS Lambda no Python.
Resumo
O erro “Não é possível importar o módulo” aparece quando o ambiente do AWS 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 então, crie uma camada do Lambda com as bibliotecas necessárias e anexe‑a à função do Lambda. Esse método permite que você reutilize 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 a instância do Amazon Elastic Compute Cloud (Amazon EC2) não tiver permissão de chamar a operação de API PublishLayerVersion para fazer upload de camadas do Lambda, siga as etapas de 1 a 3. Se a instância já tiver as permissões necessárias, vá para a etapa 4.
-
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 (IAM) que conceda as permissões necessárias para chamar a operação de API PublishLayerVersion.
Exemplo de declaração 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.
-
Associe o perfil do IAM à instância.
-
Conecte‑se à instância ou ao ambiente do 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 uma saída bem‑sucedida:
import json
import numpy
def lambda_handler(event, context):
print(numpy.__version__)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}