通过用户数据在 EC2 实例上安装 CodeDeploy 代理
Posted
技术标签:
【中文标题】通过用户数据在 EC2 实例上安装 CodeDeploy 代理【英文标题】:Installing CodeDeploy Agent on EC2 Instance via User Data 【发布时间】:2021-12-24 02:31:14 【问题描述】:我希望在 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
这是sn-p:
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
我在这里缺少什么?当通过控制台创建实例时,此脚本在用户数据中运行良好。提前致谢!
【问题讨论】:
$
专用于 cloudformation Sub
功能。您需要使用!
转义它,例如$!PLAT
(或删除
,因为在您使用它们的任何地方的脚本中都不需要它们。
【参考方案1】:
@jordanm 评论的提示。这解决了我的问题。
【讨论】:
以上是关于通过用户数据在 EC2 实例上安装 CodeDeploy 代理的主要内容,如果未能解决你的问题,请参考以下文章
在 EC2 实例上使用用户数据脚本运行 ansible-playbook
如何通过 Ansible 在 AWS EC2 实例上部署 Consul