如何通过程序化方式删除Databricks入门教程关联的所有AWS资源?
自动化清理Databricks残留AWS资源方案
Terraform 自动化销毁方案
如果你的Databricks工作区是通过Terraform部署的,直接执行terraform destroy即可联动清理所有关联AWS资源。如果是通过Databricks控制台创建的工作区(如入门教程中的操作),可以通过导入现有资源到Terraform状态再销毁的方式处理:
- 初始化Terraform配置文件,定义需要清理的资源类型:
provider "aws" { region = "us-east-1" # 替换为你的资源所在区域 } # 定义要清理的VPC resource "aws_vpc" "databricks_residual" { # 留空,通过导入填充属性 } # 定义要清理的NAT网关 resource "aws_nat_gateway" "databricks_residual" { # 留空,通过导入填充属性 } # 按需添加子网、路由表、安全组、EIP等资源定义 resource "aws_subnet" "databricks_residual" { # 留空,通过导入填充属性 }
- 导入残留资源到Terraform状态:
# 导入VPC(替换为你的VPC ID) terraform import aws_vpc.databricks_residual vpc-0123456789abcdef0 # 导入NAT网关(替换为你的NAT网关ID) terraform import aws_nat_gateway.databricks_residual nat-0123456789abcdef0 # 导入子网(替换为你的子网ID) terraform import aws_subnet.databricks_residual subnet-0123456789abcdef0
- 执行销毁操作:
terraform destroy
注意:导入前请通过AWS标签确认资源归属(Databricks创建的资源通常带有
Vendor=Databricks或DatabricksWorkspaceId标签),避免误删无关资源。
Python(Boto3)自动化清理脚本
通过Boto3 SDK可以编写脚本,按依赖顺序删除残留资源。核心思路是通过Databricks专属标签过滤目标资源,再按NAT网关 → EIP → 子网 → 路由表 → 安全组 → VPC的顺序删除:
import boto3 def cleanup_databricks_residual_resources(region, workspace_id=None): ec2 = boto3.client('ec2', region_name=region) # 1. 过滤Databricks关联资源(按标签筛选) filters = [{'Name': 'tag:Vendor', 'Values': ['Databricks']}] if workspace_id: filters.append({'Name': 'tag:DatabricksWorkspaceId', 'Values': [workspace_id]}) # 2. 删除NAT网关 nat_gateways = ec2.describe_nat_gateways(Filters=filters)['NatGateways'] for nat in nat_gateways: ec2.delete_nat_gateway(NatGatewayId=nat['NatGatewayId']) print(f"Deleted NAT Gateway: {nat['NatGatewayId']}") # 3. 释放关联的EIP addresses = ec2.describe_addresses(Filters=filters)['Addresses'] for addr in addresses: ec2.release_address(PublicIp=addr['PublicIp']) print(f"Released EIP: {addr['PublicIp']}") # 4. 删除子网 subnets = ec2.describe_subnets(Filters=filters)['Subnets'] for subnet in subnets: ec2.delete_subnet(SubnetId=subnet['SubnetId']) print(f"Deleted Subnet: {subnet['SubnetId']}") # 5. 删除路由表(非主路由表) route_tables = ec2.describe_route_tables(Filters=filters)['RouteTables'] for rt in route_tables: if not rt['Associations'][0]['Main']: ec2.delete_route_table(RouteTableId=rt['RouteTableId']) print(f"Deleted Route Table: {rt['RouteTableId']}") # 6. 删除安全组 security_groups = ec2.describe_security_groups(Filters=filters)['SecurityGroups'] for sg in security_groups: if sg['GroupName'] != 'default': ec2.delete_security_group(GroupId=sg['GroupId']) print(f"Deleted Security Group: {sg['GroupId']}") # 7. 删除VPC vpcs = ec2.describe_vpcs(Filters=filters)['Vpcs'] for vpc in vpcs: ec2.delete_vpc(VpcId=vpc['VpcId']) print(f"Deleted VPC: {vpc['VpcId']}") if __name__ == "__main__": # 替换为你的资源区域和Workspace ID(可选) cleanup_databricks_residual_resources(region='us-east-1', workspace_id='your-workspace-id')
脚本使用说明
- 确保已配置AWS凭证(环境变量、~/.aws/credentials或IAM角色)
- 先执行脚本的dry run版本(添加打印逻辑,不执行删除),验证要清理的资源列表
- 若Workspace ID未知,可仅通过
Vendor=Databricks标签筛选,但需确认资源归属
关键注意事项
- 依赖顺序不能乱:必须先删除依赖资源(如NAT网关、子网),再删除父资源(如VPC)
- 标签筛选是核心:Databricks自动创建的资源都会带有专属标签,通过标签过滤能避免误删其他业务资源
- 预验证:执行删除前务必确认目标资源列表,可通过AWS CLI或Boto3先查询再操作
内容的提问来源于stack exchange,提问作者dapperAF
相关产品推荐
相关产品推荐

