0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CLIで全リージョンの全EC2インスタンスを削除する

Posted at

はじめに

最近勉強会やハンズオンをよくやっているおかげで、AWSリソースの消し忘れが怖くなることが多くなりました。
特に残したいリソースも運用しているリソースもないのでいっそ自動で全リージョンのEC2インスタンスを全て削除するスクリプトを作っちゃおうと思います。

本題

実装

ec2-delete-instances() {
    # EC2削除
    INSTANCE_IDS=$(
        aws ec2 describe-instances \
            --region $1 \
            --filters "Name=instance-state-name,Values=pending,running,stopped,stopping" \
            --query "Reservations[].Instances[].[InstanceId]" \
            --output text |
            sed -e "s/[\r\n]\+//g"
    )
    if [ -n "${INSTANCE_IDS[0]}" ]; then
        aws ec2 terminate-instances \
            --instance-ids $INSTANCE_IDS \
            --region $1
    fi
    aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text --region $1 |
        sed -e "s/[\r\n]\+//g"

}

echo "Start:delete-reaources-ec2 "

regions=($(aws ec2 describe-regions --query Regions[*].RegionName --output text --region ap-northeast-1))
# リージョン単位で並列処理
for region in ${regions[@]}; do
    ec2-delete-instances $region &
done
wait

echo "finish."
:

解説

regions=($(aws ec2 describe-regions --query Regions[*].RegionName --output text --region ap-northeast-1))

使用可能なリージョンを全て取得します。

# リージョン単位で並列処理
for region in ${regions[@]}; do
    ec2-delete-instances $region &
done
wait

リージョンでループを回し、削除処理につなげます。
関数名の後ろに&をつけることでリージョン単位で並列処理化しています。

    INSTANCE_IDS=$(
        aws ec2 describe-instances \
            --region $1 \
            --filters "Name=instance-state-name,Values=pending,running,stopped,stopping" \
            --query "Reservations[].Instances[].[InstanceId]" \
            --output text |
            sed -e "s/[\r\n]\+//g"
    )

インスタンス情報を取得しています。
queryオプションを付与することでインスタンスIDのみを取得しています。

    if [ -n "${INSTANCE_IDS[0]}" ]; then
        aws ec2 terminate-instances \
            --instance-ids $INSTANCE_IDS \
            --region $1
    fi

インスタンスIDが取得できた場合は削除します。

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text --region $1 |
        sed -e "s/[\r\n]\+//g"

最後にインスタンスの状態を確認して終了です。

終わりに

ひとまずEC2インスタンスの削除はできるようになりました。
このまま別のリソース削除をガンガン作っていきたいです;)

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?