自定义AWS ElasticBean NodeJS安装(使用纱线)
是否可以configurationEBS使用yarn package manager而不是NPM来安装我的NodeJS应用程序?
我已经想出了一个办法,但这有点不好意思。
- 创build一个
.ebextensions/yarn.config
文件。 (这个名字不一定是'纱')。 -
把这个内容放到文件中:
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件事情:
- 安装节点。
- 安装纱线。
- 用纱线安装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 install
在npm 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中通过部署脚本安装纱线 。 这应该做的。