通过用户数据在 EC2 实例上安装 CodeDeploy 代理
Installing CodeDeploy Agent on EC2 Instance via User Data
我希望在 EC2 实例上安装 CodeDeploy 代理,并通过 CloudFormation 部署用户数据。 Here is the script I'm using from AWS
但是,当我将脚本放在 CloudFormation 中我的 EC2 实例的 UserData 属性 中时,我从 linter 中收到此错误:
E1019 Parameter PLAT for Fn::Sub not found at Resources/Server/Properties/UserData/Fn::Base64/Fn::Sub
这是片段:
UserData:
'Fn::Base64': !Sub |
#!/bin/bash -xe
## Code Deploy Agent Bootstrap Script##
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
AUTOUPDATE=false
function installdep(){
if [ ${PLAT} = "ubuntu" ]; then
apt-get -y update
# Satisfying even ubuntu older versions.
apt-get -y install jq awscli ruby2.0 || apt-get -y install jq awscli ruby
elif [ ${PLAT} = "amz" ]; then
yum -y update
yum install -y aws-cli ruby jq
fi
}
function platformize(){
#Linux OS detection#
if hash lsb_release; then
echo "Ubuntu server OS detected"
export PLAT="ubuntu"
elif hash yum; then
echo "Amazon Linux detected"
export PLAT="amz"
else
echo "Unsupported release"
exit 1
fi
}
function execute(){
if [ ${PLAT} = "ubuntu" ]; then
cd /tmp/
wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
chmod +x ./install
if ./install auto; then
echo "Instalation completed"
if ! ${AUTOUPDATE}; then
echo "Disabling Auto Update"
sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
chattr +i /etc/cron.d/codedeploy-agent-update
rm -f /tmp/install
fi
exit 0
else
echo "Instalation script failed, please investigate"
rm -f /tmp/install
exit 1
fi
elif [ ${PLAT} = "amz" ]; then
cd /tmp/
wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
chmod +x ./install
if ./install auto; then
echo "Instalation completed"
if ! ${AUTOUPDATE}; then
echo "Disabling auto update"
sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
chattr +i /etc/cron.d/codedeploy-agent-update
rm -f /tmp/install
fi
exit 0
else
echo "Instalation script failed, please investigate"
rm -f /tmp/install
exit 1
fi
else
echo "Unsupported platform ''${PLAT}''"
fi
}
platformize
installdep
REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r ".region")
execute
我在这里错过了什么?当通过控制台创建实例时,此脚本在用户数据中运行良好。提前致谢!
感谢@jordanm 的评论。这解决了我的问题。
我希望在 EC2 实例上安装 CodeDeploy 代理,并通过 CloudFormation 部署用户数据。 Here is the script I'm using from AWS
但是,当我将脚本放在 CloudFormation 中我的 EC2 实例的 UserData 属性 中时,我从 linter 中收到此错误:
E1019 Parameter PLAT for Fn::Sub not found at Resources/Server/Properties/UserData/Fn::Base64/Fn::Sub
这是片段:
UserData:
'Fn::Base64': !Sub |
#!/bin/bash -xe
## Code Deploy Agent Bootstrap Script##
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
AUTOUPDATE=false
function installdep(){
if [ ${PLAT} = "ubuntu" ]; then
apt-get -y update
# Satisfying even ubuntu older versions.
apt-get -y install jq awscli ruby2.0 || apt-get -y install jq awscli ruby
elif [ ${PLAT} = "amz" ]; then
yum -y update
yum install -y aws-cli ruby jq
fi
}
function platformize(){
#Linux OS detection#
if hash lsb_release; then
echo "Ubuntu server OS detected"
export PLAT="ubuntu"
elif hash yum; then
echo "Amazon Linux detected"
export PLAT="amz"
else
echo "Unsupported release"
exit 1
fi
}
function execute(){
if [ ${PLAT} = "ubuntu" ]; then
cd /tmp/
wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
chmod +x ./install
if ./install auto; then
echo "Instalation completed"
if ! ${AUTOUPDATE}; then
echo "Disabling Auto Update"
sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
chattr +i /etc/cron.d/codedeploy-agent-update
rm -f /tmp/install
fi
exit 0
else
echo "Instalation script failed, please investigate"
rm -f /tmp/install
exit 1
fi
elif [ ${PLAT} = "amz" ]; then
cd /tmp/
wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
chmod +x ./install
if ./install auto; then
echo "Instalation completed"
if ! ${AUTOUPDATE}; then
echo "Disabling auto update"
sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
chattr +i /etc/cron.d/codedeploy-agent-update
rm -f /tmp/install
fi
exit 0
else
echo "Instalation script failed, please investigate"
rm -f /tmp/install
exit 1
fi
else
echo "Unsupported platform ''${PLAT}''"
fi
}
platformize
installdep
REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r ".region")
execute
我在这里错过了什么?当通过控制台创建实例时,此脚本在用户数据中运行良好。提前致谢!
感谢@jordanm 的评论。这解决了我的问题。