AWS Patch Manager在Ubuntu 22.04执行补丁失败如何解决?
AWS SSM Patch Manager 运行Ubuntu 22.04补丁安装失败问题
问题表现
- 测试覆盖两类Ubuntu 22.04主机环境:手动升级部署的Ubuntu 22.04实例、基于AWS官方Canonical镜像创建的全新纯净Ubuntu 22.04实例
- 执行
AWS SSM RunPatchBaseline补丁安装操作时,两类实例操作全部失败 - 命令标准输出报错信息:
root [ERROR]: Error loading entrance module. - 命令标准错误输出报错信息:
Error loading patching payloadfailed to run commands: exit status 156
官方回复(2023年2月1日付费工单反馈)
针对Ubuntu 22.04版本的Patch Manager支持,经对接内部团队确认:该功能目前处于开发阶段,已纳入产品路线图将于近期发布。目前暂无确切上线时间,预计在2023年第一季度后半段推出。建议关注SSM官方文档与AWS What's New页面获取最新更新。对于该问题带来的不便我们深表歉意,SSM团队正在加紧推进版本发布,请耐心等待。
根因分析
从/var/log/amazon/ssm/amazon-ssm-agent.log的运行日志可定位核心报错原因:Ubuntu 22.04默认搭载Python 3.10版本,该版本中Mapping、MutableMapping抽象类已从collections模块迁移至collections.abc模块下,但SSM补丁组件内置的旧版botocore依赖仍使用旧导入路径,触发ImportError导致补丁加载流程直接中断。
对应关键日志片段如下:
/usr/bin/python3 /usr/bin/apt-get Reading package lists... Building dependency tree... Reading state information... python3-apt is already the newest version (2.3.0ubuntu2). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Using python binary: 'python3' Using Python Version: Python 3.10.4 /usr/bin/curl /usr/bin/wget 06/10/2022 16:52:49 root [INFO]: Downloading patch operation payload 06/10/2022 16:52:49 root [INFO]: Attempting to import entrance file os_selector 06/10/2022 16:52:49 root [ERROR]: Error loading entrance module. Traceback (most recent call last): File "/var/log/amazon/ssm/patch-baseline-operations/common_startup_entrance.py", line 164, in execute entrance_module = __import__(module_name) File "/var/log/amazon/ssm/patch-baseline-operations/os_selector.py", line 11, in <module> import common_os_selector_methods File "/var/log/amazon/ssm/patch-baseline-operations/common_os_selector_methods.py", line 11, in <module> from patch_common.baseline_override import load_baseline_override File "/var/log/amazon/ssm/patch-baseline-operations/patch_common/baseline_override.py", line 6, in <module> from patch_common.downloader import download_file, load_json_file, is_access_denied File "/var/log/amazon/ssm/patch-baseline-operations/patch_common/downloader.py", line 1, in <module> import boto3 File "/var/log/amazon/ssm/patch-baseline-operations/boto3/__init__.py", line 16, in <module> from boto3.session import Session File "/var/log/amazon/ssm/patch-baseline-operations/boto3/session.py", line 17, in <module> import botocore.session File "/var/log/amazon/ssm/patch-baseline-operations/botocore/session.py", line 29, in <module> import botocore.configloader File "/var/log/amazon/ssm/patch-baseline-operations/botocore/configloader.py", line 19, in <module> from botocore.compat import six File "/var/log/amazon/ssm/patch-baseline-operations/botocore/compat.py", line 25, in <module> from botocore.exceptions import MD5UnavailableError File "/var/log/amazon/ssm/patch-baseline-operations/botocore/exceptions.py", line 15, in <module> from botocore.vendored import requests File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/__init__.py", line 58, in <module> from . import utils File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/utils.py", line 26, in <module> from .compat import parse_http_list as _parse_list_header File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/compat.py", line 7, in <module> from .packages import chardet File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/packages/__init__.py", line 3, in <module> from . import urllib3 File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/packages/urllib3/__init__.py", line 10, in <module> from .connectionpool import ( File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/packages/urllib3/connectionpool.py", line 38, in <module> from .response import HTTPResponse File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/packages/urllib3/response.py", line 9, in <module> from ._collections import HTTPHeaderDict File "/var/log/amazon/ssm/patch-baseline-operations/botocore/vendored/requests/packages/urllib3/_collections.py", line 1, in <module> from collections import Mapping, MutableMapping ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)
注:该问题属于官方组件未适配Python 3.10版本导致,官方正式适配发布前无官方支持的永久修复方案,临时修改组件导入路径的临时方案会在SSM Agent每次拉取最新补丁payload后被覆盖。
内容的提问来源于stack exchange,提问作者Scott Dunt
相关产品推荐
相关产品推荐

