EC2启动时UserData未自动安装boto3,需手动执行的问题原因
用户环境变量不匹配:UserData默认以root用户运行,
pip3 install boto3 --user会把包装到root的用户专属目录(比如/root/.local/lib/python3.x/site-packages)。如果后续运行processor.py用的是普通用户(比如ec2-user),这个用户的Python环境找不到root目录下的包。另外,要是脚本里没明确指定Python版本,比如用python而不是python3来运行脚本,也会导致调用的Python版本和pip3安装的版本不对应,出现找不到模块的情况。脚本执行逻辑问题:检查你的UserData脚本,有没有可能pip安装命令被条件判断、错误终止逻辑跳过了?比如前序命令虽然拉取文件成功,但返回码异常触发了脚本终止(比如脚本加了
set -e),或者pip命令写在了某个不生效的分支里,甚至是换行、语法错误导致命令没被正确解析执行。初始化阶段的资源/网络问题:实例初始化时,系统资源(CPU、网络)可能还在加载,虽然拉取GitHub文件成功,但pip安装时可能因为默认源访问慢、超时,或者临时网络波动导致命令执行失败。你可以登录实例查看
/var/log/cloud-init-output.log,这个日志会完整记录UserData的执行过程,能明确看到pip命令是没执行还是执行出错。pip3命令未预装或路径异常:部分Amazon Linux或Ubuntu镜像默认没安装pip3,或者pip3的路径不在root的环境变量PATH里,导致脚本里直接写
pip3会提示“command not found”,命令根本无法运行。这种情况需要在pip安装命令前先安装pip3,比如Amazon Linux 2可以加yum install python3-pip -y,Ubuntu可以加apt-get install python3-pip -y。
内容的提问来源于stack exchange,提问作者ERJAN

