Amazon web services 通过aws CLI删除默认VPC

Amazon web services 通过aws CLI删除默认VPC,amazon-web-services,amazon-ec2,aws-cli,amazon-vpc,Amazon Web Services,Amazon Ec2,Aws Cli,Amazon Vpc,启动新帐户时,Amazon会创建一个新的默认VPC,其中包含3个子网、1个安全组、1个ACL和1个internet网关。我想删除默认vpc和与关联的对象。我可以通过控制台来实现这一点,但我想通过aws cli来实现这一点,我被绊住了。 当我尝试以下命令时: aws ec2 delete-vpc --vpc-id $VpcId 控制台返回DependencyViolation错误: 调用DeleteVpc操作时发生客户端错误(DependencyViolation):vpc“vpc-13f53

启动新帐户时,Amazon会创建一个新的默认VPC,其中包含3个子网、1个安全组、1个ACL和1个internet网关。我想删除默认vpc和与关联的对象。我可以通过控制台来实现这一点,但我想通过aws cli来实现这一点,我被绊住了。 当我尝试以下命令时:

aws ec2 delete-vpc --vpc-id $VpcId
控制台返回DependencyViolation错误:

调用DeleteVpc操作时发生客户端错误(DependencyViolation):vpc“vpc-13f53076”具有依赖项,无法删除

所以我试着删除依赖项,但并不适用于所有的依赖项

  • 对于internet网关,我得到了相同的错误:

    调用DeleteInternetGateway操作时发生客户端错误(DependencyViolation):internetGateway“igw-d0f51bb5”具有依赖项,无法删除

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

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

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

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

这是一个新帐户,除了亚马逊创建的默认专有网络之外,以前没有创建任何内容。
任何正确方向的帮助或指针都将不胜感激。

尝试从AWS仪表板中删除,它可能会给出更详细的错误

  • 仅供参考,您不能删除默认安全组
  • 在删除internet网关之前,请将其与VPC分离
  • 确保没有附加弹性网络接口(ENI)-您可以在EC2左窗格的NetworkInterfaces下看到它

  • 为什么要删除默认专有网络?

    在删除网关之前,必须先分离网关;附件创建了一个循环依赖项。查看我的答案。

    我需要检查并删除所有地区的所有默认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
    

    如前所述,这可以从AWS控制台工作。我只想从一个自动化脚本开始。其想法是使用aws cli和cloudformation仅从powershell脚本构建新环境。我想删除默认VPC,因为我不使用它,我使用了另一个。最好的做法是删除默认VPC,以防它不在使用,并且没有适当的监控,因为这可能会带来安全风险。