[Hack] Mettre à jour nodeJS sur AWS Elastic Beanstalk

Pour les besoins d’un projet, j’ai eu besoin d’utiliser nodeJS 6.x sur AWS. La dernière version LTS étant la 4.x, il me fallait trouver un moyen pour permettre cela.
Le détournement que j’ai trouvé, consiste en le fait d’installer nodeJS de manière classique avant de créer un lien symbolique vers le binaire utilisé par AWS.
Pour cela, il faut créer un fichier .ebextensions/01-node.config

Fixer la version

Tout d’abord, il faut une configuration permettant de fixer la version utilisée, afin d’éviter qu’elle se mettre à jour et que nos liens symboliques ne soient plus correctes.

  1. option_settings:
  2.     - namespace: aws:elasticbeanstalk:container:nodejs
  3.       option_name: NodeVersion
  4.       value: "4.4.3"
option_settings:
    - namespace: aws:elasticbeanstalk:container:nodejs
      option_name: NodeVersion
      value: "4.4.3"

Installer nodeJS

On va installer nodejs, mais également les outils de compilation de base permettant d’installer les modules npm développés en C++
Dans le cas où le binaire /usr/bin/node existe, on ne lance pas les commandes.

  1. commands:
  2.     100-node-script-installer:
  3.         command: "curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -"
  4.         test: "[ ! -x /usr/bin/node ]"
  5.     200-install_nodeJS:
  6.         command: "yum -y install nodejs gcc-c++ make"
  7.         test: "[ ! -x /usr/bin/node ]"
commands:
    100-node-script-installer:
        command: "curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -"
        test: "[ ! -x /usr/bin/node ]"
    200-install_nodeJS:
        command: "yum -y install nodejs gcc-c++ make"
        test: "[ ! -x /usr/bin/node ]"

Remplacer les binaires AWS EBS

On va faire une copie au cas où, elle va également nous servir pour vérifier que le binaire n’a pas déjà été remplacé.

  1. commands:
  2.     300-replace-node:
  3.         command: "mv node node.old && ln -s /usr/bin/node node"
  4.         cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
  5.         test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/node.old ]"
  6.     350-replace-npm:
  7.         command: "mv npm npm.old && ln -s /usr/bin/npm npm"
  8.         cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
  9.         test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/npm.old ]"
commands:
    300-replace-node:
        command: "mv node node.old && ln -s /usr/bin/node node"
        cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
        test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/node.old ]"
    350-replace-npm:
        command: "mv npm npm.old && ln -s /usr/bin/npm npm"
        cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
        test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/npm.old ]"

Le script complet

Ce script devrait fonctionner directement si place dans le bon répertoire. Référez vous à la documentation en conséquence !

  1. option_settings:
  2.     - namespace: aws:elasticbeanstalk:container:nodejs
  3.       option_name: NodeVersion
  4.       value: "4.4.3"
  5. commands:
  6.     100-node-script-installer:
  7.         command: "curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -"
  8.         test: "[ ! -x /usr/bin/node ]"
  9.     200-install_nodeJS:
  10.         command: "yum -y install nodejs gcc-c++ make"
  11.         test: "[ ! -x /usr/bin/node ]"
  12.     300-replace-node:
  13.         command: "mv node node.old && ln -s /usr/bin/node node"
  14.         cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
  15.         test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/node.old ]"
  16.     350-replace-npm:
  17.         command: "mv npm npm.old && ln -s /usr/bin/npm npm"
  18.         cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
  19.         test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/npm.old ]"
option_settings:
    - namespace: aws:elasticbeanstalk:container:nodejs
      option_name: NodeVersion
      value: "4.4.3"
commands:
    100-node-script-installer:
        command: "curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -"
        test: "[ ! -x /usr/bin/node ]"
    200-install_nodeJS:
        command: "yum -y install nodejs gcc-c++ make"
        test: "[ ! -x /usr/bin/node ]"
    300-replace-node:
        command: "mv node node.old && ln -s /usr/bin/node node"
        cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
        test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/node.old ]"
    350-replace-npm:
        command: "mv npm npm.old && ln -s /usr/bin/npm npm"
        cwd: "/opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin"
        test: "[ ! -x /opt/elasticbeanstalk/node-install/node-v4.4.3-linux-x64/bin/npm.old ]"

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" extra="">