通过aws CLI删除默认VPC

时间:2014-10-13 13:04:45

标签: amazon-web-services amazon-ec2 aws-cli amazon-vpc

启动新帐户时,亚马逊会创建一个新的默认VPC,其中包含3个子网,1个安全组,1个ACL和1个Internet网关。我想删除默认的vpc和与之关联的对象。我可以通过控制台做到这一点,但我想通过aws cli实现这一点,而且我被困了。

当我尝试以下命令时:

aws ec2 delete-vpc --vpc-id $VpcId

控制台返回DependencyViolation错误:

调用DeleteVpc操作时发生客户端错误(DependencyViolation):vpc' vpc-13f53076'有依赖关系,无法删除。

所以我尝试删除依赖项,但它并不适用于所有人!

  • 对于互联网网关,我收到了同样的错误:

    调用DeleteInternetGateway操作时发生客户端错误(DependencyViolation):InternetGateway' igw-d0f51bb5'有依赖关系,无法删除。

  • 对于默认安全组。我收到以下错误:

    调用DeleteSecurityGroup操作时发生客户端错误(CannotDelete):指定的组:" sg-acca7bc "名称:"默认"不能被用户删除

  • 对于默认ACL,我收到以下错误:

    调用DeleteNetworkAcl操作时发生客户端错误(InvalidParameterValue):无法删除默认网络ACL acl-d3ba77b6

这是一个新的帐户,除了亚马逊创建的默认vpc之外没有创建任何内容。 任何有关正确方向的帮助或指示都会非常感激。

3 个答案:

答案 0 :(得分:3)

尝试从AWS仪表板中删除,可能会提供更详细的错误。

  1. 仅供参考,您无法删除默认安全组
  2. 删除互联网网关之前,请将其与VPC分离
  3. 确保没有连接弹性网络接口(ENI) - 您可以在EC2左窗格中的NetworkInterfaces下看到它
  4. 为什么要删除默认的VPC?

答案 1 :(得分:1)

你必须先分离网关才能删除它;附件创建循环依赖。看我的回答here

答案 2 :(得分:0)

我需要检查并删除所有区域中的所有默认VPC,并为此编写脚本。可能会节省一些时间。需要aws cli和“ jq”。

#/usr/bin/env bash

export REGIONS=$(aws ec2 describe-regions | jq -r ".Regions[].RegionName")

for region in $REGIONS; do
    # list vpcs
    echo $region
    aws --region=$region ec2 describe-vpcs | jq ".Vpcs[]|{is_default: .IsDefault, cidr: .CidrBlock, id: .VpcId} | select(.is_default)"
done

read -p "Are you sure? " -n 1 -r
echo    # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
    for region in $REGIONS ; do
        echo "Killing $region"
        # list vpcs
        export IDs=$(aws --region=$region ec2 describe-vpcs | jq -r ".Vpcs[]|{is_default: .IsDefault, id: .VpcId} | select(.is_default) | .id")
        for id in "$IDs" ; do
            if [ -z "$id" ] ; then
                continue
            fi

            # kill igws
            for igw in `aws --region=$region ec2 describe-internet-gateways | jq -r ".InternetGateways[] | {id: .InternetGatewayId, vpc: .Attachments[0].VpcId} | select(.vpc == \"$id\") | .id"` ; do
                echo "Killing igw $region $id $igw"
                aws --region=$region ec2 detach-internet-gateway --internet-gateway-id=$igw --vpc-id=$id
                aws --region=$region ec2 delete-internet-gateway --internet-gateway-id=$igw
            done

            # kill subnets
            for sub in `aws --region=$region ec2 describe-subnets | jq -r ".Subnets[] | {id: .SubnetId, vpc: .VpcId} | select(.vpc == \"$id\") | .id"` ; do
                echo "Killing subnet $region $id $sub"
                aws --region=$region ec2 delete-subnet --subnet-id=$sub
            done

            echo "Killing vpc $region $id"
            aws --region=$region ec2 delete-vpc --vpc-id=$id
        done
    done

fi