Comment puis-je utiliser les modèles de lancement pour installer automatiquement l’agent CodeDeploy sur une instance Amazon EC2 exécutant Amazon Linux ou Ubuntu ?

Lecture de 4 minute(s)
0

Je souhaite installer automatiquement l’agent AWS CodeDeploy sur une instance Amazon Elastic Compute Cloud (Amazon EC2) exécutant Linux ou Ubuntu.

Résolution

Lorsque vous créez un modèle de lancement, utilisez le champ de Données utilisateur pour ajouter un script de configuration qui s’exécute au démarrage de l’instance. Le script shell installe l’agent CodeDeploy pour toutes les régions AWS et les distributions Amazon Linux et Ubuntu prises en charge.

Pour configurer CodeDeploy afin de le mettre à jour automatiquement au démarrage, définissez la variable AUTOUPDATE sur true. Par exemple, ajoutez le script de configuration suivant dans le champ de Données utilisateur d’Amazon EC2 en fonction de la version des métadonnées de votre instance.

Important : le script suivant fonctionne uniquement dans EC2 pour Linux. Par contre, dans les environnements Windows, le script ne fonctionne pas.

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

Informations connexes

Créer un modèle de lancement pour un groupe Auto Scaling

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an