ECSでAWSコンソールに入って見てたような情報をCLIでインタラクティブに見れるやつを作りました
インタラクティブにECS ServiceにデプロイされてるImageの一覧が見たいとき
こんな感じで$ ecswalk services
と打つと、jとkで選んだり、/
を押してpecoみたいにinteractiveでfilteringして選ぶこともできます。
AWSのコンソールで見たときの情報と、Dockerのimageのタグも出してるから何をデプロイしてるかぱっと確認するのに便利。 こんな感じでサービス名、TaskDefinitionのバージョン、DockerのImage、Tag、DesiredCountとRunning Countを出しています。
➜ ecswalk git:(master) ecswalk services ✔ prod-cluster Name TaskDefinition Image Tag Desired Running nginx nginx:1 nginx 1.12-alpine 2 2 nginx-proxy nginx:1 nginx 1.12-alpine 2 2 traefik traefik:1 traefik 1.5.4-alpine 3 3 web-alpine apache-alpine:1 httpd 2-alpine 2 2 web-apache apache:1 httpd 2.4.33 3 3
何気にService全件取得するのにもapiでページングがあって再帰的にとってきたり、取得したサービスの詳細をgoroutineで並列で一気にとってきたりとgolangのいい勉強になりました。
インタラクティブにTaskごとのコンテナインスタンスのIPとかの一覧が見たいとき
今度は$ ecswalk tasks
を打てばさっきと同じ感じでcluster、serviceを選んで起動しているtask一覧を見ることができます。
これで、画面に潜らなくてもどのコンテナインスタンスで動いてるかとか、Private IPアドレスとかcloudwatch logsのstream名を探すとき用のtask idが見つかります。
➜ ecswalk git:(master) ecswalk tasks ✔ prod-cluster ✔ traefik TaskId TaskDefinition Status EC2Instance PrivateIp 2daaf40e-2fb7-4716-b89d-4a9569ab29c4 traefik:1 RUNNING i-09fc1243eeedcdaf5 10.0.0.250 40a83588-d460-42ee-808d-119894f21586 traefik:1 RUNNING i-024119cec8db2f0d4 10.0.0.109 71ca28c0-ce70-4229-9165-8ec85153e315 traefik:1 RUNNING i-024119cec8db2f0d4 10.0.0.109
インタラクティブじゃない方法で取得したい場合はget
で
cluster一覧、service一覧、task一覧が見れます
インストール方法
goで書いているのでgo get
コマンドで使えるようになります。
$ go get -u github.com/mpon/ecswalk
各platformごとのビルドとか依存関係の固定とかの仕組みはまだ分かってないので手付かずです。おいおい調べながらやっていくつもりです。
AWSのシークレット情報の渡し方について
ecswalkはgo-aws-sdk-v2(いつのまにかv2が出てた)を使っているので、環境変数やaws configure経由でシークレットが供給されます。
direnvやenvchainなど環境変数切り替えについてはいつものAWS_ACCESS_KEY_ID
のような環境変数が使えるし、aws configureの設定も見に行ってくれます。
ただ、普段実務でAWSを使っている人は色々なAWSアカウントに対して操作することがあると思います。
そんなあなたは、コマンドを実行しているディレクトリ配下に、.ecswalk.yaml
を置いて以下のように設定するだけでOKです。
profile: your-profile
cobraとviperを使って雛形をもとに作成しているので、こういう設定系もいい感じに作ることができました。
まとめ
goっぽいやり方まだまだ習得できてないのであれですが、今年はインフラ関連のツールやミドルウェアを作れるようになっていきたいと思っているので、まずはその第一歩です。goでcli作り始めるにあたって適当に自分で始めたあとにこの本を買いまいした。goっぽさとかgoの空気感とかざっくり全体感を把握するのにオススメです。
最後に参考にさせてもらった記事、ありがとうございます:bow:ありがとうございます:bow:
GOPATHどうしようかなと調べてて何気に今までghqも使ってこなかったのでこの機会に入れてみたけどgo関係なくさっさとghq入れてればよかった・・・