全リージョンのデフォルトVPCを削除する

:::note
デフォルトVPCは消しておいたほうがいい！
:::

* デフォルトVPCはCIDRの変更ができない
* 意図せずデフォルトVPCを利用した場合、パブリック公開になる
* 万が一デフォルトVPCが必要になった場合は、復活させることも可能

という訳で、消さない理由がない。

またAWS CLIを利用することで、全リージョンのデフォルトVPCをまとめて削除することが可能みたいなので、やってみよう。

https://dev.classmethod.jp/articles/delete-default-vpcs-by-cloudshell/

## 1.AWS CloudShell を起動する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/4fb465b4-a986-b860-8c8f-ec24bae11596.png)

## 2.下記コマンドを実行する

```cl:全リージョンのデフォルトVPCを削除するCLI
aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
| while read region; do
  aws --region ${region} --output text \
    ec2 describe-vpcs --query "Vpcs[?IsDefault].[VpcId]" \
  | while read vpc; do
    echo "# deleting vpc: ${vpc} in ${region}"
   
    ### IGW
    aws --region ${region} --output text \
      ec2 describe-internet-gateways --filters Name=attachment.vpc-id,Values=${vpc} \
      --query "InternetGateways[].[InternetGatewayId]" \
    | while read igw; do
      echo "## deleting igw: ${igw} in ${vpc}, ${region}"
      echo "--> detatching"
      aws --region ${region} --output json \
        ec2 detach-internet-gateway --internet-gateway-id ${igw} --vpc-id ${vpc}
      echo "--> deleteing"
      aws --region ${region} --output json \
        ec2 delete-internet-gateway --internet-gateway-id ${igw}
    done
   
    ### Subnet
    aws --region ${region} --output text \
      ec2 describe-subnets  --filters Name=vpc-id,Values=${vpc} \
      --query "Subnets[].[SubnetId]" \
    | while read subnet; do
      echo "## deleting subnet: ${subnet} in ${vpc}, ${region}"
      aws --region ${region} --output json \
        ec2 delete-subnet --subnet-id ${subnet}
    done
   
    ### VPC
    echo "## finally, deleting vpc: ${vpc} in ${region}"
    aws --region ${region} --output json \
      ec2 delete-vpc --vpc-id ${vpc}  
  done
done
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/bc45fbc3-9021-7774-2f49-298d6be82511.png)

上記スクショのように複数行のペーストで警告文が出ても続行してOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/1277a394-a622-d24a-0a34-06cdc05a10a6.png)

ペースト後Enterキーを押下すると、削除が実行されます。
※削除対象が多いため、少々時間がかかります。

## 3. 確認方法
EC2 Global View へアクセスすると、「リソースの概要」「リージョンあたりのリソース数」が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/eb544fce-a890-8ff1-8f23-acd95fb5afa3.png)

確認したところ、2つだけ残ってました。
ap-northeast-1 は何かで利用してた気がしますが、ap-southeast-2 は一体…？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/f8768678-6798-8242-06f7-0ce07314a647.png)

デフォルトVPCをGUIから削除する場合は、各VPCのアクションから削除を選択することで可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/0eb11606-90d4-81a5-2a76-ec1226274695.png)

確認用のチェックボックス・テキストフィールドを入力し、削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/336e90f4-bf7d-486b-5b87-86c783ccd446.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/17fc2e64-80dd-4867-7378-f9ba58a3c450.png)

普通に消えたので、CLIコマンドの処理順でキャンセルさせた…とかでしょうか？

## ※デフォルトVPCを復元したい場合は

下記コマンドを実行すればOKです。

```cl:全リージョンにデフォルトVPCを作成するCLI
aws --output text ec2 describe-regions --query "Regions[].[RegionName]" \
| while read region; do
  echo "creating default VPC in ${region}"
  aws --region ${region} ec2 create-default-vpc
done
```

実行すると、各リージョンにデフォルトVPCを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/f40610f8-f0ee-52e6-df05-2d133f92c67e.png)

再度 EC2 Global View へアクセスすると、VPCの「17リージョンの17」と表示されており、全リージョンに作成されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764512/5eec8457-fcf4-d737-9d00-a147b762b7e9.png)

想像よりカジュアルにデフォルトVPCの削除・復元ができたのでよかったです。

## 参考文献

https://dev.classmethod.jp/articles/delete-default-vpcs-by-cloudshell/

https://blog.toyokky.com/entry/2022/09/11/134940

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/default-vpc.html