はじめに
今回は私がコスト削減を目的としてあるAWS環境上の使われていないリソースを削除する取り組みで主に使用したAWS Nukeについて実行方法を紹介します。
AWS Nukeとは?
AWS環境のリソースを一括で削除する方法の1つで、簡単に言えばタグでリソースをフィルタリングして一括削除することができるサービスです。
ただ、こちらはAWS公式ドキュメントには載っているのですが、公式に出しているサービスではありません。
そのため、本記事を参考に使用する際は自己責任でお願いします。
紹介の前に
今回使用するAWS Nukeはバージョン3.29.1です。
実行時には最新バージョンを使用してください。
最新バージョンはこちらでチェックできます。
削除手順
AWS Nukeの準備
①AWSマネジメントコンソールにログインします。
(https://aws.amazon.com/console/)
②CloudShellを起動
(画像のサービス検索 or 右上のアイコンを押下)
ここからはCLIで操作していきます。
③ディレクトリをtmpに移動します。
cd /tmp/
④AWS Nukeのtar.gzファイルをURLを使ってダウンロードします。
こちらのURLは最新バージョンのものを使用することをオススメします。
wget -c https://github.com/ekristen/aws-nuke/releases/download/v3.29.1/aws-nuke-v3.29.1-linux-amd64.tar.gz
⑤ダウンロードしたtar.gzファイルを展開します。
tar -zxvf aws-nuke-v3.29.1-linux-amd64.tar.gz
⑥aws-nukeバイナリを実行して使用可能なリソースタイプのリストを表示する。
./aws-nuke resource-types
⑦Nukeの設定ファイルや実行の管理に使うaws-nuke-dirという新しいディレクトリを作成
mkdir aws-nuke-dir
⑧作成したaws-nuke-dirディレクトリに移動
cd aws-nuke-dir
⑨aws-nukeバイナリを今いるディレクトリに移動します。
mv /tmp/aws-nuke ./
⑩sudoの管理者権限でnuke-config.ymlという設定ファイルをvimを使って作成・編集します。
sudo vim nuke-config.yml
これを実行すると今まで書いたコマンドが消えたように見えると思いますがそのままで大丈夫です。
設定ファイル編集
これからymlファイルを編集して設定をしていきます。
まずは編集をしたくてもそのままだとコマンドを入力できないと思いますので「i」を押して編集モードに切り替えましょう。
そのあとに以下のとおりに記入します。
regions:
- ap-northeast-1
blocklist:
- 999999999999
resource-types:
includes:
- EC2Instance
accounts:
123456789012:
filters:
__global__:
- type: exact
property: tag:Owner
value: "ryota-funa"
この設定では「東京リージョン」の「EC2インスタンス」のうち、「バリューが'ryota-funa'である'Owner'タグが付いている」リソースを保護するものとなっています。
accountの下の12桁の数列はアカウントIDです。
一括削除の対象になるサービスは前に表示したリソースタイプのリストにあります。
どこかにメモを取っておくと設定しやすくなると思います。
実行
では、ymlファイルが設定できたところでAWS Nukeを実行してみましょう。
まずは設定ファイルを保存して閉じるために、「Esc」を押して閲覧モードに切り替えて「:wq」と打ってみてください。
設定ファイルを開く前に戻るはずです。
いきなり削除するのは少し怖い気がするので、フィルタリングをしてどのリソースを削除できるのか確認したいと思います。
dry-runを実行
./aws-nuke run --config nuke-config.yml
実行後、エイリアスコードの入力を求められるのでエイリアスコードを入力しましょう。
これでフィルタリング結果を見ることができるはずです。
もしフィルタリングで削除保護されているのであれば…
ap-northeast-1 - EC2Instance - (インスタンスID) - [Identifier: "(インスタンスID)",・・・,tag:Owner: "ryota-funa",・・・] - filtered by config
上のように最後に「filtered by config」と出ているはずです。
もし、「would remove」と出てしまった場合は削除対象となっているので設定ファイルを確認しましょう。
確認も終了して実際に削除する際は以下のコマンドを実行します。
no-dry-runを実行
./aws-nuke run --config nuke-config.yml --no-dry-run
こちらを実行し、エイリアスコードを入力するとdry-runと同じく対象リソースの一覧が出てきます。
一覧を出力した後に2回目のエイリアスコードを入力すると一覧内の「would remove」と書かれていたリソースを削除することができます。
さいごに
今回はAWS Nukeの実行方法について紹介しました。
最新バージョンのAWS Nukeを使用する際は前バージョンのコマンドが非推奨になっているなどの変更があると考えられるので、そちらについてはGitHubをご確認ください。
また、削除後に「実は必要なリソースだった」といったことが起きないようにリソースの作成者及び管理者に確認して無駄なリソースを消していきましょう。