peco+sshのためのEC2DescribeInstancesなツールをGolangで再車輪した
pecoでsshする際に組み合わせるためのEC2をリストアップするコマンドラインをGolangで書いた。
前職でもec2-ls-hostsを使って同じことをしていたのだが、
現職で使うには機能が合っていなかったのでGolang手習い的な意味も込めて新たに書いてみた。
こういうのをサクッと書くのにGolang便利。
できたもの
Why 再車輪
現職ではMFAを設定しているので毎回うたなくて済むようにキャッシュを入れたかった。
後は、aws-sdk-goでのcredentials設定周りがpythonほど簡単ではないと思いこんでいて、
実際は書いてみたら自分が望む環境設定は比較的容易に満たせてそうだった。
この辺はそのうち気が向いたら検証してみたいかも。
使い方
- pecoを入れる
- ec2ls-cacheをGithubのReleaseからダウンロードしてパスの通る所に配置
- ローカルにキャッシュを作成更新
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を調べるという作業をなくしたかったので満足