我正在通过代码管道设置Web应用程序。我的云形成脚本正在创建ec2实例。在该ec2用户数据中,我编写了从s3获取代码并将其复制到ec2中并启动服务器的逻辑。一个Web应用程序位于Python Pyramid框架中。
代码管道与GitHub连接。它创建一个zip文件并上传到s3存储桶。 (全部在buildspec.yml文件中)
当我更改用户数据脚本并运行代码管道时,它工作正常。 但是,当我更改一些Web应用程序(我的代码库)文件并重新运行代码管道时。这种变化没有体现出来。
这是针对ubuntu ec2实例。
#cloud-boothook
#!/bin/bash -xe
echo "hello "
exec > /etc/setup_log.txt 2> /etc/setup_err.txt
sleep 5s
echo "User_Data starts"
rm -rf /home/ubuntu/c
mkdir /home/ubuntu/c
key=`aws s3 ls s3://bucket-name/pipeline-name/MyApp/ --recursive | sort | tail -n 1 | awk '{print $4}'`
aws s3 cp s3://bucket-name/$key /home/ubuntu/c/
cd /home/ubuntu/c
zipname="$(cut -d'/' -f3 <<<"$key")"
echo $zipname
mv /home/ubuntu/c/$zipname /home/ubuntu/c/c.zip
unzip -o /home/ubuntu/c/c.zip -d /home/ubuntu/c/
echo $?
python3 -m venv venv
venv/bin/pip3 install -e .
rm -rf cc.zip
aws configure set default.region us-east-1
venv/bin/pserve development.ini http_port=5000 &
预期的结果是,当我运行核心管道时,每次执行用户数据脚本。
给我一个建议,
答案 0 :(得分:1)
用户数据脚本在instance creation上被执行仅一次。如果要定期将代码更改同步到实例,则应考虑在User-Data脚本中实现CronJob或使用AWS CodeDeploy之类的服务来部署新版本(这是首选方法)。
答案 1 :(得分:0)
CodePipeline为每个管道执行工件使用一个不同的S3对象,因此您无法对它的引用进行硬核化。您可以将工件发布到固定位置。您可能要考虑使用CodeDeploy部署应用程序的最新版本。