我正在尝试使用AWS CodePipeline将Node.js应用程序部署到AWS ElasticBeanstalk。由于我的应用程序正在使用WebSockets,因此我在.ebextensions
中包含了以下配置文件。
container_commands:
enable_websocket:
command:
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
但是,CodePipeline在部署过程中失败,并且ElasticBeanstalk日志文件cfn-init.log
如下所示:
2020-06-18 12:43:42,345 [INFO] -----------------------Starting build-----------------------
2020-06-18 12:43:42,352 [INFO] Running configSets: Infra-EmbeddedPostBuild
2020-06-18 12:43:42,355 [INFO] Running configSet Infra-EmbeddedPostBuild
2020-06-18 12:43:42,359 [INFO] Running config postbuild_0_drcha
2020-06-18 12:43:42,381 [ERROR] Command enable_websockets (sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf) failed
2020-06-18 12:43:42,381 [ERROR] Error encountered during build of postbuild_0_drcha: Command enable_websockets failed
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
CloudFormationCarpenter(config, self._auth_config).build(worklog)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
changes['commands'] = CommandTool().apply(self._config.commands)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
raise ToolError(u"Command %s failed" % name)
ToolError: Command enable_websockets failed
2020-06-18 12:43:42,383 [ERROR] -----------------------BUILD FAILED!------------------------
2020-06-18 12:43:42,383 [ERROR] Unhandled exception during build: Command enable_websockets failed
Traceback (most recent call last):
File "/opt/aws/bin/cfn-init", line 171, in <module>
worklog.build(metadata, configSets)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
Contractor(metadata).build(configSets, self)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
self.run_config(config, worklog)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
CloudFormationCarpenter(config, self._auth_config).build(worklog)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
changes['commands'] = CommandTool().apply(self._config.commands)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
raise ToolError(u"Command %s failed" % name)
ToolError: Command enable_websockets failed
失败的原因是什么?
答案 0 :(得分:2)
我不确定为什么会发生错误,但是如果您使用的是Amazon Linux 2平台(于2020年4月30日针对Node.js推出),则可以更轻松地自定义nginx配置。
如Extending Elastic Beanstalk Linux platforms中所述,您可以将自定义nginx文件放在.platform/nginx/nginx.conf
上,部署将自动使用它。您可能需要检查默认配置并以此为基础。
答案 1 :(得分:1)
我遇到了完全相同的问题,遇到了同样无法使用的配置。经过进一步的侦查,我发现了正确的配置(至少到目前为止)。
files:
"/etc/nginx/conf.d/websockets.conf":
content: |
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
我发布了a blog article,如果您需要其他配置方面的帮助,可能会有所帮助。
答案 2 :(得分:0)
这里的秘密是来自 container_commands
的完整日志和回溯位于 /var/log/cfn-init-cmd.log
(在 2020 年 11 月发布的 Amazon Linux 2 Elastic Beanstalk 上)。要阅读此内容,您可以运行:
eb ssh [environment-name]
sudo tail -n 50 -f /var/log/cfn-init-cmd.log
这似乎没有任何明显的记录,并且在您运行 eb logs
时也不会显示。我是在 /var/log
四处寻找才找到的。
对于希望运行 Django 管理命令的读者,请参阅 Running Django migrations when deploying to Elastic Beanstalk