AWS CloudFormation用户数据无法在Ubuntu 18.04 EC2安装Python3.8求助
EC2 UserData中Python3.8安装命令未生效的排查方案
核心排查方向
你的问题核心在于UserData中的bash脚本执行异常,但手动执行命令正常,优先从脚本执行日志、命令前置条件、源可用性这几个方向排查:
1. 查看正确的执行日志
你之前查看的cfn-init.log是CloudFormation初始化工具的日志,但UserData中的bash命令执行日志在以下两个文件中,这才是排查脚本执行失败的关键:
/var/log/cloud-init.log:记录cloud-init服务的初始化流程/var/log/cloud-init-output.log:直接输出UserData脚本的执行 stdout 和 stderr
通过查看这两个日志,你可以明确知道apt-get install python3.8 -y命令是否执行、执行时的错误信息是什么(比如源找不到包、apt锁占用、网络问题等)。
2. 解决Ubuntu 18.04默认源缺少Python3.8的问题
Ubuntu 18.04的官方默认源中没有Python3.8包,你手动执行命令能成功,大概率是因为实例已经通过其他方式添加了deadsnakes/ppa源(比如之前手动操作过)。而UserData脚本中没有添加这个源,导致安装命令找不到包。
需要在安装Python3.8前,先添加PPA源:
add-apt-repository ppa:deadsnakes/ppa -y apt-get update -y
3. 修复脚本的错误处理逻辑
你的UserData脚本没有设置错误终止机制,前面的命令如果执行失败(比如apt-get update因网络问题失败),脚本会继续执行后续命令,导致后续安装无意义。建议在脚本开头添加set -e,让脚本遇到错误立即停止,方便定位问题:
#!/bin/bash set -e # 遇到错误立即终止脚本
4. 避免apt命令冲突
脚本中连续执行了两次apt-get update,且混用了apt-get和apt命令,可能导致apt锁被占用,命令卡住。建议合并更新命令,统一使用apt-get:
apt-get update -y && apt-get upgrade -y
修改后的UserData示例
UserData: "Fn::Base64": "Fn::Sub": - | #!/bin/bash set -e # 添加Python3.8所需的PPA源 add-apt-repository ppa:deadsnakes/ppa -y apt-get update -y && apt-get upgrade -y apt-get install -y dos2unix python-pip python3.6 python3-pip python3.8 pip3 install --no-cache-dir NumPy awscli pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz ln -s /usr/local/bin/cfn-hup /etc/init.d/cfn-hup cfn-init -v --stack ${STACK} --resource resources --configsets install --region ${REGION} - { STACK: !Ref "AWS::StackName" , REGION: !Ref "AWS::Region" }
内容的提问来源于stack exchange,提问作者Arvind
相关产品推荐
相关产品推荐

