我在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_modulen return _bootstrap._gcd_import(name[level:], package, level)n",
" File "<frozen importlib._bootstrap>", line 1030, in _gcd_importn",
" File "<frozen importlib._bootstrap>", line 1007, in _find_and_loadn",
" File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlockedn",
" File "<frozen importlib._bootstrap>", line 680, in _load_unlockedn",
" File "<frozen importlib._bootstrap_external>", line 846, in exec_modulen",
" File "<frozen importlib._bootstrap_external>", line 982, in get_coden",
" File "<frozen importlib._bootstrap_external>", line 1039, in get_datan"
]
}
然后,经过一段时间后,它似乎又开始工作了,但是随着最后一个工作版本-我试图推广的版本似乎消失在稀薄的空气中。奇怪的是,有时它会起作用。我在谷歌上搜索了这个错误,发现有人在讨论zip文件中的文件权限,于是添加了以下代码:
chmod 644 $(find . -type f)
chmod 755 $(find . -type d)
压缩之前。这完全没有实现。
这真的感觉像是某种更新上的竞争条件…像使用lambda而试图更新它打破了它或类似的东西-但我不知道下一步该做什么或如何修复它。如有任何意见,不胜感激。
我遇到过同样的问题,并通过更改应用程序和需求包的权限来彻底解决。
/home/app包含我的lambda模块和requirements.txt.
在这个目录下我运行了:
RUN pip install -r requirements.txt -t .
运行后:
RUN chmod -R 755 /home/app
,它成功了。
您应用于zip的版本似乎是改进的版本,根据我的经验,我将尝试将其应用于需求包。