雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

EC2のタグをCLIで管理するtapewriterというツールを作った

タイトル通りですが、EC2のタグをCLIで管理したくて(=コード化したくて)作ってみました。

route53をDSLで管理するroadworkerという素晴らしいツールがあるのですが、おもいっきりその影響を受けています。 (や、ほんと素晴らしいツールで結構な衝撃だったんです)

なにをするもの?

EC2のタグをjsonで管理できるようになるツールです。 jsonなのでバージョン管理もバックアップも取れます。

どんなところで使うの?

  • タグのバックアップをとりたいとき
  • タグをバージョン管理したいとき
  • ブラウザでの作業が嫌だというとき
  • タグを一気に変更したいとき

つかいかた

 タグをエクスポートする

% tapewriter -r ap-northeast-1 -f dev-app.json --export --filter '{"Env":"dev", "Role":"app"}' 

フィルターが使えます

タグを編集する

  • 変更前
{
  "instances": [
    {
      "id": "i-11111111",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "hoge",
        "State": "standby"
      }
    },
    {
      "id": "i-22222222",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "fuga",
        "State": "standby"
      }
    }
  ]
}
  • 変更後
{
  "instances": [
    {
      "id": "i-11111111",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "hoge",
        "State": "run"
      }
    },
    {
      "id": "i-22222222",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "fuga",
        "State": "run"
      }
    }
  ]
}

Stateタグを変更しています。

dry-run(テスト実行)

どんな変更がされるか確認

% tapewriter -r ap-northeast-1 -f dev-app.json --apply --dry-run

適用

タグを適用

% tapewriter -r ap-northeast-1 -f dev-app.json --apply

実際使ってみて

複数インスタンスのタグを一気に変更したいときにあってよかったなーと思いました。

でも1つのインスタンスのタグを一つだけ変える、とかだったらAWSコンソールからやったほうが早いです。

そもそも

みんなタグってどうやって管理しているんだろ。というかそもそも使ってないのか?ちょっと聞いてみたい。