AWS:生命周期脚本顺序?

时间:2017-07-31 04:05:16

标签: php amazon-web-services

我尝试使用与Auto Scaling Group集成的CodeDeploy。

我的自动缩放组配置包含用于安装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

我使用此配置创建了一个Auto Scaling组但实例无法启动,并显示PHP是一个未知命令的错误。我对此有一些疑问。

我认为这是因为在我的用户数据脚本完成安装PHP之前,已经开始执行代码部署的 AfterInstall挂钩。我是对的吗?

如果我更正,如何修理订单?

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

任何答案都将不胜感激。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

好的,我找到了一种最简单的方法来解决这个问题。

请参阅此文章。 https://aws.amazon.com/ko/blogs/devops/under-the-hood-aws-codedeploy-and-auto-scaling-integration/

根据这一点,CodeDeploy Agent在启动新实例时立即开始部​​署。

  

订购执行启动脚本 - 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

在此之后,所有工作都很棒。