You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Python Lambda执行偶现PermissionError,疑与update-function-code更新冲突

问题根因
  1. 打包逻辑存在缺陷:一是原始打包命令多写了一个开头的zip关键字,部分执行环境下会导致增量打包逻辑异常;二是使用-g参数做增量压缩包更新时,原有压缩包内的同名文件权限不会被本地新修改的文件权限覆盖,即便提前执行了chmod命令修复本地权限,压缩包内的文件仍可能保留错误的旧权限,这是PermissionError偶发的核心原因。
  2. Lambda更新是异步流程:aws lambda update-function-code命令返回成功仅代表AWS服务端收到了更新请求,不代表新版本已经完成部署。此时如果有请求进入触发函数加载,会命中部署过程中的竞态条件,Lambda会自动回滚到上一个可用版本,导致本次更新的版本直接失效。
修复方案
  • 修正打包逻辑,完全停用增量打包,每次重新生成完整压缩包:
    替换原有打包命令为以下内容:
    # 清理历史压缩包
    rm -f lambda_function.zip
    # 修复权限,使用exec写法避免文件名带空格时命令执行异常
    find . -type f -exec chmod 644 {} +
    find . -type d -exec chmod 755 {} +
    # 全新打包
    zip lambda_function.zip lambda_function.py
    
  • 增加打包后校验步骤,确认压缩包内权限正确:
    打包完成后执行以下命令,验证文件权限符合要求,校验不通过则终止CI流程:
    unzip -lvl lambda_function.zip | grep lambda_function.py
    
    正常输出的权限位应为-rw-r--r--,对应644可读权限。
  • 调整Lambda更新逻辑,等待部署完成后再结束CI流程:
    更新时增加--publish参数生成明确的版本号,同时调用wait命令阻塞到部署完成:
    aws lambda update-function-code --function-name 替换为你的函数名 --zip-file fileb://lambda_function.zip --publish
    aws lambda wait function-updated --function-name 替换为你的函数名
    
  • 长期优化建议:使用Lambda别名做流量管理,每次更新先发布独立新版本,冒烟测试验证通过后再将别名的流量切到新版本,可完全避免更新过程中的流量受损,也支持秒级回滚。

内容的提问来源于stack exchange,提问作者Darren Oakey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:36:04