amazon-web-services - 读取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 会破坏它或类似的东西 - 但我不知道下一步该做什么或如何修复它。任何想法将不胜感激。
解决方案
我遇到了同样的问题,并通过更改应用程序和需求包的权限来彻底解决。
/home/app包含我的 lambda 模块和requirements.txt。
在我运行的那个目录中:
RUN pip install -r requirements.txt -t .
在我跑完之后:
RUN chmod -R 755 /home/app
它奏效了。
您应用于 zip 的那个似乎是精炼版本,就我所经历的而言,我会尝试将其应用于需求包。
推荐阅读
- django - 用于网络设备配置的 Django Rest Framework
- xamarin.forms - MvvmCross MvxTabbedPage 文档?
- c# - 如何使用 EntityMetadata 将查找属性复制到另一个 CRM?
- gcc - 根文件系统的交叉编译软件
- php - 如何合并 2 个数组(PHP、Form)
- ms-access - Microsoft Access 删除条目
- javascript - 字符串文字未编译
- github-api - 如何使用 Github API 和 PyGithub 包获取 Github 存储库的贡献者数量
- mysql - 嵌套程序集数据库结构
- python - Pyodbc 未从 SQL Server 返回错误