自定义AWS ElasticBean NodeJS安装(使用纱线)

是否可以configurationEBS使用yarn package manager而不是NPM来安装我的NodeJS应用程序?

我已经想出了一个办法,但这有点不好意思。

  1. 创build一个.ebextensions/yarn.config文件。 (这个名字不一定是'纱')。
  2. 把这个内容放到文件中:

     files: # Runs right before `npm install` in '.../50npm.sh' "/opt/elasticbeanstalk/hooks/appdeploy/pre/49yarn.sh" : mode: "000775" owner: root group: users content: | #!/bin/bash app="$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)"; # install yarn wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo; curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -; yum -y install yarn; # npm install cd "${app}"; yarn --production; 

这ebextension创build一个文件,做3件事情:

  1. 安装节点。
  2. 安装纱线。
  3. 用纱线安装node_modules。

为了使Elastic Beanstalk在运行npm install yarn install之前运行yarn install ,该文件将在/opt/elasticbeanstalk/hooks/appdeploy/pre 。 这将文件转换为预部署钩子,这意味着Elastic Beanstalk将在第一阶段部署期间运行它。 默认情况下,该目录中有另一个名为50npm.sh文件,它运行npm install 。 由于Elastic Beanstalk以字母顺序运行这个目录中的文件,因此49yarn.sh (我们的文件)将在50npm.sh (默认文件)之前npm install ,导致yarn installnpm install之前npm install

一个潜在的问题是在Elastic Beanstalk UI(在Configuration > Software Configuration )中设置的环境variables在部署阶段的这一点不可用。 如果你有一个用于安装私有npm模块的npm auth令牌,这是个大问题。

另一个潜在的问题是,这会手动安装节点,因此您在Elastic Beanstalk UI(在Configuration > Software Configuration )中指定的“节点版本”将不会影响应用程序使用的节点版本; 你需要在这个ebextension中指定它。 Elastic Beanstalk的50npm.sh都安装节点并运行npm install 。 由于我们必须在该文件运行之前运行yarn install ,因此我们还必须手动安装节点。 然后,当Elastic Beanstalk去安装节点时,它检测到节点已经安装,但没有validation它是正确的版本,因此跳过节点安装。

作为参考,纱线安装说明来自这里: https : //yarnpkg.com/docs/install#linux-tab

我在https://yarnpkg.com/lang/en/docs/install/上执行了以下指示

 commands: 01_install_yarn: command: "sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo && curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash - && sudo yum install yarn -y" 

EB默认支持npm,所以我build议在.ebextensions中通过部署脚本安装纱线 。 这应该做的。