Estoy intentando implementar mi aplicación Node.js en AWS ElasticBeanstalk con AWS CodePipeline. Dado que mi aplicación utiliza WebSockets, incluí el siguiente archivo de configuración en .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 Sin embargo, CodePipeline falla en el proceso de implementación y el archivo de registro de cfn-init.log dice lo siguiente:
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¿Cuál es la razón del fracaso?
El secreto aquí es que los registros completos y los rastreos de container_commands están en /var/log/cfn-init-cmd.log (en Amazon Linux 2 Elastic Beanstalk lanzado en noviembre de 2020). Para leer esto, ejecutarías:
eb ssh [environment-name] sudo tail -n 50 -f /var/log/cfn-init-cmd.log Esto no parece estar documentado en ningún lugar obvio y no se muestra cuando ejecuta eb logs . Solo lo encontré buscando en /var/log .
Para los lectores que buscan ejecutar comandos de administración de Django, consulte Ejecución de migraciones de Django al implementar en Elastic Beanstalk
Tuve exactamente el mismo problema y encontré la misma configuración que tampoco funcionó. Después de investigar más, encontré la configuración correcta (al menos a partir de ahora).
files: "/etc/nginx/conf.d/websockets.conf": content: | proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";Publiqué un artículo de blog que podría ser útil si necesita ayuda con una configuración adicional.
No estoy exactamente seguro de por qué ocurre el error, pero si está utilizando la plataforma Amazon Linux 2 (lanzada para Node.js el 30 de abril de 2020), puede personalizar la configuración de nginx más fácilmente.
Como se describe en Extensión de las plataformas Linux de Elastic Beanstalk , puede colocar un archivo nginx personalizado en .platform/nginx/nginx.conf y la implementación lo usará automáticamente. Es posible que desee inspeccionar la configuración predeterminada y basarla en eso.