CloudFormation创建Lambda函数 . 执行该功能时,由lambda自动配置ENI . 在执行函数后,ENI似乎仍然存在,以加速后续的函数执行 . CloudFormation删除lambda函数 . EN
仍然落后 . 尝试删除 VPC CloudFormation stack
时,堆栈删除失败,因为ENI正在使用 security group and subnet
.
在我的 lambda role
中 delete permission
在那里 .
“效果”:“允许”,“操作”:[“ec2:CreateNetworkInterface”,“ec2:DeleteNetworkInterface”,“ec2:DescribeNetworkInterfaces”],“资源”:“*”
我正在使用自定义资源从CloudFormation模板运行lambda,因此lambda将被称为堆栈创建和删除 . ENI将用于创建堆栈和删除堆栈 . 现在如何处理eni删除?
1 回答
在VPC中使用Lambda函数时存在一个已知问题,如Configuring a Lambda Function to Access Resources in an Amazon VPC中所述:
该文档没有详细说明"delay"的确切时间,但forum post by Richard@AWS建议它可以持续 6 hours (!) . (在我使用AWS CloudTrail的观察中,Lambda执行和ENI删除之间的延迟大约是 one hour . )
在AWS进一步解决此问题之前,您可以通过在删除Lambda函数和删除关联的安全组和子网之间分离和删除剩余的ENI来解决此问题 . 这就是Terraform目前handles这个issue在它的框架中 .
您可以通过将VPC / Subnet / SG层和Lambda函数层分离为两个不同的CloudFormation堆栈来手动执行此操作,也可以通过使用AWS SDK实现自定义资源来删除ENI来自动执行此操作 .
这是一个完整的工作示例,它创建了一个VPC-Lambda自定义资源,在使用
VPCDestroyENI
自定义资源删除时清理其ENI:注意:要创建上例中所需的VPC和专用子网,您可以使用AWS Quick Start Amazon VPC Architecture模板 .