Userdata ec2未被盗用

时间:2018-12-25 12:25:34

标签: amazon-web-services github amazon-cloudformation aws-codepipeline user-data

我正在通过代码管道设置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 &

预期的结果是,当我运行核心管道时,每次执行用户数据脚本。

给我一​​个建议,

2 个答案:

答案 0 :(得分:1)

用户数据脚本在instance creation上被执行仅一次。如果要定期将代码更改同步到实例,则应考虑在User-Data脚本中实现CronJob或使用AWS CodeDeploy之类的服务来部署新版本(这是首选方法)。

答案 1 :(得分:0)

CodePipeline为每个管道执行工件使用一个不同的S3对象,因此您无法对它的引用进行硬核化。您可以将工件发布到固定位置。您可能要考虑使用CodeDeploy部署应用程序的最新版本。