Quiero instalar automáticamente el agente de AWS CodeDeploy en una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que ejecute Linux o Ubuntu.
Resolución
Al crear una plantilla de lanzamiento, puede usar el campo User data para añadir un script de configuración que se ejecute cuando se inicie la instancia. El script de shell instala el agente CodeDeploy en todas las regiones de AWS y en las distribuciones de Amazon Linux y Ubuntu compatibles.
Para configurar CodeDeploy para que se actualice automáticamente al arrancar, defina la variable AUTOUPDATE como true. Por ejemplo, añada el siguiente script de configuración en el campo User data de Amazon EC2 en función de la versión de metadatos de la instancia.
Importante: El siguiente script solo funciona en EC2 para Linux. En entornos Windows, el script falla.
IMSDv1:
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
#!/bin/bash -xe
## CodeDeploy Agent Bootstrap Script##
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1AUTOUPDATE=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 "Installation 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 "Installation 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 "Installation 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 "Installation 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
IMSDv2:
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
#!/bin/bash -xe
## CodeDeploy 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 "Installation 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 "Installation 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 "Installation 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 "Installation script failed, please investigate"
rm -f /tmp/install
exit 1
fi
else
echo "Unsupported platform ''${PLAT}''"
fi
}
platformize
installdep
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r ".region")
execute
Información relacionada
Create a launch template for an Auto Scaling group