AWS CDK:处理因依赖ENIs导致的安全组删除失败问题
CDK栈销毁失败:安全组因残留ENIs无法删除
问题现象
- 销毁包含Lambda函数和安全组的CDK栈时,触发EC2安全组
DependencyViolation错误,提示安全组存在依赖对象(未被自动清理的Elastic Network Interface,即ENIs) - 即便Lambda函数已被成功删除,残留的ENIs仍绑定在目标安全组上,导致安全组删除失败
- 该问题为偶发,但一旦出现,重试栈销毁操作无法解决
错误日志示例:
staging-msk-client-example-producer-stack | 5:51:27 AM | DELETE_FAILED | AWS::EC2::SecurityGroup | st... resource sg-0e6dbe0f6acf80e32 has a dependent object (Service: AmazonEC2; Status Code: 400; Error Code: DependencyViolation; Request ID: 1989aad9-1921-45d3-a413-d6179c4cc5e6; Proxy: null)
临时解决办法
当栈销毁在删除Lambda后进入失败状态时,手动清理残留ENIs:
- 登录AWS控制台,进入EC2服务的「网络接口」页面
- 筛选出与报错安全组ID关联的ENIs
- 选中目标ENIs,执行「删除」操作
- 重新触发CDK栈的销毁操作
长期规避思路
目前CDK原生暂未提供自动清理这类残留ENIs的机制,可尝试以下方案规避:
- 在CDK代码中为Lambda函数添加销毁前钩子,显式清理其关联的ENIs(需注意Lambda ENIs的生命周期逻辑,避免误删)
- 调整栈内资源的销毁顺序,通过
dependsOn或自定义逻辑,确保安全组的删除操作在Lambda相关资源完全清理后执行 - 编写自动化脚本,定期检查并清理账号内无主的残留ENIs
内容的提问来源于stack exchange,提问作者himahimahima
相关产品推荐
相关产品推荐

