AWS Beanstalk 命令问题
Posted
技术标签:
【中文标题】AWS Beanstalk 命令问题【英文标题】:Issue with AWS Beanstalk command 【发布时间】:2017-04-07 14:16:59 【问题描述】:我一直在使用 EBS,没有任何问题。今天,我添加了负载均衡器,并使用以下配置上传了我的包:
files:
"/etc/nginx/conf.d/proxy.conf":
mode: "000755"
owner: root
group: root
content: |
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
container_commands:
01_reload_nginx:
command: "service nginx reload"
但是,当我尝试启动包时,我收到以下错误:
应用程序部署在 2016-11-23T14:07:40Z 失败,退出状态 7和错误:container_command 01_reload_nginx in .ebextensions/environment.config 失败。
怎么了?
这些是日志:
[eb-cfn-init]: 成功执行目录中的钩子 /opt/elasticbeanstalk/hooks/appdeploy/pre. [eb-cfn-init]: [2016-11-23T16:09:31.193Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild]:开始活动... [eb-cfn-init]:[2016-11-23T16:09:31.506Z] 信息 [2680] - [应用程序 部署 tttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild] :开始活动... [eb-cfn-init]:[2016-11-23T16:09:31.507Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_My_First_Elastic_Beanstalk_Application]:开始活动... [eb-cfn-init]:[2016-11-23T16:09:31.842Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_My_First_Elastic_Beanstalk_Application/Command 01_reload_nginx]:开始活动... [eb-cfn-init]: [2016-11-23T16:09:31.868Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_My_First_Elastic_Beanstalk_Application/Command 01_reload_nginx] :活动执行失败,因为: (ElasticBeanstalk::ExternalInvocationError)[eb-cfn-init]: [eb-cfn-init]:[eb-cfn-init]:[2016-11-23T16:09:31.868Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_My_First_Elastic_Beanstalk_Application/Command 01_reload_nginx]:活动失败。 [eb-cfn-init]: [2016-11-23T16:09:31.868Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_My_First_Elastic_Beanstalk_Application]:活动失败。 [eb-cfn-init]:[2016-11-23T16:09:31.868Z] 信息 [2680] - [应用程序部署 tttttt@4/StartupStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild] : 活动失败。 [eb-cfn-init]:[2016-11-23T16:09:31.884Z] 信息 [2680] - [应用程序部署 ttttttt@4/StartupStage0/EbExtensionPostBuild]:活动失败。 [eb-cfn-init]:[2016-11-23T16:09:31.884Z] 信息 [2680] - [应用程序 部署 tttttt@4/StartupStage0]:活动失败。 [eb-cfn-init]: [2016-11-23T16:09:31.884Z] 信息 [2680] - [应用程序部署 tttttt@4]:已完成的活动。结果:[eb-cfn-init]:应用程序 部署 - 命令 CMD-SelfStartup 失败
【问题讨论】:
【参考方案1】:我遇到了完全相同的问题,发生在平台升级期间。我就此联系了 AWS 支持:他们说他们无法重现,但有一条非常有趣的信息实际上可以防止这种情况发生。
但是,[command: "sudo service nginx reload"] 不是必需的,因为每次部署成功后 nginx 服务都会自动重启。
所以你可以删除
container_commands:
01_reload_nginx:
command: "service nginx reload"
脚本的一部分,因此您永远不会遇到重新加载失败。
【讨论】:
感谢您的解决方案。我添加了 01_reload_nginx 命令,因为我需要更新 client_max_body_size 并且该命令将使用新配置重新加载 nginx。当我将我的平台升级到“在 64 位 Amazon Linux/2.12.14 上运行的 Docker”时,我才遇到问题。删除 01_reload_nginx 部分解决了这个问题。【参考方案2】:很可能您的 NGINX 配置文件已损坏,并且在 NGINX 重新加载时未通过测试。在服务重新加载期间,NGINX 首先检查您的配置文件,如果配置正确,则向 NGINX 进程发送 HUP 信号,该进程优雅地关闭旧工作程序并使用新配置启动新工作程序。
为了验证您的配置文件,您可以使用以下命令:
/usr/bin/nginx -t -c ~/mynginx.conf
-t
= 不要运行,只测试配置文件。 NGINX 检查配置的语法是否正确,然后尝试打开配置中引用的文件。
-c filename
= 您的配置文件位置(如果不是默认值)
您还应该能够使用以下命令测试您的配置(取决于您使用的操作系统):
service nginx configtest
第一种变体更可取,因为它还会在您的 NGINX 配置中打印任何信息、警告和错误消息。
希望这会有所帮助。
【讨论】:
这怎么可能?从字面上看,环境设置或配置文件都没有改变。【参考方案3】:这很有趣,因为我们的弹性 beanstalk 部署昨天在 .ebextensions 上也失败了。一个小时后它工作了......
AWS 大约在同一时间部署了新版本的 EB 和 S3... https://aws.amazon.com/releasenotes/6845489088399156 https://aws.amazon.com/releasenotes/8532186109690530
不知道是不是 AWS 出了问题?
【讨论】:
【参考方案4】:我也遇到了类似的问题。有几个
1) 我的配置中有一个重复的条目导致了问题。直接在命令行上运行命令显示了问题
service nginx restart
nginx: [emerg] "keepalive_timeout" directive is duplicate in
/etc/nginx/conf.d/nginx.custom.conf:3
nginx: configuration file /etc/nginx/nginx.conf test failed
所以删除该条目有帮助。
2)您可以尝试重新启动,而不是重新加载,这对我有用。
command: "service nginx restart"
【讨论】:
【参考方案5】:我在使用 nginx、java 代码时遇到了同样的问题。
container_commands:
01_reload_nginx:
command: "service nginx reload"
在上面我添加的代码
container_commands:
01_reload_nginx:
command: "sudo service nginx reload"
sudo 解决了这个错误,部署成功。
【讨论】:
以上是关于AWS Beanstalk 命令问题的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk 命令不返回任何输出
在使用 AWS Elastic Beanstalk 创建实例时运行命令
如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?
AWS Elastic Beanstalk - Laravel Artisan 命令