IBM Cloud Docs
删除 VPC 及其关联资源

删除 VPC 及其关联资源

在 IBM Cloud® Virtual Private Cloud 控制台中,必须先删除 IBM Cloud 的所有公共网关、子网和连接的资源,然后才能删除 VPC。

使用 IBM Cloud 控制台删除 VPC

要使用控制台删除 VPC,请执行以下操作:

  1. 查找 VPC 中的所有子网。 单击导航窗格中的 VPC,然后选择 VPC。

  2. 在 VPC 详细信息页面上,转至此 VPC 中的子网列表,然后选择子网以查看其详细信息。

  3. 删除连接到子网的所有资源。 在导航窗格中,单击连接的资源。 选择每个附加实例、负载平衡器和 VPN 网关,进入其详细信息页面。 从操作菜单操作图标,选择删除。 必须先停止连接的实例,然后才能将其删除。

    虽然资源的状态会立即更改为正在删除,但完成删除操作可能需要最长 30 分钟时间。 直到控制台中不再显示所有连接的资源后,才能删除子网。

  4. 删除所有附加资源后,返回子网详细信息页面,单击删除图标。

  5. 删除所有子网后,返回 VPC 的详细信息页面,单击删除图标。 这将删除 VPC 及其所有公共网关。

使用 IBM Cloud CLI 删除 VPC

以下示例显示如何按建议顺序从 IBM Cloud® Virtual Private Cloud中删除每个 VPC 资源的资源。

要记住有关删除的以下关键事实:

  • 在 VPC 为空之前,无法删除 VPC。
  • 必须先成功删除父资源包含的所有资源,然后才能删除父资源。
  • 如果资源处于暂挂删除状态,那么在列表查询中查看时,该资源会显示 deleting 状态。
  • 大多数删除请求都是_异步的_,这意味着当资源尚未完全删除时,可能会在列表查询中显示删除状态。
  • 尝试删除父资源之前,必须轮询以确保子资源不再显示在列表视图中。

资源的状态从 deleting 更改为 failed 后,可以重试删除该资源。 如果无法删除处于 failed 状态的资源,请联系支持人员

第 1 步:查找 VPC 中要删除的所有子网

必须先删除 VPC 中的所有子网,然后才能删除 VPC。 运行以下命令并查看 ID 值,获取要删除的 VPC 的 ID:

ibmcloud is vpcs

将 VPC 标识保存在变量中,以便稍后可以使用,例如:

vpc="0738-3524fef5-da35-4622-bf9a-31614964649d"

要获取帐户中所有子网的列表,请运行以下命令:

ibmcloud is subnets

查看 VPC 值以确定需要删除的子网。 将子网标识保存在变量中,以便稍后可以使用,例如:

subnet="0738-d31ce469-9b0f-44e1-87ce-0fc77d8b0e53"

如果要删除的 VPC 有多个子网,请重复这些步骤以删除每个子网。

步骤 2:删除 VPC 中的每个子网

删除子网中的所有 VPN 网关(如果有)

要列出帐户中的所有 VPN 网关,请运行以下命令:

ibmcloud is vpn-gateways

对于要删除的子网中的每个 VPN 网关,运行以下命令,其中 $vpnid 是 VPN 网关的 ID。

ibmcloud is vpn-gateway-delete $vpnid

VPN 网关的状态会立即变为 deleting,但仍会出现在列表查询结果中。 删除 VPN 网关最长可能需要 30 分钟。 在等待删除 VPN 网关的同时,您可以请求并行删除其他子网资源。 但是,在 VPN 网关和子网中的所有其他资源不再出现在列表查询结果中之前,不能删除子网。

删除子网中的所有负载均衡器(如果有)

要列出帐户中的所有负载均衡器,请运行以下命令:

ibmcloud is load-balancers

对于要删除的子网中的每个负载平衡器,运行以下命令,其中 $lbid 是负载平衡器的 ID。

ibmcloud is load-balancer-delete $lbid

负载平衡器的状态会立即更改为 deleting,但仍会显示在列表查询结果中。 删除负载均衡器最长可能需要 30 分钟。 在等待删除负载平衡器的同时,您可以请求并行删除其他子网资源。 但是,在子网中的负载平衡器和所有其他资源不再出现在列表查询结果中之前,不能删除子网。

删除子网中的所有网络接口(如果有)

实例可以有多个网络接口,这些网络接口可以属于 VPC 的多个子网。 删除子网之前,必须先删除该子网中的任何网络接口。

删除子网中网络接口的唯一方法是删除实例。

要列出实例的所有网络接口,请运行以下命令:

ibmcloud is instance-network-interfaces $vsi

要列出帐户中的所有实例,请运行以下命令:

ibmcloud is instances

如果要删除 VPC 中的所有实例,那么可以对 VPC 中的每个实例运行以下命令,其中 $vsi 是要删除的实例的标识。 删除实例后,将自动删除其他子网中的所有网络接口(如果有)。

必须先停止实例,然后才能将其删除。 要停止实例,请运行 ibmcloud is instance-stop 命令。

ibmcloud is instance-delete $vsi

实例的状态会立即更改为 deleting,但该实例仍会显示在列表查询结果中。 删除实例最长可能需要 30 分钟。

等待删除实例时,可以请求并行删除其他子网资源。 但是,要到子网中的实例和其他所有资源不再显示在列表查询结果中之后,才能删除子网。

如果在尝试删除的子网中存在辅助网络接口,那么必须删除实例。 不能只从实例中删除网络接口,而不删除实例。

删除子网

删除了子网内的所有资源后(这意味着列表查询结果中不会返回这些资源),请运行以下命令来删除子网:

ibmcloud is subnet-delete $subnet

子网的状态会立即更改为 deleting,但可能需要几分钟时间才能删除子网,随后该子网不会再显示在列表查询结果中。

步骤 3:删除 VPC 中的所有公共网关(如果有)

要列出帐户中的所有公共网关,请运行以下命令:

ibmcloud is public-gateways

对于要删除的 VPC 中的每个公共网关,请运行以下命令来删除公共网关,其中 $gateway 是公共网关标识。

ibmcloud is public-gateway-delete $gateway

步骤 4:删除 VPC

删除了 VPC 中的所有子网和公共网关后,运行以下命令来删除 VPC,其中 $vpc 是要删除的 VPC 的标识。

ibmcloud is vpc-delete $vpc

VPC 的状态会立即更改为 deleting,但可能需要几分钟时间才能删除 VPC,随后该 VPC 不会再显示在列表查询结果中。

使用 REST API 删除 VPC

以下步骤是过程中的主要部分:

  1. 查找 VPC 中要删除的所有子网。
  2. 删除 VPC 中的每个子网,这意味着:
    • 删除子网中的所有 VPN 网关。
    • 删除子网中的所有负载均衡器。
    • 删除子网中实例的所有网络接口。
    • 删除子网。
  3. 删除 VPC 中的所有公共网关。
  4. 删除 VPC。

以下各部分提供了一些示例 API 调用,可以运行这些调用来删除 VPC。

第 1 步:查找 VPC 中要删除的所有子网

必须先删除 VPC 中的所有子网,然后才能删除 VPC。 运行以下命令并查看 id 值,获取要删除的 VPC 的 ID:

curl -X GET "$vpc_api_endpoint/v1/vpcs?version=$version&generation=2" \
     -H "Authorization:$iam_token"

在 curl 命令后添加 | json_pp| jq,以获得可读的 JSON 字符串。jq 是根据 MIT 许可 授权的第三方工具。创建实例时,jq 可能不会预装在所有可用的 VPC 映像中。 json_pp 命令是一个 JSON 预处理器,通常默认安装在大多数 Linux 发行版上。

将 VPC 标识保存在变量中,以便稍后可以使用,例如:

vpc="0738-3524fef5-da35-4622-bf9a-31614964649d"

要获取帐户中所有子网的列表,请运行以下命令:

curl -X GET "$vpc_api_endpoint/v1/subnets?version=$version&generation=2" \
     -H "Authorization:$iam_token"

查看 vpc 值以确定需要删除的子网。 将子网标识保存在变量中,以供稍后使用,例如:

subnet="0738-d31ce469-9b0f-44e1-87ce-0fc77d8b0e53"

如果要删除的 VPC 有多个子网,请重复这些步骤以删除每个子网。

步骤 2:删除 VPC 中的每个子网

删除子网中的所有 VPN 网关(如果有)

要列出帐户中的所有 VPN 网关,请运行以下命令:

curl -X GET "$rias_endpoint/v1/vpn_gateways?version=$version&generation=2" \
     -H "Authorization:$iam_token"

针对要删除的子网中的每个 VPN 网关运行以下命令,其中 $vpnid 是 VPN 网关的标识。

curl -X DELETE "$rias_endpoint/v1/vpn_gateways/$vpnid?version=$version&generation=2" \
     -H "Authorization:$iam_token"

VPN 网关的状态会立即更改为 deleting,但在执行列表查询时仍会返回此状态。 删除 VPN 网关最长可能需要 30 分钟。 在等待删除 VPN 网关的同时,您可以请求并行删除其他子网资源。 但是,在 VPN 网关和子网中的所有其他资源不再出现在列表查询中之前,不能删除子网。

删除子网中的所有负载均衡器(如果有)

要列出帐户中的所有负载均衡器,请运行以下命令:

curl -X GET "$rias_endpoint/v1/load_balancers?version=$version&generation=2" \
     -H "Authorization:$iam_token"

针对要删除的子网中的每个负载均衡器运行以下命令,其中 $lbid 是负载均衡器的标识。

curl -X DELETE "$rias_endpoint/v1/load_balancers/$lbid?version=$version&generation=2" \
     -H "Authorization:$iam_token"

负载均衡器的状态会立即更改为 deleting,但在执行列表查询时仍会返回此状态。 删除负载均衡器最长可能需要 30 分钟。 在等待删除负载平衡器的同时,您可以请求并行删除其他子网资源。 但是,在子网中的负载平衡器和所有其他资源不再出现在列表查询中之前,不能删除子网。

删除子网中的所有网络接口(如果有)

实例可以有多个网络接口,这些网络接口可以属于 VPC 的多个子网。 删除子网之前,必须先删除该子网中的任何网络接口。 删除子网中网络接口的唯一方法是删除实例。

要列出实例的所有网络接口,请运行以下命令:

curl -X GET "$vpc_api_endpoint/v1/instances/$vsi/network_interfaces?version=$version&generation=2" \
     -H "Authorization:$iam_token"

如果在尝试删除的子网中存在辅助网络接口,那么需要删除实例。 不能只从实例中删除网络接口,而不删除实例。

要列出帐户中的所有实例,请运行以下命令:

curl -X GET "$vpc_api_endpoint/v1/instances?version=$version&generation=2" \
     -H "Authorization:$iam_token"

如果要删除 VPC 中的所有实例,那么可以对 VPC 中的每个实例运行以下命令,其中 $vsi 是要删除的实例的标识。 删除实例后,将自动删除其他子网中的所有网络接口(如果有)。

必须先停止实例,然后才能将其删除。 有关更多信息,请参阅 创建实例操作 以使用 type 请求和 stop 操作。

curl -X DELETE "$vpc_api_endpoint/v1/instances/$vsi?version=$version&generation=2" \
     -H "Authorization:$iam_token"

实例的状态会立即变为 deleting,但仍可能显示在列表查询结果中。 删除实例最长可能需要 30 分钟。 等待删除实例时,可以请求并行删除其他子网资源。 但是,在子网中的实例和所有其他资源不再出现在列表查询中之前,不能删除子网。

删除子网

删除了子网内的所有资源,并且运行列表查询时不再返回这些资源后,请运行以下命令来删除子网:

curl -X DELETE "$vpc_api_endpoint/v1/subnets/$subnet?version=$version&generation=2" \
     -H "Authorization:$iam_token"

子网的状态会立即更改为 deleting,但可能需要几分钟时间才能删除子网,随后该子网不会再在列表查询结果中返回。

步骤 3:删除 VPC 中的所有公共网关(如果有)

要列出帐户中的所有公共网关,请运行以下命令:

curl -X GET "$vpc_api_endpoint/v1/public_gateways?version=$version&generation=2" \
     -H "Authorization:$iam_token"

对于要删除的 VPC 中的每个公共网关,请运行以下命令来删除公共网关,其中 $gateway 是公共网关标识。

curl -X DELETE "$vpc_api_endpoint/v1/public_gateways/$gateway?version=$version&generation=2" \
     -H "Authorization:$iam_token"

步骤 4:删除 VPC

删除了 VPC 中的所有子网和公共网关后,运行以下命令来删除 VPC,其中 $vpc 是要删除的 VPC 的标识。

curl -X DELETE "$vpc_api_endpoint/v1/vpcs/$vpc?version=$version&generation=2" \
     -H "Authorization:$iam_token"

VPC 的状态会立即更改为 deleting,但可能需要几分钟时间才能删除 VPC,随后该 VPC 不会再显示在列表查询结果中。