ほわいとぼーど

ぷろぐらまのメモ帳

peco+sshのためのEC2DescribeInstancesなツールをGolangで再車輪した

pecoでsshする際に組み合わせるためのEC2をリストアップするコマンドラインGolangで書いた。
前職でもec2-ls-hostsを使って同じことをしていたのだが、
現職で使うには機能が合っていなかったのでGolang手習い的な意味も込めて新たに書いてみた。
こういうのをサクッと書くのにGolang便利。

できたもの

ec2ls-cache

Why 再車輪

現職ではMFAを設定しているので毎回うたなくて済むようにキャッシュを入れたかった。

後は、aws-sdk-goでのcredentials設定周りがpythonほど簡単ではないと思いこんでいて、
実際は書いてみたら自分が望む環境設定は比較的容易に満たせてそうだった。
この辺はそのうち気が向いたら検証してみたいかも。

使い方

  • pecoを入れる
  • ec2ls-cacheをGithubのReleaseからダウンロードしてパスの通る所に配置
  • ローカルにキャッシュを作成更新
    • ec2ls-cache -u --filters "running" --columns "PrivateIpAddress,InstanceId,Tag:Name" --sortcolumn "Tag:Name" とか
    • 詳しいオプションはGithubReadme参照
    • これもalias登録しておくとよい
  • ssh $(ec2ls-cache| peco | cut -f 1) みたいなのをalias登録して使う

頑張ったところ?

filtersとかcolumnsとかは完全にaws-sdk-goに依存していて、
ec2ls-cache内部には定義を一切持っていない。
そのためにcache用のJSON出力をstruct使わない形で書くのに挑戦してみた。

filtersはaws-sdk-goに渡すfilters同様の記述をそのまま渡せる。

columnsはaws-sdk-goのec2.Instancesのfield名をそのまま渡せる。
これのためにreflectを初めて使ってみた。

今回は以前使ったmkideal/cliからurfave/cliに変えてみた。

キャッシュファイル分けれるので条件変えて作れば便利

課題とか

  • テストが無い。
  • validate手抜き
  • tabwriterの調整が難しくてPrivateIpAddressを先頭にしておかないとうまくcutできない

とりあえずIPを調べるという作業をなくしたかったので満足