首页 > 解决方案 > 读取python lambda代码的权限错误_有时_,我怀疑是因为与更新功能代码冲突

问题描述

我在 python 3.9 中有一个 aws lambda,其中有一个内部版本号,我定期使用以下代码从 ci 更新:

zip zip -g lambda_function.zip lambda_function.py
aws lambda update-function-code --function-name ... --zip-file lambda_function.zip

这从来没有错误或任何东西,并且似乎有效。但是> 50%的时间,当我尝试在之后立即调用 lambda 时 - 我只是得到“内部服务器错误”......如果我看看后面出了什么问题,我看到:


  "errorMessage": "[Errno 13] Permission denied: '/var/task/lambda_function.py'",
  "errorType": "PermissionError",
  "requestId": "",
  "stackTrace": [
    "  File \"/var/lang/lib/python3.9/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n",
    "  File \"<frozen importlib._bootstrap>\", line 1030, in _gcd_import\n",
    "  File \"<frozen importlib._bootstrap>\", line 1007, in _find_and_load\n",
    "  File \"<frozen importlib._bootstrap>\", line 986, in _find_and_load_unlocked\n",
    "  File \"<frozen importlib._bootstrap>\", line 680, in _load_unlocked\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 846, in exec_module\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 982, in get_code\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 1039, in get_data\n"
  ]
}

然后,经过一段时间后,它似乎又开始工作了,但使用了最后一个工作版本——我试图推广的版本似乎消失得无影无踪。奇怪的是,有时它会起作用。我用谷歌搜索了那个错误,发现人们在谈论 zip 中文件的权限 - 所以添加了这个代码:

chmod 644 $(find . -type f)
chmod 755 $(find . -type d)

拉链之前。这完全没有取得任何成就。

这真的感觉像是更新时的某种竞争条件......就像在尝试更新它时使用 lambda 会破坏它或类似的东西 - 但我不知道下一步该做什么或如何修复它。任何想法将不胜感激。

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


我遇到了同样的问题,并通过更改应用程序和需求包的权限来彻底解决。
/home/app包含我的 lambda 模块和requirements.txt
在我运行的那个目录中:

RUN pip install -r requirements.txt -t .

在我跑完之后:

RUN chmod -R 755 /home/app

它奏效了。
您应用于 zip 的那个似乎是精炼版本,就我所经历的而言,我会尝试将其应用于需求包。


推荐阅读