tl;dr
古くから存在している EC2 の AMI や EBS のスナップショット等 (以後, AWS リソースと記載) について, 適切にローテーションされていれば良いのですが, 削除されないまま残ってしまっている AWS リソースを日付ベースでざっくりと削除したいと思って, 昔作ったツールを改めて seiton (整頓) という名前で作り直したので紹介させて下さい.
作ったもの
その名も整理整頓 (seiton) です.
インストールの手順や各種コマンドについては, README をご一読下さい.
seiton (整頓) する
ざっくりとした使い方 (seiton の準備)
以下を実行して, seiton の実行に必要なディレクトリとファイルを用意します.
$ bundle exec seiton init
seiton init
では, 以下の処理が行われます.
spec
ディレクトリの作成Rakefile
の作成
ざっくりとした使い方 (例えば, 古い AMI を削除する)
例えば, AMI について, 2019 年 12 月 31 日より以前に作成したものについて削除したい場合, 以下のように実行します.
$ bundle exec seiton ami --before-datetime=2019/12/31
--check
オプションを付与すると, 削除対象を確認することが出来ます.
$ bundle exec seiton ami --before-datetime=2019/12/31 --check
実際の運用では, 最初に --check
オプションを付与して, 対象を確認することをおすすめします.
ざっくりとした使い方 (削除したくないリソース)
例えば, EBS スナップショット snap-xxxxxxxxxxxx と snap-yyyyyyyy は削除したくない場合には, 以下のように実行します.
$ bundle exec seiton ami --before-datetime=2019/12/31 --ignores=snap-xxxxxxxxxxxx snap-yyyyyyyy
もしくは, 以下のような除外リストファイルを作成しておいて, --ignores-file=
オプションに渡します.
$ cat ignores.txt snap-xxxxxxxxxxxx snap-yyyyyyyy $ bundle exec seiton ami --before-datetime=2019/12/31 --ignores-file=ignores.txt
必要に応じて除外リストをリポジトリで管理することをおすすめします.
seiton (整頓) されたことを確認する
ざっくりとした使い方 (意図した通りに削除されたか確認する)
削除またはチェック (--check
オプションを付与) が実行されると, spec
ディレクトリに削除リスト又は awspec で利用可能なテストコードが出力されます.
$ tree spec spec ├── ebs_snapshots_list.txt ├── ec2_images_spec.rb └── spec_helper.rb 0 directories, 3 files
尚, ebs_snapshot_list.txt
については, awspec で EBS スナップショットの所在をテストする方法を見つけることが出来なかったので, 以下のように describe
系の API を叩いて例外を捕捉するような対応で所在を判定しています.
... def check_ec2_snapshots(resouces) resouces.each do |resouce| r, deleted, not_deleted = ignore_resource?(resouce) begin ec2_client.describe_snapshots({ snapshot_ids: [ r ] }) log.info(not_deleted) rescue log.info(deleted) end end end ...
rake のタスク一覧を確認してみると, 以下のように rake 経由で意図した通りに削除されたかを確認することが出来ます.
$ bundle exec rake -T rake check:ebs_snapshots # Test for ebs_snapshots deleted rake check:ec2_images # Test for ec2_images deleted
削除したことのエビデンスが必要な場合には, 出力結果をファイルに出力して提出すると良いのかなと考えています. また, awspec で検証出来るリソースについては, rspec のオプションで HTML とかに吐き出すことも出来るので, 有効活用して頂けると幸いです.
以上
IaC な世の中において, このようなツールへのニーズは非常にニッチだとは思いますが, 業務で不便を感じたことに対して, コードでアプローチ出来たことは良かったかなと思います. とは言え, 古いコードを見ながら, あまり成長が無い自分に残念な気持ちになりましたが, これからも精進していきたいとおもいます. よろしければ, seiton をご利用下さい.