【问题标题】:AWS Elastic Beanstalk won't deploy my Rails app even onceAWS Elastic Beanstalk 一次都不会部署我的 Rails 应用程序
【发布时间】:2020-09-22 19:39:07
【问题描述】:

我目前正在使用“在 64 位 Amazon Linux 2/3.0.2 上运行的 Ruby 2.6”映像,并通过查看 EC2 实例内部的 /var/logs/eb-engine.log(“eb 日志”命令不会显示这个),有一个重复出现的错误:

[错误] 解析 JSON 文件失败 /opt/elasticbeanstalk/deployment/app_version_manifest.json 有错误: json:无法将字符串解组到 Go 结构字段中 uint64 类型的 AppVersionManifest.Serial

当我检查该文件时,我不知道它有什么问题,或者是什么阻止了该文件被解析,如果这确实是问题:

{ "RuntimeSources":{"my_api":{"my_api-source_alfa0.2":"s3url":""}}},"DeploymentId":9,"Serial":"23","VersionLabel":"my_api-source_alfa0.2"}

序列“23”对我来说似乎很容易解析。请帮忙!

【问题讨论】:

  • 您是否尝试过使用23 作为数字而不是"23" 的字符串?
  • 实际上,我没有创建该文件:AWS EB 创建了它,并且每次自动重新部署实例时都会再次创建它。
  • 我目前正在观看这个最近的线程报告相同的forums.aws.amazon.com/thread.jspa?threadID=206033
  • 也许你仍然可以改变它?该错误表示需要一个整数,但该数字实际上是文件中的一个字符串。
  • 如果您查看日志,您会看到 EB 正在从 S3 下载该文件 (2020/07/14 22:58:41.937541 [INFO] Downloading: bucket: elasticbeanstalk-us-east- 1-603873217483,对象:/resources/environments/e-k9bptzbdbu/_runtime/versions/manifest_1594766763384),其中 Serial 是一个字符串。将其更改为 Int ,它可以工作。显然这不是一个长期的解决方案,但请留意上面提到的 aws 线程,因为它绝对是一个 AWS 错误

标签: amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

是什么原因造成的

我认为这是一个错误。

在某些情况下,如果您尝试 terminaterebuild 您的 Elastic Beanstalk 环境并且操作无法删除您的 AWSEBSecurityGroup,则可能会发生这种情况。

除此之外,还有其他原因的报告(参见 cmets)。

如何解决

AWS 文档 How do I terminate or rebuild my AWS Elastic Beanstalk environment when the AWSEBSecurityGroup fails to delete? 描述了如何解决此问题,但我摘录了以下主要步骤,以防链接中断:

  1. 打开AWS CloudFormation console
  2. 堆栈名称 列中,选择删除失败的堆栈。

    注意:堆栈的状态列显示DELETE_FAILED

  3. 操作菜单中,选择删除堆栈
  4. 删除堆栈弹出窗口中,选择AWSEBSecurityGroup,然后选择是,删除
  5. 终止或重建 Elastic Beanstalk 环境。

如果您更喜欢 CLI 或有更复杂的设置,链接的文档还有其他步骤。

然后呢?

删除组并重建环境后,您将不会再收到 app_version_manifest.json 错误。部署您的应用。

完成后,如果您通过 SSH 登录并运行……

cat /opt/elasticbeanstalk/deployment/app_version_manifest.json

...您会注意到 Serial 现在正确地表示为 JSON 数字。

【讨论】:

  • 您知道问题的原因是什么吗?就我而言,没有失败的安全组删除。我正在测试实例启动过程并手动终止 EC2 实例并遇到此问题(Amazon Linux 2/3.0.3,python)。这种情况在以前的平台(Amazon Linux 1)上对我有用,如果实例不可用,我担心生产中会发生这种情况。一般来说,这看起来像是弹性 beantalk 启动脚本中的一些错误——为什么“Serial”字段会突然变成字符串?为什么解析json文件时无法处理?
  • 我可以确认手动终止的 EC2 不是原因。我不得不重建环境(没有帮助)然后重新部署,它突然开始工作(“串行”字段再次变为整数)。之后,我再次手动终止了 EC2,这次新实例由 ElasticBeanstalk 启动,没有出现问题。
  • 绝对看起来像一个错误。除了我确定的原因之外,可能还有其他原因。
  • 我这里也发了一个issue-github.com/aws/elastic-beanstalk-roadmap/issues/75(没找到更好的地方),这里也有相关的讨论-forums.aws.amazon.com/thread.jspa?messageID=947760#947760
  • 谢谢@AaronBrager!!!我放弃并在准系统 EC2 实例中手动运行它。今天我测试了你的方法,在解决了其他小问题后,它成功了。
猜你喜欢
  • 2012-09-24
  • 2017-03-04
  • 2015-07-06
  • 2013-03-18
  • 2013-04-03
  • 2019-07-24
  • 2021-03-01
  • 2017-05-11
  • 2018-09-13
相关资源
最近更新 更多