You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过程序化方式删除Databricks入门教程关联的所有AWS资源?

自动化清理Databricks残留AWS资源方案

Terraform 自动化销毁方案

如果你的Databricks工作区是通过Terraform部署的,直接执行terraform destroy即可联动清理所有关联AWS资源。如果是通过Databricks控制台创建的工作区(如入门教程中的操作),可以通过导入现有资源到Terraform状态再销毁的方式处理:

  1. 初始化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" {
  # 留空,通过导入填充属性
}
  1. 导入残留资源到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
  1. 执行销毁操作:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:42:20