无法删除ENI - 已删除RDS

时间:2017-08-15 13:24:43

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

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

我将其追溯到网络界面,但是当我尝试将其分离(甚至强制分离)时,我收到一条错误消息,我没有获得许可。应该使用RDS实例删除此ENI,但事实并非如此。现在我根本无法摆脱环境,无法重建它。

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

让ElasticBeanstalk删除包括RDS在内的所有实例对于部署是不可接受的,因为我们经常不得不重新播种这个,更不用说这是否曾经部署到生产中它会擦除所有生产数据而我们不能拥有它。

有没有办法看到部署过程中发生了什么以及为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 为数据库创建安全组
  2. 使用安全组
  3. 创建RDS数据库
  4. 将数据库连接参数作为环境变量添加到EB堆栈
  5. 将EC2安全组添加到数据库安全组,作为允许的数据库流量来源。
  6. 最后。您需要确定实例在堆栈中终止的原因。看起来他们没有变得“健康”。禁用Ignore health check,这是Elastic Beanstalk部署的一个选项。

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

    EC2实例未通过健康检查可能有很多原因。检查本身可能配置错误,安全组可能出错或者EC2实例本身的服务可能没有响应。