まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

ECSでAWSコンソールに入って見てたような情報をCLIでインタラクティブに見れるやつを作りました

github.com

インタラクティブにECS ServiceにデプロイされてるImageの一覧が見たいとき

こんな感じで$ ecswalk servicesと打つと、jとkで選んだり、/を押してpecoみたいにinteractiveでfilteringして選ぶこともできます。

gif

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一覧を見ることができます。

gif

これで、画面に潜らなくてもどのコンテナインスタンスで動いてるかとか、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一覧が見れます

f:id:masato47744:20180326164610p:plain

インストール方法

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入れてればよかった・・・