由于安全组悬空而导致 Elastic Beanstalk 部署失败

Posted

技术标签:

【中文标题】由于安全组悬空而导致 Elastic Beanstalk 部署失败【英文标题】:Elastic Beanstalk deployment failing because of a dangling security group 【发布时间】:2015-12-30 06:56:40 【问题描述】:

使用 Elastic Beanstalk 进行部署时,我们收到以下错误:

错误:配置验证异常:无效的选项值:'sg-fdd33e89'(命名空间:'aws:autoscaling:launchconfiguration',选项名称:'SecurityGroups'):具有 id 'sg-fdd33e89' 的安全组确实不存在。

可能相关的事情:

我们在 .ebextensions 中为 ELB 提供了自定义安全组设置 我们之前从旧的 EB 环境中克隆了这个特定的 EB 环境,但由于这个安全组而无法终止旧环境。

(已经解决了这个问题,但是分享这个问题以防它帮助其他人)

【问题讨论】:

我遇到了同样的错误,并首先由 Google 引导到这里,但我发现这个其他 SO 答案更适用于我,因为我确信我的安全组仍然存在(实际上是默认VPC安全组):***.com/questions/40671054/… 【参考方案1】:

我发现了 Derya Sezen 的相关博文 AWS Elastic Beanstalk the security group having id does not exist problem

描述了一个案例,即旧环境中的旧安全组被继承到新环境(我可能也是这种情况) 建议使用 AWS CLI 更新 EB 环境的安全组选项

我在博客文章之后使用 AWS CLI 运行以下命令:

aws elasticbeanstalk update-environment --environment-name my-env-name --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=SecurityGroups,Value=""

之后,EB更新了一段时间的环境,之后我就可以成功部署了。

【讨论】:

【参考方案2】:

您可以通过运行eb config 删除有问题的部分。您将收到环境的可编辑配置,您可以在其中找到不存在的安全组并轻松删除它。

【讨论】:

eb config 似乎不再是新 CLI 中的选项。你知道通过aws elasticbeanstalk 获取可编辑配置的新方法吗?【参考方案3】:

如果您犯了与我相同的错误并终止环境,则无法使用 AWS CLI 来解决此问题。

$ aws elasticbeanstalk update-environment --environment-name my-kick-ass-env --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=SecurityGroups,Value=""

A client error (InvalidParameterValue) occurred when calling the UpdateEnvironment operation: No Environment found for EnvironmentName = 'my-kick-ass-env'.

唯一的解决方案是等到终止的环境被 AWS 完全删除。终止后通常需要一个小时才能删除。

【讨论】:

【参考方案4】:

我在使用 EB Web 控制台创建新环境时遇到了同样的错误。

为了避免这种情况,我采取了以下措施:

确保为实例选择适当的 VPC/将您的实例放在适当的 VPC 中 在 Web ui 中,至少选择一个实例子网

【讨论】:

以上是关于由于安全组悬空而导致 Elastic Beanstalk 部署失败的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk:将数据库安全组迁移到 VPC 安全组

限制对 Elastic Beanstalk 的 HTTP 访问

如何在 CloudFormation 模板中为 Elastic Beanstalk 启动配置指定安全组?

Aws Elastic Load Balancing 安全组不允许入站调用

在 Elastic Beanstalk 中,如何使用 .ebextensions 将现有安全组设置为负载均衡器?

将 EC2 安全组限制为 Elastic Beanstalk 实例