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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:36:21