我正在使用Packer创建自定义Ubuntu AMI,然后使用它启动EC2实例,然后使用CodeDeploy将其部署到应用程序中。
在此实例上,我需要使用Python3.7,因为我正在使用3.6中不支持的某些日期时间功能-Ubuntu的默认python3版本是Python3.6.8
我的问题是,当使用python3.7通过pip安装python模块时,启动自定义AMI失败,它永远不会达到正常状态。通过默认的python3安装相同的模块时,没有问题。
在打包程序构建期间,将通过以下脚本安装软件包:
#!/bin/bash
# wait for cloud-init to finish - other wise apt install can fail
while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
echo 'Waiting for cloud-init...'
sleep 1
done
# Install apt packages
sudo apt-get update -y
for package in unzip jq python3.7 python3-pip ruby wget mysql-client-5.7
do
sudo apt-get install -y $package
done
# Install python packages
sudo python3.7 -m pip install --upgrade pip --no-cache-dir
sudo python3.7 -m pip install --upgrade awscli --no-cache-dir
sudo python3.7 -m pip install --upgrade boto3 --no-cache-dir
sudo python3.7 -m pip install -r /tmp/requirements.txt --no-cache-dir
# Install and start codedeploy agent
wget https://aws-codedeploy-eu-central-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start
sudo service codedeploy-agent status
上面的代码有效,但是自定义AMI无法达到健康状态。
以下代码可以正常工作,并且自定义AMI可以正常启动:
#!/bin/bash
# wait for cloud-init to finish - other wise apt install can fail
while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
echo 'Waiting for cloud-init...'
sleep 1
done
# Install apt packages
sudo apt-get update -y
for package in unzip jq python3.7 python3-pip ruby wget mysql-client-5.7
do
sudo apt-get install -y $package
done
# Install python packages
sudo pip3 install --upgrade pip --no-cache-dir
sudo pip3 install --upgrade awscli --no-cache-dir
sudo pip3 install --upgrade boto3 --no-cache-dir
sudo pip3 install -r /tmp/requirements.txt --no-cache-dir
# Install and start codedeploy agent
wget https://aws-codedeploy-eu-central-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start
sudo service codedeploy-agent status
任何想法都可能导致实例故障吗?唯一的区别是python模块的安装方式。
编辑-命令已在本地测试,没有明显问题。