Glue与EC2:关闭未使用的网络接口
解决AWS Glue任务结束后残留网络接口的问题
方法1:调整Glue任务的VPC配置
- 如果你的Glue任务不需要访问VPC内部资源,直接切换到无VPC模式,这样任务运行时不会创建弹性网络接口(ENI),从根源避免问题。
- 若必须使用VPC,检查任务的VPC配置是否开启了ENI的
DeleteOnTermination属性。虽然Glue默认会开启这个属性,但如果有自定义配置覆盖的情况,需要手动确认:在任务的VPC设置中,确保子网关联的ENI会随任务终止自动删除。
方法2:在Glue任务中添加清理逻辑
在任务代码末尾加入一段Python脚本,调用boto3删除当前任务生成的闲置ENI:
import boto3 import os def cleanup_unused_enis(): ec2_client = boto3.client('ec2') # 获取当前Glue任务名称(从环境变量中读取) current_job_name = os.environ.get('GLUE_JOB_NAME') # 筛选属于当前任务、状态为闲置的ENI eni_list = ec2_client.describe_network_interfaces( Filters=[ {'Name': 'tag:aws-glue-job-name', 'Values': [current_job_name]}, {'Name': 'status', 'Values': ['available']} ] )['NetworkInterfaces'] for eni in eni_list: try: ec2_client.delete_network_interface(NetworkInterfaceId=eni['NetworkInterfaceId']) print(f"已删除ENI: {eni['NetworkInterfaceId']}") except Exception as err: print(f"删除ENI {eni['NetworkInterfaceId']}失败: {str(err)}") # 在任务执行完毕后调用清理函数 cleanup_unused_enis()
- 注意:要给Glue任务的IAM角色添加
ec2:DescribeNetworkInterfaces和ec2:DeleteNetworkInterface这两个权限,否则脚本会执行失败。
方法3:用Lambda定时清理闲置ENI
如果上面的方法无法覆盖所有场景,可以创建一个Lambda函数定期清理子网中的闲置ENI:
- 给Lambda的IAM角色配置EC2的ENI描述和删除权限;
- 编写Lambda代码(逻辑和上面的清理脚本类似,可根据标签或子网ID筛选Glue相关的ENI);
- 通过CloudWatch事件设置触发规则,比如每天执行一次,或者在Glue任务运行结束后触发。
方法4:排查Glue资源泄漏问题
- 检查Glue任务的运行状态,确认是否有未正常终止的Worker节点——这些节点会持续持有ENI,需要在Glue控制台的“Job Runs”页面手动终止异常任务。
- 排查是否有Glue开发端点、爬虫等其他资源在创建ENI,若这些资源不再需要,直接删除即可减少子网负载。
内容的提问来源于stack exchange,提问作者Hernandes Matias Junior
相关产品推荐
相关产品推荐

