【问题标题】:Cannot Delete ENI - RDS Already Deleted无法删除 ENI - RDS 已删除
【发布时间】:2018-01-23 10:18:47
【问题描述】:

我尝试将代码部署到 ElasticBeanstalk 环境。每次我尝试将此分支部署到环境时,EB 都会杀死所有实例、ELB、RDS 等并尝试重建但失败。这会使环境处于不良状态,因为它会删除 RDS,但不会删除安全组或 ENI。当我尝试手动删除安全组时,提示存在依赖对象失败。

我将它追溯到网络接口,但是当我尝试分离它(甚至强制分离)时,我收到一个我没有权限的错误。此 ENI 应该已与 RDS 实例一起删除,但事实并非如此。现在我根本无法摆脱环境,也无法重建它。

我不确定为什么这个应用程序会导致环境在每次部署时尝试在 EC2 实例消失时重新创建所有内容,然后当它们重新加载时,它们会被添加到 ELB,但是 ELB 无法保证健康检查以使它们不断停止服务并且环境处于死状态。如果我能以某种方式查看导致环境与此应用程序崩溃的原因的日志,那就太好了。

让 ElasticBeanstalk 删除包括 RDS 在内的所有实例对于部署来说是不可接受的,因为我们必须经常重新播种,更不用说如果它曾经部署到生产环境中,它会擦除​​所有生产数据,而我们不能这样做。

有没有办法查看部署期间发生了什么以及为什么会发生这种情况?

【问题讨论】:

  • EB 不应在部署期间终止环境。您是否在 EB 控制台的“事件”选项卡上看到任何异常情况?也许自动缩放规则正在触发和终止您的实例?
  • 这是日志,您可以看到在部署过程中发生的一切导致环境失败,因为 ELB 看到新创建的 ec2 实例出于某种奇怪的原因而处于 OutOfService 状态。即使我从头开始重建环境,每次部署都会发生这种情况。 paste.laravel.io/LKLzq 目前,我的环境处于卡住状态,因为我尝试手动终止但它不会。我也无法手动删除 ENI,因为它说我没有权限,因为终止进程已经删除了 RDS 实例
  • 这是我在部署失败后尝试重建环境时的日志,新实例已初始化但无法与 ELB 通信paste.laravel.io/KLoRw 最后我无法删除安全组,因为的 ENI,由于 RDS 已被删除,我无法分离 ENI。
  • 我的主要目标是删除这个环境,并弄清楚为什么在部署时每次尝试删除 EC2 实例时,创建另一个实例而新实例无法与 ELB 通信。
  • 看起来环境终止与部署没有直接关系——部署完成和终止开始之间有 30 秒的间隔。此外,似乎终止是因为运行状况检查失败而开始的。您的健康检查是如何配置的?它是否曾将您的实例状态显示为Ok

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


【解决方案1】:

Elastic Beanstalk 在幕后使用 CloudFormation。您将能够通过识别正确的堆栈(根据您的日志以 awseb-e-j5zfptidfe-stack 为前缀)并删除它们来删除整个环境 - 或者至少使用 ENI 删除一个。

您还需要从 ElasticBeanstalk 中删除环境。这将重置一切。如果有依赖堆栈 - 就像安全组一样。最好的解决方案是阅读消息以确定依赖关系并首先清理它们。

如果您知道要保留其中的数据,最好不要将您的 RDS 包含在弹性 beanstalk 堆栈中。单独创建它,然后将连接详细信息传递到您的堆栈。 AWS 提供detailed instructions。一个简短的总结是:

  1. 为数据库创建安全组
  2. 使用安全组创建 RDS 数据库
  3. 将数据库连接参数作为环境变量添加到您的 EB 堆栈中
  4. 将 EC2 安全组添加到您的数据库安全组,作为允许的数据库流量来源。

最后。您需要确定实例在您的堆栈中被终止的原因。看起来他们并没有变得“健康”。禁用 Ignore health check,这是 Elastic Beanstalk 部署的一个选项。

这应该会导致 EC2 实例标记为“不健康”的环境。然后,您可以使用所需的任何工具来诊断 EC2 实例未正确响应 health checks 的原因并解决问题。

EC2 实例未能通过运行状况检查的原因可能有很多。检查本身可能配置不正确,安全组可能错误,或者 EC2 实例本身上的服务可能没有按应有的响应。

【讨论】:

  • 我会根据您所说的考虑删除堆栈,但是每次我尝试终止它时,从 beanstalk 内部删除环境都会失败。我找到了导致问题的原因,它是一个添加安全组入口规则的配置文件,我暂时删除了该文件,它似乎可以工作。我使用的文件是这里的文件,不知道为什么它失败了。 github.com/FoxxMD/laravel-elasticbeanstalk-queue-worker/blob/…
  • @JosephCrawford,该文件创建了一个资源“AWSEBSecurityGroup”,它可能是already exist。如果该文件与 ElasticBeanstalk 堆栈合并,则具有相同名称的两个资源将导致未定义的行为。
猜你喜欢
  • 2022-07-22
  • 2019-07-21
  • 2017-05-09
  • 2020-05-18
  • 2018-05-15
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多