无法删除 ENI - RDS 已删除
Cannot Delete ENI - RDS Already Deleted
我尝试将代码部署到 ElasticBeanstalk 环境。每次我尝试将此分支部署到环境时,EB 都会杀死所有实例、ELB、RDS 等并尝试重建但失败。这会使环境处于不良状态,因为它会删除 RDS 但不会删除安全组或 ENI。当我尝试手动删除安全组时,它说有依赖对象失败。
我将它追溯到网络接口,但是当我尝试分离它(甚至强制分离)时,我收到一个错误,提示我没有权限。此 ENI 应该已与 RDS 实例一起删除,但事实并非如此。现在我完全无法摆脱环境,也无法重建它。
我不确定为什么这个应用程序会导致环境在每次部署时尝试重新创建所有内容,因为 EC2 实例消失,然后当它们重新加载时,它们被添加到 ELB,但 ELB 不能这样做健康检查,因此它们经常停止服务,环境处于死亡状态。如果我能以某种方式查看有关导致此应用程序环境崩溃的原因的日志,那就太好了。
让 ElasticBeanstalk 删除包括 RDS 在内的所有实例对于部署来说是不可接受的,因为我们必须不断地重新播种,更不用说如果将其部署到生产环境中,它会擦除所有生产数据,而我们不能这样做。
有没有办法查看部署期间发生的情况以及发生这种情况的原因?
Elastic Beanstalk 在幕后使用 CloudFormation。您将能够通过识别正确的堆栈(根据您的日志以 awseb-e-j5zfptidfe-stack
为前缀)并删除它们来删除整个环境 - 或者至少删除带有 ENI 的堆栈。
您还需要从 ElasticBeanstalk 中删除环境。这将重置一切。如果有依赖堆栈 - 就像安全组一样。最好的解决方案是阅读消息以确定依赖关系并首先清理它们。
如果您知道要在其中保留数据,最好不要将 RDS 包含在弹性 beanstalk 堆栈中。单独创建它,然后将连接详细信息传递给您的堆栈。 AWS 提供 detailed instructions。一个简短的总结是:
- 为数据库创建安全组
- 创建带安全组的RDS数据库
- 将数据库连接参数作为环境变量添加到您的 EB 堆栈
- 将 EC2 安全组添加到您的数据库安全组,作为允许的数据库流量来源。
终于。您需要确定实例在堆栈中终止的原因。看起来他们不会变成 'healthy'。禁用 Ignore health check
,这是 Elastic Beanstalk 部署的一个选项。
这应该会生成一个带有标记为 'unhealthy' 的 EC2 实例的环境。然后,您可以使用所需的任何工具来诊断 EC2 实例未正确响应 health checks
的原因并解决问题。
EC2 实例未通过健康检查的原因可能有很多。检查本身可能配置不正确,安全组可能有误,或者 EC2 实例本身的服务可能没有按应有的方式响应。
我尝试将代码部署到 ElasticBeanstalk 环境。每次我尝试将此分支部署到环境时,EB 都会杀死所有实例、ELB、RDS 等并尝试重建但失败。这会使环境处于不良状态,因为它会删除 RDS 但不会删除安全组或 ENI。当我尝试手动删除安全组时,它说有依赖对象失败。
我将它追溯到网络接口,但是当我尝试分离它(甚至强制分离)时,我收到一个错误,提示我没有权限。此 ENI 应该已与 RDS 实例一起删除,但事实并非如此。现在我完全无法摆脱环境,也无法重建它。
我不确定为什么这个应用程序会导致环境在每次部署时尝试重新创建所有内容,因为 EC2 实例消失,然后当它们重新加载时,它们被添加到 ELB,但 ELB 不能这样做健康检查,因此它们经常停止服务,环境处于死亡状态。如果我能以某种方式查看有关导致此应用程序环境崩溃的原因的日志,那就太好了。
让 ElasticBeanstalk 删除包括 RDS 在内的所有实例对于部署来说是不可接受的,因为我们必须不断地重新播种,更不用说如果将其部署到生产环境中,它会擦除所有生产数据,而我们不能这样做。
有没有办法查看部署期间发生的情况以及发生这种情况的原因?
Elastic Beanstalk 在幕后使用 CloudFormation。您将能够通过识别正确的堆栈(根据您的日志以 awseb-e-j5zfptidfe-stack
为前缀)并删除它们来删除整个环境 - 或者至少删除带有 ENI 的堆栈。
您还需要从 ElasticBeanstalk 中删除环境。这将重置一切。如果有依赖堆栈 - 就像安全组一样。最好的解决方案是阅读消息以确定依赖关系并首先清理它们。
如果您知道要在其中保留数据,最好不要将 RDS 包含在弹性 beanstalk 堆栈中。单独创建它,然后将连接详细信息传递给您的堆栈。 AWS 提供 detailed instructions。一个简短的总结是:
- 为数据库创建安全组
- 创建带安全组的RDS数据库
- 将数据库连接参数作为环境变量添加到您的 EB 堆栈
- 将 EC2 安全组添加到您的数据库安全组,作为允许的数据库流量来源。
终于。您需要确定实例在堆栈中终止的原因。看起来他们不会变成 'healthy'。禁用 Ignore health check
,这是 Elastic Beanstalk 部署的一个选项。
这应该会生成一个带有标记为 'unhealthy' 的 EC2 实例的环境。然后,您可以使用所需的任何工具来诊断 EC2 实例未正确响应 health checks
的原因并解决问题。
EC2 实例未通过健康检查的原因可能有很多。检查本身可能配置不正确,安全组可能有误,或者 EC2 实例本身的服务可能没有按应有的方式响应。