AWS Patch Manager对Python 3.10支持失败问题求助
Ubuntu 22.04 AWS SSM补丁更新后Python 3.10语法警告及文件夹删除问题
问题背景
- 今年4月Ubuntu 22.04实例无法完成补丁更新,原因是当时AWS暂不支持该环境;一周后AWS修复此问题,5月补丁更新成功完成。
- 5月之后出现两个异常:
- 触发Python 3.10相关语法警告,最终导致补丁命令执行失败(退出状态1)。
- 执行补丁更新时,服务器上的
/var/log/amazon/ssm/patch-baseline-operations文件夹会被完全删除;仅自5月以来未尝试过补丁更新的服务器保留该文件夹,且文件夹时间戳为5月最后一次成功更新的日期。
错误日志
/var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="? if x is 0 or x is 1: /var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py:32: SyntaxWarning: "is" with a literal. Did you mean "=="? if x is 0 or x is 1: /var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="? elif y is 0 or y is 1: /var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py:34: SyntaxWarning: "is" with a literal. Did you mean "=="? elif y is 0 or y is 1: /var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py:260: SyntaxWarning: "is" with a literal. Did you mean "=="? if original_result is 0: failed to run commands: exit status 1
可能原因与解决方向
- 语法警告根源:Python 3.10对
is运算符的使用更严格,is用于判断对象身份而非值相等,而SSM补丁操作依赖的jmespath库代码中误用了is和字面量(0/1)比较,触发语法警告并导致执行失败。 - 文件夹删除原因:大概率是SSM补丁操作的清理逻辑出现异常,更新失败时误触发了全文件夹删除的步骤;也可能是更新过程中权限问题或脚本逻辑错误导致。
建议尝试以下方案:
- 更新SSM Agent:将实例上的SSM Agent升级到最新稳定版本,AWS通常会在后续版本中修复这类Python版本兼容性问题。
- 临时修复jmespath代码:手动修改
/var/log/amazon/ssm/patch-baseline-operations/jmespath/visitor.py中的对应行,把is 0/is 1替换为== 0/== 1,注意此修改可能会被后续SSM操作覆盖。 - 联系AWS支持:提交工单说明问题,确认是否为AWS已知的SSM补丁操作bug,获取官方修复方案或临时规避措施。
- 备份后测试:在测试实例上备份
patch-baseline-operations文件夹后执行补丁更新,观察删除行为是否复现,辅助定位问题。
内容的提问来源于stack exchange,提问作者amartinez
相关产品推荐
相关产品推荐

