aws cloudformation 用户数据中的 npm-start 不是 运行
npm-start not running in aws cloudformation user data
我正在尝试 运行 在 aws cloudformation 用户数据中启动 npm,如下所示:
nodejs = '\n', \
'echo "starting node server" > /tmp/nodejs.log\n', \
'npm run start-dev --prefix /data/app/myProject >> /tmp/nodejs.log &\n', \
'echo "After starting node server" >> /tmp/nodejs.log', \
'\n' ''
稍后将与其他命令一起放入用户数据。
这是我在执行后 /tmp/nodejs.log 中得到的:
starting node server
After starting node server
npm 运行 命令没有留下任何日志,服务器也没有启动。如果我 运行 在终端中执行该命令,那么服务器将 运行 成功。
为什么 npm-start 命令没有被执行?
跟进
服务器未启动的原因是用户数据脚本无法识别 npm 命令。然而,我在加壳程序脚本中通过 nvm 安装节点:
{
"type": "shell",
"script": "sh/install_node.sh",
"execute_command": "chmod +x {{ .Path }}; sudo bash -c '{{ .Vars }} {{ .Path }}'"
}
这是 install_node.sh 文件:
#!/usr/bin/env bash
#install nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
#install node
nvm install 6.8.0
所以现在我想弄清楚为什么通过 packer provisioner 脚本安装节点不足以让 npm 在 aws cloudformation userdata 脚本中被识别。
如果有人偶然发现这个问题,解决方案是简单地将您的节点路径添加到 cloudFormation 中的 PATH 环境变量中,如下所示:
nodejs = '\n', \
'PATH=/root/.nvm/versions/node/v6.8.0/bin:$PATH\n', \
'npm run start-dev --prefix path/to/project\n' \
'\n' ''
我正在尝试 运行 在 aws cloudformation 用户数据中启动 npm,如下所示:
nodejs = '\n', \
'echo "starting node server" > /tmp/nodejs.log\n', \
'npm run start-dev --prefix /data/app/myProject >> /tmp/nodejs.log &\n', \
'echo "After starting node server" >> /tmp/nodejs.log', \
'\n' ''
稍后将与其他命令一起放入用户数据。
这是我在执行后 /tmp/nodejs.log 中得到的:
starting node server
After starting node server
npm 运行 命令没有留下任何日志,服务器也没有启动。如果我 运行 在终端中执行该命令,那么服务器将 运行 成功。
为什么 npm-start 命令没有被执行?
跟进
服务器未启动的原因是用户数据脚本无法识别 npm 命令。然而,我在加壳程序脚本中通过 nvm 安装节点:
{
"type": "shell",
"script": "sh/install_node.sh",
"execute_command": "chmod +x {{ .Path }}; sudo bash -c '{{ .Vars }} {{ .Path }}'"
}
这是 install_node.sh 文件:
#!/usr/bin/env bash
#install nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
#install node
nvm install 6.8.0
所以现在我想弄清楚为什么通过 packer provisioner 脚本安装节点不足以让 npm 在 aws cloudformation userdata 脚本中被识别。
如果有人偶然发现这个问题,解决方案是简单地将您的节点路径添加到 cloudFormation 中的 PATH 环境变量中,如下所示:
nodejs = '\n', \
'PATH=/root/.nvm/versions/node/v6.8.0/bin:$PATH\n', \
'npm run start-dev --prefix path/to/project\n' \
'\n' ''