ようへいの日々精進XP

よかろうもん

seiton (整頓) でいにしへの AWS リソースをざっくりと整頓する

tl;dr

古くから存在している EC2 の AMI や EBS のスナップショット等 (以後, AWS リソースと記載) について, 適切にローテーションされていれば良いのですが, 削除されないまま残ってしまっている AWS リソースを日付ベースでざっくりと削除したいと思って, 昔作ったツールを改めて seiton (整頓) という名前で作り直したので紹介させて下さい.

作ったもの

github.com

その名も整理整頓 (seiton) です.

インストールの手順や各種コマンドについては, README をご一読下さい.

seiton (整頓) する

ざっくりとした使い方 (seiton の準備)

以下を実行して, seiton の実行に必要なディレクトリとファイルを用意します.

$ bundle exec seiton init

seiton init では, 以下の処理が行われます.

ざっくりとした使い方 (例えば, 古い 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 をご利用下さい.