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 命令

Rails - AWS(Elastic Beanstalk)部署,错误命令“git clone”

在 AWS Elastic Beanstalk 中运行 composer 命令