2017-07-31 46 views
0

我试图使用CodeDeploy与我的Auto Scaling Group集成。AWS:生命周期脚本的顺序?

我对自动缩放组配置有用户数据脚本安装PHP等而对于CodeDeploy我AfterInstall钩脚本运行一个简单的PHP文件。

用户数据(这工作正常)

#!/bin/bash 
apt-get -y update 
apt-get -y install ruby 
apt-get -y install wget 
cd /home/ubuntu 
wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install 
chmod +x ./install 
./install auto 

sudo apt-get install -y python-software-properties 
sudo add-apt-repository -y ppa:ondrej/php 
sudo apt-get update -y 
sudo apt-get install php7.1 -y 
sudo apt-get install php7.1-zip php7.1-mbstring php7.1-dom php7.1-curl -y 

sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
sudo php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 
sudo php composer-setup.php 
sudo php -r "unlink('composer-setup.php');" 
sudo mv composer.phar /usr/local/bin/composer 

我创建了一个自动缩放集团与此配置,但实例失败,错误,PHP是一个未知的命令来启动。我对此有几点疑问。

我想这是因为代码部署的AfterInstall钩开始我的用户数据脚本完成安装PHP之前执行。我对么?

如果我纠正,我怎么修复的顺序?

构建AMI在内的所有要求预装,而不是由用户数据脚本安装一切,这可能是一个解决方案吗? 最佳做法是什么?

任何答复将不胜感激。感谢您的时间。

回答

0

好的我发现了一个最简单的方法来解决这个问题。

看到这篇文章。 https://aws.amazon.com/ko/blogs/devops/under-the-hood-aws-codedeploy-and-auto-scaling-integration/

据此,CodeDeploy代理开始,只要它推出一个新的实例时年代开始得到部署。

订货启动脚本的执行 - 的CodeDeploy代理查找并尽快启动执行部署。在部署执行和启动脚本之间没有排序,例如用户数据,cfn-init等。我们建议您将主机代理作为启动脚本的一部分(也可能是最后一步)安装,以便您可以确保在实例安装不属于CodeDeploy部署的依赖关系之前,部署将不会执行。如果您更喜欢将代理烘焙到基本AMI中,我们建议您保持代理服务处于停止状态,并使用启动脚本启动代理服务。

因此,我重新安排了我的用户数据脚本,以便在安装完所有需求后安装Code Deploy Agent。

#!/bin/bash 
sudo apt-get install -y python-software-properties 
sudo add-apt-repository -y ppa:ondrej/php 
sudo apt-get update -y 
sudo apt-get install php7.1 -y 
sudo apt-get install php7.1-zip php7.1-mbstring php7.1-dom php7.1-curl -y 

sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
sudo php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 
sudo php composer-setup.php 
sudo php -r "unlink('composer-setup.php');" 
sudo mv composer.phar /usr/local/bin/composer 

apt-get -y update 
apt-get -y install ruby 
apt-get -y install wget 
cd /home/ubuntu 

wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install 
chmod +x ./install 
./install auto 

之后,所有的工作很好。