New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Como soluciono os erros de “permissão negada” ou “não foi possível importar o módulo” ao fazer o upload de um pacote de implantação do Lambda?
Quando faço o upload do meu pacote de implantação do AWS Lambda, recebo um erro de “permissão negada” ou “não foi possível importar o módulo”.
Breve descrição
O Lambda exige permissões globais de leitura em arquivos de código e em qualquer biblioteca dependente em seu pacote de implantação. Se você não configurar seu Pacote de implantação do Lambda com as permissões de segurança corretas, o Lambda retornará um erro quando você tentar fazer o upload do arquivo. Os erros de permissão negada e não foi possível importar o módulo geralmente ocorrem quando aplicativos de integração contínua criam pacotes de implantação.
Para runtimes interpretados, como Python, a permissão correta para os arquivos no pacote de implantação é 644. Para pastas no pacote de implantação, a permissão correta é 755.
Para runtimes compilados, como Go, a permissão correta para arquivos e diretórios executáveis em um pacote de implantação é 755 na notação numérica de permissões Unix.
Observação: como o Lambda usa permissões POSIX, é uma prática recomendada usar um sistema operacional (SO) compatível com POSIX ao criar pacotes de implantação do Lambda. Os sistemas operacionais compatíveis incluem Linux, Unix ou macOS. A igualdade entre o modelo de permissões em seu ambiente de construção e o ambiente de execução do Lambda reduz a chance de problemas de permissões.
Para corrigir um problema de permissão como usuário do Windows, conclua uma das seguintes tarefas para configurar um ambiente Linux:
- Instale uma distribuição Linux em seu PC. Para obter mais informações, consulte How to install Linux on Windows with WSL no site da Microsoft.
- Use o imagem de máquina da Amazon (AMI) do Lambda para iniciar uma instância do Amazon Elastic Compute Cloud (Amazon EC2).
Resolução
Encontre o arquivo ou a pasta que está causando o erro
Dependendo da linguagem de programação usada para escrever seu código de função do Lambda, a causa do erro pode não estar clara na mensagem de erro.
Por exemplo, uma mensagem de erro da função Node.js lista o nome do arquivo ou da pasta que é a origem do erro. No entanto, uma mensagem de erro da função Python não lista o nome do arquivo ou da pasta que é a origem do erro.
Exemplo de um erro de permissão negada da função do Lambda Node.js
{ "errorMessage": "EACCES: permission denied, open '/var/task/index.js'", "errorType": "Error", "stackTrace": [ "Object.fs.openSync (fs.js:641:18)", "Object.fs.readFileSync (fs.js:509:33)", "Object.Module._extensions..js (module.js:578:20)", "Module.load (module.js:487:32)", "tryModuleLoad (module.js:446:12)", "Function.Module._load (module.js:438:3)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)" ] }
Exemplo de um erro da função do Lambda Python incapaz de importar o módulo
“Não foi possível importar o módulo 'index': Nenhum módulo chamado index”
Para corrigir este erro, consulte Como resolvo o erro “Não foi possível importar o módulo” que aparece quando executo o código do Lambda no Python?
Se o seu pacote de implantação do Lambda não for o Amazon Linux 2 ou o Amazon Linux 2023, você deverá combinar a compatibilidade com as versões do Amazon Linux. Para fazer isso, use os parâmetros a seguir ao instalar o pacote. O exemplo a seguir usa um sistema operacional Python 3.12 e bibliotecas NumPy na mesma pasta em que a função do Lambda está:
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
Com base no seu caso de uso, ajuste os seguintes valores:
- O valor da plataforma manylinux2014_x86_64 especifica a plataforma do pacote.
- O valor python-version 3.12 indica que o pacote é compatível com a versão especificada do Python. Ajuste esse valor de acordo com a versão de runtime do Python que você almeja no Lambda.
- O parâmetro only-binary=:all instrui o pip a baixar somente binários. Isso garante que o pacote seja compatível com o ambiente de runtime do Lambda.
Exemplo de um erro de função do Lambra Python para bibliotecas externas que não têm as permissões necessárias
“Não foi possível importar o módulo 'index': Nenhum módulo chamado requests”
Para verificar as permissões de todos os arquivos e pastas no arquivo .zip do pacote de implantação, execute o comando zipinfo na sua interface de linha de comandos (CLI):
zipinfo lambda-package.zip
Observação: substitua lambda-package.zip pelo nome do arquivo .zip do seu pacote de implantação.
Exemplo de resposta do comando zipinfo
Archive: lambda-package.zipZip file size: 305 bytes, number of entries: 1-r-------- 3.0 unx 188 tx defN 21-Feb-13 20:48 example.py 1 file, 188 bytes uncompressed, 135 bytes compressed: 28.2%
Observação: no exemplo anterior, a permissão para example.py é -r-------- ou 400 na notação numérica de permissões Unix. Atualize a permissão do arquivo para 644. Para obter mais informações, consulte Notação das permissões tradicionais do Unix no site da Wikipedia.
Atualize as permissões do seu pacote de implantação
Observação: os comandos a seguir funcionam somente para Linux, Unix e macOS.
-
Para descompactar os arquivos e pastas dentro do seu pacote de implantação em uma pasta temporária, execute o seguinte comando na sua CLI:
mkdir temp-folder; unzip lambda-package.zip -d temp-folder ;cd temp-folder;ls -l
Observação: substitua lambda-package.zip pelo nome do arquivo do pacote de implantação e temp-folder pelo nome da pasta temporária.
-
Atualize as permissões dos arquivos da biblioteca.
Observação: para tornar os diretórios executáveis e todos os arquivos e pastas no pacote de implantação descompactado legíveis por qualquer usuário, execute o comando chmod:$ sudo chmod 644 $(find -type f) && chmod 755 $(find -type d)
Para tornar os arquivos do pacote de implantação descompactado executáveis para runtimes compilados, execute o seguinte comando:
$ chmod 755 -R
-
Depois de corrigir as permissões, execute o comando a seguir para reempacotar os arquivos e a pasta em um novo arquivo .zip:
zip -r new-lambda-package.zip *

Conteúdo relevante
- feita há 23 diaslg...
- feita há um mêslg...
- feita há 2 meseslg...
- feita há um mêslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 meses
- AWS OFICIALAtualizada há 2 anos